licensor 0.4.2 → 0.4.3
raw patch · 4 files changed
+79/−67 lines, 4 filesdep −cmdargsPVP ok
version bump matches the API change (PVP)
Dependencies removed: cmdargs
API changes (from Hackage documentation)
Files
- CHANGELOG.md +4/−0
- README.md +14/−20
- app/Main.hs +59/−44
- licensor.cabal +2/−3
CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.4.3 (2021-02-06)++- Use System.Console.GetOpt instead of cmdargs+ # 0.4.2 (2021-01-31) - Fix "Error: ..." message
README.md view
@@ -9,7 +9,7 @@ Licensor is a program that generates a report of the dependencies and transitive dependencies of a Haskell project and their licenses. -NOTE: Currently, [Stack][https://haskellstack.org/] and a `stack.yaml` file are+NOTE: Currently, [Stack](https://haskellstack.org/) and a `stack.yaml` file are required. ## Description@@ -84,16 +84,10 @@ For more information, run `licensor --help`: ```-licensor 0.4.0--licensor [OPTIONS]--Common flags:- -? --help Display help message- -V --version Print version information- --numeric-version Print just the version number- -v --verbose Loud verbosity- -q --quiet Quiet verbosity+usage: licensor+ -q, -s --quiet, --silent Quiet/silent mode+ -h --help Display help message+ -V --version Print version information ``` ## Notes@@ -145,24 +139,24 @@ ### License report -Licensor (0.4.0) depends on the following libraries:+Licensor (0.4.3) depends on the following libraries: Library | License ------------------------- | --------------------------base | BSD3-Cabal | BSD3-cmdargs | BSD3-containers | BSD3-directory | BSD3-process | BSD3+Cabal | BSD-3+base | BSD-3+containers | BSD-3+directory | BSD-3+process | BSD-3 And the following licenses (including transitive dependencies): License | Number of libraries ------------------------- | --------------------------BSD3 | 20+BSD-2 | 1+BSD-3 | 20 -(Tested with Licensor 0.4.0, Stack 2.1.3, and LTS Haskell 11.11.)+(Tested with Licensor 0.4.3, Stack 2.5.1, and LTS Haskell 15.8.) ## Additional resources
app/Main.hs view
@@ -1,6 +1,3 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE NamedFieldPuns #-}- ---------------------------------------------------------------------- -- | -- Module: Main@@ -15,22 +12,19 @@ ) where --- licensor-import Licensor---- base-import Control.Monad-import Data.List-import qualified Data.Version as Version-import System.Environment-import qualified System.Exit as Exit- -- Cabal import Distribution.PackageDescription import Distribution.Text --- cmdargs-import System.Console.CmdArgs+-- base+import Control.Monad (unless)+import Data.Foldable (for_)+import Data.List (foldl', intercalate)+import Data.Version (showVersion)+import System.Console.GetOpt+import System.Environment (getArgs, getProgName)+import System.Exit (die, exitFailure, exitSuccess)+import System.IO (hPutStrLn, stderr, stdout) -- containers import qualified Data.Map.Strict as Map@@ -39,43 +33,64 @@ -- directory import System.Directory (doesFileExist) +-- licensor+import Licensor --- |------ -data LiArgs =- LiArgs- {- }- deriving (Data)+prettyUsageInfo :: String -> String+prettyUsageInfo progName =+ "usage: " <> usageInfo progName optDescrs --- |------+prettyVersion :: String -> String+prettyVersion progName =+ unwords [progName, showVersion version] -liArgs :: String -> Mode (CmdArgs LiArgs)-liArgs s =- cmdArgsMode $- LiArgs- {- }- &= program s- &= summary (unwords ["licensor", Version.showVersion version])- &= verbosity +optDescrs :: [OptDescr (Bool -> IO Bool)]+optDescrs =+ [ Option ['q', 's'] ["quiet", "silent"]+ (NoArg (\_ -> pure False))+ "Quiet/silent mode"+ , Option ['h'] ["help"]+ (NoArg (\_ -> exitWith prettyUsageInfo))+ "Display help message"+ , Option ['V'] ["version"]+ (NoArg (\_ -> exitWith prettyVersion))+ "Print version information"+ ]+ where+ exitWith f = do+ progName <- getProgName+ hPutStrLn stdout (f progName)+ exitSuccess --- |------ main :: IO () main = do- LiArgs <- cmdArgsRun . liArgs =<< getProgName+ args <- getArgs+ progName <- getProgName+ case getOpt' Permute optDescrs args of+ (opts, [], [], []) -> do+ verbose <- foldl' (>>=) (pure True) opts+ main' verbose+ (_, command:_, _, _) -> do+ hPutStrLn stderr ("unknown command: " <> command)+ hPutStrLn stderr (prettyUsageInfo progName)+ exitFailure+ (_, _, option:_, _) -> do+ hPutStrLn stderr ("unknown option: " <> option)+ hPutStrLn stderr (prettyUsageInfo progName)+ exitFailure+ (_, _, _, _) -> do+ hPutStrLn stderr (prettyUsageInfo progName)+ exitFailure - quiet <- fmap not isNormal +main' :: Bool -> IO ()+main' verbose = do+ let silent = not verbose+ maybePackage <- getPackage pid <-@@ -87,7 +102,7 @@ putStrLn "Found stack.yaml..." pure Nothing else- Exit.die "Error: No stack.yaml file found."+ die "Error: No stack.yaml file found." Just pd -> do putStrLn $@@ -105,11 +120,11 @@ case (maybeDependencies, maybeLicenses) of (Just dependencies, Just licenses) -> do (dependenciesByLicense', failed) <-- orderPackagesByLicense quiet pid licenses dependencies+ orderPackagesByLicense silent pid licenses dependencies let dependenciesByLicense = fmap (Set.map display) dependenciesByLicense' - forM_ (Map.keys dependenciesByLicense) $+ for_ (Map.keys dependenciesByLicense) $ \li -> let n = dependenciesByLicense Map.! li@@ -127,4 +142,4 @@ putStr "Failed: " print failed _ ->- Exit.die "Error: Unable to run 'stack ls dependencies'"+ die "Error: Unable to run 'stack ls dependencies'"
licensor.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: licensor-version: 0.4.2+version: 0.4.3 synopsis: A license compatibility helper description: A license compatibility helper. category: Distribution@@ -51,8 +51,7 @@ main-is: Main.hs build-depends:- cmdargs- , licensor+ licensor ghc-options: -threaded -rtsopts -with-rtsopts=-N