stackage-query 0.1.0 → 0.1.1
raw patch · 3 files changed
+103/−41 lines, 3 files
Files
- ChangeLog.md +12/−2
- Main.hs +86/−34
- stackage-query.cabal +5/−5
ChangeLog.md view
@@ -1,5 +1,15 @@ # Revision history for stackage-query -## 0.1.0.0 -- YYYY-mm-dd+## 0.1.1 -- 2017-07-02 -* First version. Released on an unsuspecting world.+* new commands for `constraints`, `dependencies`, `executables`, and `modules`+* `tools` command can now take optional package arg+* `latest` command now git pulls+* `update` command shows new shortlog+* git pull is now quiet+* add --version option++## 0.1.0 -- 2017-04-24++* initial release on Hackage with commands to query package versions,+ reverse deps, Stackage owners, latest snapshots, and no of consumers.
Main.hs view
@@ -3,7 +3,7 @@ import Control.Monad import Data.Char (isDigit) import Data.List-import qualified Data.Map.Strict (assocs, lookup)+import qualified Data.Map.Strict (assocs, keys, lookup) import Data.Maybe import Data.Monoid import qualified Data.Set as Set@@ -20,7 +20,10 @@ import Data.Foldable (traverse_) import Data.Yaml hiding (Parser) import Distribution.Package (PackageName(..), unPackageName)+import Distribution.Text (disp) +import Paths_stackage_query (version)+ newtype Args = Args Command newtype ConsumerOption = ConsumerOption {threshold :: Int}@@ -59,15 +62,21 @@ readsPrec _ "nightly" = [(Nightly,"")] readsPrec _ _ = [] +type Pkg = String+ data Command = Config Snapshot | Ghc Snapshot | Core Snapshot- | Tools Snapshot+ | Tools Snapshot (Maybe Pkg) | Packages Snapshot | Consumers ConsumerOption Snapshot- | Package Snapshot String- | Users Snapshot String- | Github Snapshot String+ | Package Snapshot Pkg+ | Users Snapshot Pkg+ | Github Snapshot Pkg+ | Constraints Snapshot Pkg+ | Dependencies Snapshot Pkg+ | Executables Snapshot Pkg+ | Modules Snapshot Pkg | Latest Project | Update Project @@ -75,8 +84,8 @@ consumeParser = ConsumerOption <$> option auto (long "minimum" <> short 'm' <> metavar "THRESHOLD" <> value 5 <> help "Show packages with at least THRESHOLD consumers (default 5)") -parseString :: String -> Parser String-parseString lbl = strArgument $ metavar lbl+parsePkg :: Pkg -> Parser Pkg+parsePkg lbl = strArgument $ metavar lbl parseSnap :: Parser Snapshot parseSnap = argument auto $ metavar "SNAP"@@ -87,15 +96,27 @@ commandParser :: Parser Command commandParser = subparser $- command "package" (info (Package <$> parseSnap <*> parseString "PKG")+ command "package" (info (Package <$> parseSnap <*> parsePkg "PKG") (progDesc "Show version of PKG in SNAP")) <>- command "users" (info (Users <$> parseSnap <*> parseString "PKG")+ command "users" (info (Users <$> parseSnap <*> (parsePkg "PKG")) (progDesc "Revdeps for PKG in SNAP")) <>- command "github" (info (Github <$> parseSnap <*> parseString "PKG")+ command "github" (info (Github <$> parseSnap <*> parsePkg "PKG") (progDesc "Stackage owners for PKG in SNAP")) <>+ command "constraints" (info (Constraints <$> parseSnap <*> parsePkg "PKG")+ (progDesc "Stackage constraints for PKG in SNAP"))+ <>+ command "dependencies" (info (Dependencies <$> parseSnap <*> parsePkg "PKG")+ (progDesc "Dependencies for PKG in SNAP"))+ <>+ command "executables" (info (Executables <$> parseSnap <*> parsePkg "PKG")+ (progDesc "Executables of PKG in SNAP"))+ <>+ command "modules" (info (Modules <$> parseSnap <*> parsePkg "PKG")+ (progDesc "Modules of PKG in SNAP"))+ <> command "latest" (info (Latest <$> parseProject) (progDesc "Latest snap for PROJECT (nightly or lts)")) <>@@ -108,7 +129,7 @@ command "core" (info (Core <$> parseSnap) (progDesc "GHC core libraries for SNAP")) <>- command "tools" (info (Tools <$> parseSnap)+ command "tools" (info (Tools <$> parseSnap <*> optional (parsePkg "PKG")) (progDesc "Tools for SNAP")) <> command "packages" (info (Packages <$> parseSnap)@@ -126,7 +147,7 @@ main :: IO () main = do cmd <- customExecParser (prefs showHelpOnEmpty)- (info (helper <*> argsParser) $ progDesc "Stackage query tool")+ (info (helper <*> versionOption <*> argsParser) $ progDesc "Stackage query tool") run cmd where run (Args cmd) =@@ -134,15 +155,24 @@ Config s -> stackageConfig s Ghc s -> buildplanGHC s Core s -> buildplanCore s- Tools s -> buildplanTools s+ Tools s mpkg -> buildplanTools s mpkg Packages s -> buildplanPackages s Consumers opts s -> buildplanConsumers opts s Package s pkg -> buildplanPackage s pkg- Users s pkg -> buildplanUsers s pkg+ Users s pkgs -> buildplanUsers s pkgs Github s pkg -> buildplanGithub s pkg+ Constraints s pkg -> buildplanConstraints s pkg+ Dependencies s pkg -> buildplanDependencies s pkg+ Executables s pkg -> buildplanExecutables s pkg+ Modules s pkg -> buildplanModules s pkg Latest prj -> buildplanLatest prj Update prj -> buildplanUpdate prj + versionOption =+ infoOption+ (showVersion version)+ (long "version" <> help "Show version")+ topurl :: String topurl = "https://www.stackage.org/" @@ -166,14 +196,15 @@ unless haveProj $ cloneProject configDir project return projectDir -findBuildPlanYaml :: Snapshot -> IO FilePath-findBuildPlanYaml snap = do- projectDir <- getProjectDir $ snapProject snap- findSnap True projectDir snap+findBuildPlanYaml :: Bool -> Snapshot -> IO FilePath+findBuildPlanYaml update snap = do+ dir <- getProjectDir $ snapProject snap+ when update $ updateProject False dir+ findSnap True dir snap getBuildPlan :: Snapshot -> IO BuildPlan getBuildPlan snap = do- ebp <- findBuildPlanYaml snap >>= decodeFileEither+ ebp <- findBuildPlanYaml False snap >>= decodeFileEither either (error . prettyPrintParseException) return ebp snapProject :: Snapshot -> Project@@ -189,7 +220,7 @@ then if update then do- updateProject dir+ updateProject False dir findSnap False dir snap else error $ "Snap " ++ show snap ++ " not found"@@ -242,12 +273,12 @@ putStrLn $ "Cloning " ++ url git_ dir "clone" [url] -updateProject :: FilePath -> IO ()-updateProject dir = do+updateProject :: Bool -> FilePath -> IO ()+updateProject verbose dir = do msg <- shortLog- _ <- git dir "pull" []+ _ <- git dir "pull" ["-q"] msg' <- shortLog- when (msg /= msg') $ putStrLn $ msg ++ " -> " ++ msg'+ when (verbose && msg /= msg') $ putStrLn $ msg ++ " -> " ++ msg' where shortLog = removePrefix "Checking in " . unwords . tail . words <$> git dir "log" ["--oneline", "-1"]@@ -267,10 +298,10 @@ let si = bpSystemInfo bp traverse_ (putStrLn . showPkgVer) $ (Data.Map.Strict.assocs . siCorePackages) si -buildplanTools :: Snapshot -> IO ()-buildplanTools snap = do+buildplanTools :: Snapshot -> Maybe Pkg -> IO ()+buildplanTools snap mpkg = do bp <- getBuildPlan snap- traverse_ (putStrLn . showPkgVer) $ bpTools bp+ maybe (traverse_ (putStrLn . showPkgVer) $ bpTools bp) (buildplanPkgTools snap) mpkg buildplanPackages :: Snapshot -> IO () buildplanPackages snap = do@@ -288,21 +319,21 @@ when (n >= threshold opts) $ putStrLn $ show n ++ " " ++ unPackageName p -evalPackageBuildPlan :: Snapshot -> String -> (PackagePlan -> String) -> IO ()+evalPackageBuildPlan :: Snapshot -> Pkg -> (PackagePlan -> String) -> IO () evalPackageBuildPlan snap pkg expr = do bp <- getBuildPlan snap let mpkgplan = Data.Map.Strict.lookup (PackageName pkg) $ bpPackages bp putStrLn $ maybe "Package not found" expr mpkgplan -buildplanPackage :: Snapshot -> String -> IO ()+buildplanPackage :: Snapshot -> Pkg -> IO () buildplanPackage snap pkg = evalPackageBuildPlan snap pkg (showVersion . ppVersion) -buildplanUsers :: Snapshot -> String -> IO ()+buildplanUsers :: Snapshot -> Pkg -> IO () buildplanUsers snap pkg = evalPackageBuildPlan snap pkg (unwords . Set.elems . Set.map unPackageName . ppUsers) -buildplanGithub :: Snapshot -> String -> IO ()+buildplanGithub :: Snapshot -> Pkg -> IO () buildplanGithub snap pkg = evalPackageBuildPlan snap pkg (unwords . Set.elems . Set.map T.unpack . ppGithubPings) @@ -312,9 +343,30 @@ buildplanLatest :: Project -> IO () buildplanLatest prj = do- latest <- takeBaseName <$> findBuildPlanYaml (projectToSnap prj)- putStrLn latest+ latest <- findBuildPlanYaml True (projectToSnap prj)+ putStrLn $ takeBaseName latest buildplanUpdate :: Project -> IO () buildplanUpdate project =- getProjectDir project >>= updateProject+ getProjectDir project >>= updateProject True++buildplanConstraints :: Snapshot -> Pkg -> IO ()+buildplanConstraints snap pkg =+ evalPackageBuildPlan snap pkg (show . disp . pcVersionRange . ppConstraints)++buildplanDependencies :: Snapshot -> Pkg -> IO ()+buildplanDependencies snap pkg =+ evalPackageBuildPlan snap pkg (unlines . map unPackageName . Data.Map.Strict.keys . sdPackages . ppDesc)++buildplanExecutables :: Snapshot -> Pkg -> IO ()+buildplanExecutables snap pkg =+ evalPackageBuildPlan snap pkg (unlines . map (T.unpack . unExeName) . Set.toList. sdProvidedExes . ppDesc)++buildplanPkgTools :: Snapshot -> Pkg -> IO ()+buildplanPkgTools snap pkg =+ evalPackageBuildPlan snap pkg (unlines . map (T.unpack . unExeName) . Data.Map.Strict.keys . sdTools . ppDesc)++buildplanModules :: Snapshot -> Pkg -> IO ()+buildplanModules snap pkg =+ evalPackageBuildPlan snap pkg (unlines . map T.unpack . Set.toList. sdModules . ppDesc)+
stackage-query.cabal view
@@ -1,14 +1,14 @@ name: stackage-query-version: 0.1.0+version: 0.1.1 synopsis: Stackage package query-description: Tool to query package versions in Stackage+description: Tool to query package metadata in Stackage license: MIT license-file: LICENSE homepage: https://github.com/juhp/stackage-query bug-reports: https://github.com/juhp/stackage-query/issues-author: Jens Petersen-maintainer: juhpetersen@gmail.com-copyright: Jens Petersen+author: Jens Petersen <juhpetersen@gmail.com>+maintainer: Jens Petersen <juhpetersen@gmail.com>+copyright: 2017 Jens Petersen <juhpetersen@gmail.com> category: Distribution build-type: Simple extra-source-files: ChangeLog.md