licensor 0.2.2 → 0.3.0
raw patch · 5 files changed
+56/−9 lines, 5 files
Files
- CHANGELOG.md +11/−0
- Main.hs +2/−1
- README.md +1/−1
- licensor.cabal +2/−2
- src/Licensor.hs +40/−5
CHANGELOG.md view
@@ -1,3 +1,14 @@+# 0.3.0 (2019-02-05)++## Enhancements++- Use Stack (executable) to get licenses (ec8412b)+- Use `ls dependencies` instead of `list-dependencies` (4f4d41d)++## Bugs++- Fix incorrect license if package matches a Hackage package (#23)+ # 0.2.2 (2018-01-16) - Allow http-conduit 2.3 (558fe3d)
Main.hs view
@@ -101,6 +101,7 @@ return (Just package) maybeDependencies <- getDependencies+ maybeLicenses <- getLicenses case maybeDependencies of Nothing ->@@ -108,7 +109,7 @@ Just dependencies -> do (dependenciesByLicense', failed) <-- orderPackagesByLicense quiet pid dependencies+ orderPackagesByLicense quiet pid maybeLicenses dependencies let dependenciesByLicense = fmap (Set.map display) dependenciesByLicense'
README.md view
@@ -3,7 +3,7 @@ [![][1]][0] [0]: https://circleci.com/gh/jpvillaisaza/licensor-[1]: https://circleci.com/gh/jpvillaisaza/licensor.svg?style=svg+[1]: https://circleci.com/gh/jpvillaisaza/licensor.svg?style=shield [![][2]](https://www.stackage.org/lts/package/licensor) [![][3]](https://www.stackage.org/nightly/package/licensor)
licensor.cabal view
@@ -1,8 +1,8 @@ name: licensor-version: 0.2.2+version: 0.3.0 build-type: Simple-cabal-version: >= 1.21+cabal-version: >= 1.10 license: MIT license-file: LICENSE.md
src/Licensor.hs view
@@ -16,6 +16,7 @@ ( LiLicense(..) , LiPackage(..) , getDependencies+ , getLicenses , getPackage , orderPackagesByLicense , version@@ -116,7 +117,7 @@ getDependencies :: IO (Maybe (Set PackageIdentifier)) getDependencies = do eitherDeps <-- Exception.try $ readProcess "stack" ["list-dependencies", "--separator", "-"] ""+ Exception.try $ readProcess "stack" ["ls", "dependencies", "--separator", "-"] "" case eitherDeps of Left (_ :: IOError) ->@@ -126,13 +127,46 @@ return $ fmap Set.fromList $ sequence $ fmap simpleParse (lines deps) +getLicenses :: IO (Maybe [(PackageName, License)])+getLicenses = do+ eitherDeps <-+ Exception.try $ readProcess "stack" ["ls", "dependencies", "--license"] ""++ case eitherDeps of+ Left (_ :: IOError) ->+ return Nothing++ Right deps ->+ return $ sequence $ fmap toNameLicense (lines deps)+ where+ toNameLicense dep =+ case words dep of+ [name, license] ->+ (,) <$> simpleParse name <*> simpleParse license++ _ ->+ Nothing++ -- | -- -- -getPackageLicense :: Bool -> PackageIdentifier -> IO (Maybe LiLicense)-getPackageLicense quiet p@PackageIdentifier{..} = do+getPackageLicense+ :: Bool+ -> PackageIdentifier+ -> Maybe [(PackageName, License)]+ -> IO (Maybe LiLicense)+getPackageLicense quiet p@PackageIdentifier{..} (Just licenses) = do unless quiet (putStr $ display p ++ "...")+ case lookup pkgName licenses of+ Just license -> do+ unless quiet (putStrLn $ display license)+ return $ Just (LiLicense license)+ Nothing ->+ return Nothing+getPackageLicense quiet p@PackageIdentifier{..} Nothing = do+ unless quiet (putStr $ display p ++ "...") let url = "GET https://hackage.haskell.org/package/"@@ -169,15 +203,16 @@ orderPackagesByLicense :: Bool -> Maybe PackageIdentifier+ -> Maybe [(PackageName, License)] -> Set PackageIdentifier -> IO (Map LiLicense (Set PackageIdentifier), Set PackageIdentifier)-orderPackagesByLicense quiet maybeP =+orderPackagesByLicense quiet maybeP maybeLicenses = let cond = maybe (const False) (==) maybeP insertPackage package orderedPackages' = do- maybeLicense <- getPackageLicense quiet package+ maybeLicense <- getPackageLicense quiet package maybeLicenses (orderedPackages, failed) <- orderedPackages' return $