packages feed

stackage-query 0.1.0 → 0.1.1

raw patch · 3 files changed

+103/−41 lines, 3 files

Files

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