Add a report of errors

This commit is contained in:
Juan Pedro Villa Isaza 2016-09-10 17:56:01 -05:00
parent f6735cb872
commit ec640bb8ff
2 changed files with 48 additions and 21 deletions

10
Main.hs
View File

@ -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

View File

@ -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,15 +135,24 @@ getPackageLicense p@PackageIdentifier{..} = do
<> ".cabal" <> ".cabal"
req <- parseRequest url req <- parseRequest url
pd <- fmap getResponseBody (httpLBS req) eitherPd <- Exception.try $ fmap getResponseBody (httpLBS req)
(file, handle) <- openTempFile "/tmp" "licensor" case eitherPd of
hClose handle Left (_ :: HttpException) ->
ByteString.writeFile file pd return Nothing
PackageDescription{license} <- getPackageDescription file
hClose handle Right pd -> do
removeFile file
return (LiLicense license) (file, handle) <- openTempFile "/tmp" "licensor"
hClose handle
ByteString.writeFile file pd
PackageDescription{license} <- getPackageDescription file
hClose handle
removeFile file
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
Set.union Nothing ->
license ( orderedPackages, Set.insert package failed
(Set.singleton package) )
orderedPackages
Just license ->
( Map.insertWith
Set.union
license
(Set.singleton package)
orderedPackages
, failed
)
in in
foldr insertPackage (pure mempty) foldr insertPackage (pure (mempty, mempty))
-- | -- |