Add a report of errors
This commit is contained in:
parent
f6735cb872
commit
ec640bb8ff
10
Main.hs
10
Main.hs
@ -95,8 +95,10 @@ main = do
|
|||||||
Exit.die "Error: ..."
|
Exit.die "Error: ..."
|
||||||
|
|
||||||
Just dependencies -> do
|
Just dependencies -> do
|
||||||
dependenciesByLicense <-
|
(dependenciesByLicense', failed) <-
|
||||||
fmap (Set.map display) <$> orderPackagesByLicense pid dependencies
|
orderPackagesByLicense pid dependencies
|
||||||
|
|
||||||
|
let dependenciesByLicense = fmap (Set.map display) dependenciesByLicense'
|
||||||
|
|
||||||
forM_ (Map.keys dependenciesByLicense) $
|
forM_ (Map.keys dependenciesByLicense) $
|
||||||
\license ->
|
\license ->
|
||||||
@ -111,3 +113,7 @@ main = do
|
|||||||
<> display license
|
<> display license
|
||||||
<> ": "
|
<> ": "
|
||||||
<> intercalate ", " (Set.toList n)
|
<> intercalate ", " (Set.toList n)
|
||||||
|
|
||||||
|
unless (null failed) $ do
|
||||||
|
putStr "Failed: "
|
||||||
|
print failed
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||||
{-# LANGUAGE NamedFieldPuns #-}
|
{-# LANGUAGE NamedFieldPuns #-}
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
-- |
|
-- |
|
||||||
@ -22,6 +23,7 @@ module Licensor
|
|||||||
where
|
where
|
||||||
|
|
||||||
-- base
|
-- base
|
||||||
|
import qualified Control.Exception as Exception
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import Data.Version (Version)
|
import Data.Version (Version)
|
||||||
import System.IO
|
import System.IO
|
||||||
@ -121,8 +123,9 @@ getDependencies =
|
|||||||
--
|
--
|
||||||
--
|
--
|
||||||
|
|
||||||
getPackageLicense :: PackageIdentifier -> IO LiLicense
|
getPackageLicense :: PackageIdentifier -> IO (Maybe LiLicense)
|
||||||
getPackageLicense p@PackageIdentifier{..} = do
|
getPackageLicense p@PackageIdentifier{..} = do
|
||||||
|
putStr $ display p ++ "..."
|
||||||
let
|
let
|
||||||
url =
|
url =
|
||||||
"GET https://hackage.haskell.org/package/"
|
"GET https://hackage.haskell.org/package/"
|
||||||
@ -132,7 +135,13 @@ getPackageLicense p@PackageIdentifier{..} = do
|
|||||||
<> ".cabal"
|
<> ".cabal"
|
||||||
|
|
||||||
req <- parseRequest url
|
req <- parseRequest url
|
||||||
pd <- fmap getResponseBody (httpLBS req)
|
eitherPd <- Exception.try $ fmap getResponseBody (httpLBS req)
|
||||||
|
|
||||||
|
case eitherPd of
|
||||||
|
Left (_ :: HttpException) ->
|
||||||
|
return Nothing
|
||||||
|
|
||||||
|
Right pd -> do
|
||||||
|
|
||||||
(file, handle) <- openTempFile "/tmp" "licensor"
|
(file, handle) <- openTempFile "/tmp" "licensor"
|
||||||
hClose handle
|
hClose handle
|
||||||
@ -140,7 +149,10 @@ getPackageLicense p@PackageIdentifier{..} = do
|
|||||||
PackageDescription{license} <- getPackageDescription file
|
PackageDescription{license} <- getPackageDescription file
|
||||||
hClose handle
|
hClose handle
|
||||||
removeFile file
|
removeFile file
|
||||||
return (LiLicense license)
|
|
||||||
|
putStrLn $ display license
|
||||||
|
|
||||||
|
return $ Just (LiLicense license)
|
||||||
|
|
||||||
|
|
||||||
-- |
|
-- |
|
||||||
@ -150,24 +162,33 @@ getPackageLicense p@PackageIdentifier{..} = do
|
|||||||
orderPackagesByLicense
|
orderPackagesByLicense
|
||||||
:: PackageIdentifier
|
:: PackageIdentifier
|
||||||
-> Set PackageIdentifier
|
-> Set PackageIdentifier
|
||||||
-> IO (Map LiLicense (Set PackageIdentifier))
|
-> IO (Map LiLicense (Set PackageIdentifier), Set PackageIdentifier)
|
||||||
orderPackagesByLicense p =
|
orderPackagesByLicense p =
|
||||||
let
|
let
|
||||||
insertPackage package orderedPackages' = do
|
insertPackage package orderedPackages' = do
|
||||||
license <- getPackageLicense package
|
maybeLicense <- getPackageLicense package
|
||||||
orderedPackages <- orderedPackages'
|
|
||||||
|
(orderedPackages, failed) <- orderedPackages'
|
||||||
return $
|
return $
|
||||||
if p == package
|
if p == package
|
||||||
then
|
then
|
||||||
orderedPackages
|
(orderedPackages, failed)
|
||||||
else
|
else
|
||||||
Map.insertWith
|
case maybeLicense of
|
||||||
|
Nothing ->
|
||||||
|
( orderedPackages, Set.insert package failed
|
||||||
|
)
|
||||||
|
|
||||||
|
Just license ->
|
||||||
|
( Map.insertWith
|
||||||
Set.union
|
Set.union
|
||||||
license
|
license
|
||||||
(Set.singleton package)
|
(Set.singleton package)
|
||||||
orderedPackages
|
orderedPackages
|
||||||
|
, failed
|
||||||
|
)
|
||||||
in
|
in
|
||||||
foldr insertPackage (pure mempty)
|
foldr insertPackage (pure (mempty, mempty))
|
||||||
|
|
||||||
|
|
||||||
-- |
|
-- |
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user