cabal-sort 0.0.2.1 → 0.0.3
raw patch · 3 files changed
+47/−18 lines, 3 filesdep +utility-htdep ~explicit-exception
Dependencies added: utility-ht
Dependency ranges changed: explicit-exception
Files
- cabal-sort.cabal +4/−3
- src/CabalSort.hs +1/−1
- src/GhcPkgDep.hs +42/−14
cabal-sort.cabal view
@@ -1,5 +1,5 @@ Name: cabal-sort-Version: 0.0.2.1+Version: 0.0.3 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -62,7 +62,7 @@ Source-Repository this type: darcs location: http://code.haskell.org/~thielema/cabal-sort/- tag: 0.0.2.1+ tag: 0.0.3 Executable cabal-sort@@ -85,7 +85,8 @@ Cabal >=1.6 && <1.11, process >=1.0 && <1.1, containers >=0.2 && <0.5,- explicit-exception >=0.1.4 && <0.2,+ explicit-exception >=0.1.6 && <0.2,+ utility-ht >=0.0.5 && <0.1, transformers >=0.2 && <0.3, bytestring >=0.9.1 && <0.10, base >=2 && <5
src/CabalSort.hs view
@@ -3,7 +3,7 @@ import qualified Distribution.PackageDescription as P import Distribution.PackageDescription (GenericPackageDescription, PackageDescription,- package, packageDescription, buildDepends, )+ package, packageDescription, ) import Distribution.PackageDescription.Parse (readPackageDescription, ) import Distribution.Package (Dependency(Dependency), PackageName(PackageName), pkgName, )
src/GhcPkgDep.hs view
@@ -1,10 +1,6 @@ module Main where -import qualified Distribution.Verbosity as Verbosity-import qualified Distribution.ReadE as ReadE- import qualified System.Process as Proc-import qualified System.Exit as Exit import qualified System.IO as IO import System.Console.GetOpt@@ -26,6 +22,9 @@ import qualified Data.ByteString.Char8 as B +import qualified Data.List.HT as ListHT+import qualified Data.List as List+import qualified Data.Char as Char import Control.Monad (when, guard, ) import Data.Maybe (fromMaybe, ) @@ -58,7 +57,8 @@ optHelp :: Bool, optVerbosity :: Verbosity.Verbosity, optUser, optGlobal :: Bool,- optShowVersions :: Bool+ optShowVersions :: Bool,+ optPkgCmd :: String } defltFlags :: Flags@@ -68,7 +68,8 @@ optVerbosity = Verbosity.silent, optUser = False, optGlobal = False,- optShowVersions = False+ optShowVersions = False,+ optPkgCmd = "ghc-pkg" } options :: [OptDescr (Flags -> Exc.Exceptional String Flags)]@@ -93,6 +94,12 @@ Option [] ["show-versions"] (NoArg (\flags -> return $ flags{optShowVersions = True})) "show package version numbers in the output" :+ Option [] ["pkg-cmd"]+ (ReqArg+ (\str flags -> return flags{optPkgCmd = str})+ "COMMAND")+ ("command for querying the package database (default: " +++ optPkgCmd defltFlags ++ ")") : [] @@ -136,7 +143,7 @@ Flags -> PkgName -> Exc.ExceptionalT String IO [PkgName] getDirectDependencies flags name = do- let cmd = "ghc-pkg"+ let cmd = optPkgCmd flags args = (if optUser flags then ("--user" :) else id) $ (if optGlobal flags then ("--global" :) else id) $@@ -149,19 +156,40 @@ errTxt <- Trans.lift $ B.hGetContents err when (optVerbosity flags >= Verbosity.normal) $ Trans.lift $ putStr $ B.unpack errTxt- exit <- Trans.lift $ Proc.waitForProcess pid- case exit of- Exit.ExitSuccess -> return ()- Exit.ExitFailure n ->- Exc.throwT $- "ghc-pkg exited with code " ++ show n ++ "\n" ++ B.unpack errTxt+ Exc.mapExceptionT (\n ->+ "ghc-pkg exited with code " ++ show n ++ "\n" ++ B.unpack errTxt) $+ Exc.fromExitCodeT $+ Proc.waitForProcess pid Trans.lift (mapM_ IO.hClose [inp,out,err]) case words (B.unpack txt) of "depends:":names ->- return (filter ("depends:"/=) names)+ {-+ If multiple packages are installed,+ then the dependencies of each are preceded by a 'depends:' prefix.++ ghc-pkg lists 'builtin_rts' as dependency of 'base',+ but does not accept this identifier as package name,+ since it contains an underscore.+ -}+ return $+ map stripHashId $+ filter (not . flip elem ["depends:", "builtin_rts"]) names _ -> Exc.throwT $ "unexpected output of ghc-pkg - " ++ "it should start with 'depends:'" ++ if optVerbosity flags >= Verbosity.verbose then "\n" ++ B.unpack txt else ""++stripHashId :: PkgName -> PkgName+stripHashId name =+ (\parts ->+ let lastPart = last parts+ in if (not $ null $ drop 15 lastPart) &&+ all Char.isHexDigit lastPart+ then List.intercalate "-" $ init parts+ else name)+ .+ ListHT.chop ('-'==)+ $+ name