From f545a4c170c409618fe3be659e69570ba43adf5e Mon Sep 17 00:00:00 2001 From: Juan Pedro Villa Isaza Date: Sat, 10 Sep 2016 18:20:40 -0500 Subject: [PATCH] Allow use if stack.yaml file is found --- Main.hs | 15 ++++++++++++--- licensor.cabal | 1 + src/Licensor.hs | 22 ++++++++++++++++------ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Main.hs b/Main.hs index d15dabd..e2f6280 100644 --- a/Main.hs +++ b/Main.hs @@ -37,6 +37,9 @@ import System.Console.CmdArgs import qualified Data.Map.Strict as Map import qualified Data.Set as Set +-- directory +import System.Directory (doesFileExist) + -- | -- @@ -75,8 +78,14 @@ main = do pid <- case maybePackage of - Nothing -> - Exit.die "Error: No Cabal file found." + Nothing -> do + stack <- doesFileExist "stack.yaml" + if stack + then do + putStrLn "Found stack.yaml..." + return Nothing + else + Exit.die "Error: No Cabal file found." Just PackageDescription{..} -> do putStrLn $ @@ -86,7 +95,7 @@ main = do <> "License: " <> display license <> ")" - return package + return (Just package) maybeDependencies <- getDependencies diff --git a/licensor.cabal b/licensor.cabal index 51c9ca9..f65c98b 100644 --- a/licensor.cabal +++ b/licensor.cabal @@ -55,6 +55,7 @@ executable licensor , Cabal >= 1.22 && < 1.25 , cmdargs >= 0.10 && < 0.11 , containers + , directory , licensor default-language: Haskell2010 diff --git a/src/Licensor.hs b/src/Licensor.hs index 24bc315..4fe492a 100644 --- a/src/Licensor.hs +++ b/src/Licensor.hs @@ -114,9 +114,16 @@ getPackageDescription = -- getDependencies :: IO (Maybe (Set PackageIdentifier)) -getDependencies = - fmap Set.fromList . sequence . fmap simpleParse . lines - <$> readProcess "stack" ["list-dependencies", "--separator", "-"] "" +getDependencies = do + eitherDeps <- + Exception.try $ readProcess "stack" ["list-dependencies", "--separator", "-"] "" + + case eitherDeps of + Left (_ :: IOError) -> + return Nothing + + Right deps -> + return $ fmap Set.fromList $ sequence $ fmap simpleParse (lines deps) -- | @@ -160,17 +167,20 @@ getPackageLicense p@PackageIdentifier{..} = do -- orderPackagesByLicense - :: PackageIdentifier + :: Maybe PackageIdentifier -> Set PackageIdentifier -> IO (Map LiLicense (Set PackageIdentifier), Set PackageIdentifier) -orderPackagesByLicense p = +orderPackagesByLicense maybeP = let + cond = + maybe (const False) (==) maybeP + insertPackage package orderedPackages' = do maybeLicense <- getPackageLicense package (orderedPackages, failed) <- orderedPackages' return $ - if p == package + if cond package then (orderedPackages, failed) else