packages feed

cabal-cargs 0.3 → 0.3.1

raw patch · 4 files changed

+60/−21 lines, 4 files

Files

cabal-cargs.cabal view
@@ -1,5 +1,5 @@ name: cabal-cargs-version: 0.3+version: 0.3.1 cabal-version: >=1.9.2 build-type: Simple license: BSD3@@ -20,8 +20,8 @@     tests/inputFiles/withoutSandbox/exe/Source.hs     tests/inputFiles/withoutSandbox/lib/Source.hs     tests/inputFiles/withSandbox/test.cabal+    tests/inputFiles/withSandbox/cabal.sandbox.config     tests/inputFiles/withSandbox/dist/dist-sandbox-6d1acfa0/.gitignore-    tests/inputFiles/withSandbox/.cabal-sandbox/x86_64-linux-ghc-7.6.2-packages.conf.d/.gitignore     tests/inputFiles/withSandbox/exe/Source.hs     tests/inputFiles/withSandbox/lib/Source.hs     tests/goldenFiles/withoutSandbox/*.txt
lib/CabalCargs/Spec.hs view
@@ -25,7 +25,8 @@ import Filesystem.Path.CurrentOS ((</>)) import qualified Filesystem as FS import qualified Data.Text as T-import Data.List (find, isSuffixOf, isPrefixOf)+import Data.List (find, isPrefixOf)+import qualified Data.List as L import Data.Maybe (isJust)  @@ -43,6 +44,8 @@   type Error = String++io :: MonadIO m => IO a -> m a io = liftIO   @@ -91,9 +94,9 @@ --   the path to its package database is also returned. fromCabalFile :: FilePath -> S.Sections -> F.Fields -> EitherT Error IO Spec fromCabalFile file sections fields = do-   pkgDB     <- io $ findPackageDB file-   distDir   <- io $ findDistDir file    pkgDescrp <- packageDescription file+   pkgDB     <- findPackageDB file+   distDir   <- io $ findDistDir file    absFile   <- FP.encodeString <$> (io $ absoluteFile file)    right $ Spec       { sections      = sections@@ -120,7 +123,7 @@ fromSourceFile :: FilePath -> F.Fields -> EitherT Error IO Spec fromSourceFile file fields = do    cabalFile   <- findCabalFile file-   pkgDB       <- io $ findPackageDB cabalFile+   pkgDB       <- findPackageDB cabalFile    distDir     <- io $ findDistDir cabalFile    pkgDescrp   <- packageDescription cabalFile    srcSections <- io $ findSections file cabalFile pkgDescrp@@ -261,21 +264,34 @@  -- | Find the package database of the cabal sandbox from the given cabal file. --   The returned file path is relative to the directory of the cabal file.-findPackageDB :: FilePath -> IO (Maybe FilePath)+findPackageDB :: FilePath -> EitherT Error IO (Maybe FilePath) findPackageDB cabalFile = do-   cabalDir <- absoluteDirectory cabalFile-   let sandboxDir = cabalDir </> FP.decodeString ".cabal-sandbox"-   hasDir <- FS.isDirectory sandboxDir-   if hasDir+   cabalDir <- io $ absoluteDirectory cabalFile+   let sandboxConfig = cabalDir </> sandbox_config+   isFile   <- io $ FS.isFile sandboxConfig+   if isFile       then do-         files <- filterM FS.isDirectory =<< (FS.listDirectory sandboxDir)-         return $ FP.encodeString . (stripPrefix cabalDir) <$> find isPackageDB files-      else return Nothing+         packageDB <- io $ readPackageDB sandboxConfig+         case packageDB of+              Just db -> right . Just $ stripPrefix cabalDir db+              _       -> left $ "Couldn't find field 'package-db: ' in " ++ (show sandboxConfig)+      else+         right Nothing     where-      isPackageDB file = "packages.conf.d" `isSuffixOf` (FP.encodeString file)+      -- | reads the 'package-db: ' field from the sandbox config file and returns the value of the field+      readPackageDB :: FP.FilePath -> IO (Maybe FP.FilePath)+      readPackageDB sandboxConfig = do+         lines <- lines <$> Strict.readFile (FP.encodeString sandboxConfig)+         return $ do+            line      <- find (package_db `L.isPrefixOf`) lines+            packageDB <- L.stripPrefix package_db line+            return $ FP.decodeString packageDB +      sandbox_config = FP.decodeString "cabal.sandbox.config"+      package_db     = "package-db: " + -- | Find the dist directory of the cabal build from the given cabal file. For a non sandboxed --   build it's just the directory 'dist' in the cabal build directory. For a sandboxed build --   it's the directory 'dist/dist-sandbox-*'. The returned file path is relative to the@@ -288,7 +304,7 @@    if hasDistDir       then do          files <- filterM FS.isDirectory =<< (FS.listDirectory distDir)-         return $ FP.encodeString . (stripPrefix cabalDir) <$> maybe (Just distDir) Just (find isSandboxDistDir files)+         return $ (stripPrefix cabalDir) <$> maybe (Just distDir) Just (find isSandboxDistDir files)       else return Nothing     where@@ -309,13 +325,13 @@ absoluteFile = FS.canonicalizePath . FP.decodeString  -stripPrefix :: FP.FilePath -> FP.FilePath -> FP.FilePath+stripPrefix :: FP.FilePath -> FP.FilePath -> FilePath stripPrefix prefix file    | Just stripped <- FP.stripPrefix prefix file-   = stripped+   = FP.encodeString stripped     | otherwise-   = file+   = FP.encodeString file   combineSections :: S.Sections -> [S.Section] -> S.Sections
− tests/inputFiles/withSandbox/.cabal-sandbox/x86_64-linux-ghc-7.6.2-packages.conf.d/.gitignore
@@ -1,2 +0,0 @@-*-!.gitignore
+ tests/inputFiles/withSandbox/cabal.sandbox.config view
@@ -0,0 +1,25 @@+-- This is a Cabal package environment file.+-- THIS FILE IS AUTO-GENERATED. DO NOT EDIT DIRECTLY.+-- Please create a 'cabal.config' file in the same directory+-- if you want to change the default settings for this sandbox.+++local-repo: .cabal-sandbox/packages+logs-dir: .cabal-sandbox/logs+world-file: .cabal-sandbox/world+user-install: False+package-db: .cabal-sandbox/x86_64-linux-ghc-7.6.2-packages.conf.d+build-summary: .cabal-sandbox/logs/build.log++install-dirs +  prefix: .cabal-sandbox+  bindir: $prefix/bin+  libdir: $prefix/lib+  libsubdir: $arch-$os-$compiler/$pkgid+  libexecdir: $prefix/libexec+  datadir: $prefix/share+  datasubdir: $arch-$os-$compiler/$pkgid+  docdir: $datadir/doc/$arch-$os-$compiler/$pkgid+  htmldir: $docdir/html+  haddockdir: $htmldir+  sysconfdir: $prefix/etc