stackage-sandbox 0.1.1 → 0.1.2
raw patch · 3 files changed
+37/−40 lines, 3 filesdep +directorydep −system-fileiodep −system-filepathdep ~conduit-combinatorsPVP ok
version bump matches the API change (PVP)
Dependencies added: directory
Dependencies removed: system-fileio, system-filepath
Dependency ranges changed: conduit-combinators
API changes (from Hackage documentation)
Files
- ChangeLog.md +5/−0
- main/Sandbox.hs +29/−36
- stackage-sandbox.cabal +3/−4
ChangeLog.md view
@@ -1,3 +1,8 @@+## 0.1.2++* Migrated off of system-filepath and system-fileio+ in favor of filepath and directory.+ ## 0.1.1 * Added an associated library (stubbed)
main/Sandbox.hs view
@@ -24,18 +24,16 @@ import qualified Data.Text.Lazy.Builder.Int as Builder import qualified Data.Text.Lazy as LText import Data.Typeable (Typeable)-import Filesystem.Path.CurrentOS as Path-import Filesystem import Options.Applicative hiding (header, progDesc) import Stackage.CLI+import System.Directory import System.Environment (lookupEnv) import System.Exit-import System.FilePath (addTrailingPathSeparator)-import System.IO (hPutStrLn, stderr)+import System.FilePath (addTrailingPathSeparator, (</>))+import System.IO (hPutStrLn, stderr, openFile, IOMode(AppendMode)) import System.IO.Error (isDoesNotExistError) import System.Process (callProcess, readProcess) import qualified Paths_stackage_sandbox as CabalInfo-import Prelude hiding (FilePath) type Snapshot = Text type Package = Text@@ -107,14 +105,9 @@ addCommand "delete" deleteDesc Delete (optional snapshotParser) addCommand "upgrade" upgradeDesc Upgrade (optional snapshotParser) -toText' :: Path.FilePath -> IO Text-toText' p = case toText p of- Left e -> throwIO $ DecodePathFail e- Right t -> return t--cabalSandboxInit :: Path.FilePath -> IO ()+cabalSandboxInit :: FilePath -> IO () cabalSandboxInit dir = do- dirText <- toText' dir+ let dirText = T.pack dir let args = [ "sandbox" , "init"@@ -141,14 +134,14 @@ -- TODO: verify things about the packages in the sandbox sandboxVerify :: IO () sandboxVerify = do- cabalConfigExists <- isFile "cabal.config"- cabalSandboxConfigExists <- isFile "cabal.sandbox.config"+ cabalConfigExists <- doesFileExist "cabal.config"+ cabalSandboxConfigExists <- doesFileExist "cabal.sandbox.config" if (cabalConfigExists && cabalSandboxConfigExists) then do packageDb <- getPackageDb snapshot <- parseConfigSnapshot snapshotDir <- getSnapshotDir snapshot- snapshotDirText <- toText' snapshotDir+ let snapshotDirText = T.pack snapshotDir when (not $ T.isPrefixOf snapshotDirText packageDb) $ do throwIO $ PackageDbLocMismatch snapshotDirText packageDb else do@@ -164,11 +157,11 @@ sandboxInit :: Maybe Snapshot -> IO () sandboxInit msnapshot = do- cabalSandboxConfigExists <- isFile "cabal.sandbox.config"+ cabalSandboxConfigExists <- doesFileExist "cabal.sandbox.config" when cabalSandboxConfigExists $ do throwIO ConfigAlreadyExists - cabalConfigExists <- isFile "cabal.config"+ cabalConfigExists <- doesFileExist "cabal.config" configAdded <- if (not cabalConfigExists) then do runStackagePlugin "init" (mSnapshotToArgs msnapshot)@@ -185,7 +178,7 @@ T.putStrLn $ "Initializing at snapshot: " <> snapshot dir <- getSnapshotDir snapshot- createTree dir+ createDirectoryIfMissing True dir cabalSandboxInit dir appendFileToFile "cabal.config" "cabal.sandbox.config" when configAdded $ removeFile "cabal.config"@@ -203,25 +196,25 @@ Just home -> return home Nothing -> throwIO NoHomeEnvironmentVariable -getSnapshotDirPrefix :: IO Path.FilePath+getSnapshotDirPrefix :: IO FilePath getSnapshotDirPrefix = do home <- getHome ghcVersion <- getGhcVersion- let dir = Path.fromText home </> ".stackage" </> "sandboxes"- </> Path.fromText ghcVersion+ let dir = T.unpack home </> ".stackage" </> "sandboxes"+ </> T.unpack ghcVersion return dir -getSnapshotDir :: Snapshot -> IO Path.FilePath+getSnapshotDir :: Snapshot -> IO FilePath getSnapshotDir snapshot = do dir <- getSnapshotDirPrefix- return $ dir </> Path.fromText snapshot+ return $ dir </> T.unpack snapshot -- copied from Purge.hs, tweaked -- TODO: remove duplication parsePackageDb :: IO (Maybe Text) parsePackageDb = do- cabalSandboxConfigExists <- isFile "cabal.sandbox.config"+ cabalSandboxConfigExists <- doesFileExist "cabal.sandbox.config" if cabalSandboxConfigExists then do t <- T.readFile "cabal.sandbox.config"@@ -262,10 +255,10 @@ sandboxDelete :: IO () sandboxDelete = do- cabalConfigExists <- isFile "cabal.config"+ cabalConfigExists <- doesFileExist "cabal.config" when cabalConfigExists $ do removeFile "cabal.config"- cabalSandboxConfigExists <- isFile "cabal.sandbox.config"+ cabalSandboxConfigExists <- doesFileExist "cabal.sandbox.config" when cabalSandboxConfigExists $ do oldSandboxNotice removeFile "cabal.sandbox.config"@@ -279,20 +272,20 @@ sandboxDeleteSnapshot :: Snapshot -> IO () sandboxDeleteSnapshot snapshot = do snapshotSanityCheck snapshot- getSnapshotDir snapshot >>= removeTree+ getSnapshotDir snapshot >>= removeDirectoryRecursive -- Find the canonical name for a snapshot by looking it up on stackage.org. -- This can change over time. e.g. "lts" used to mean lts-1.0. downloadSnapshot :: Maybe Snapshot -> IO Snapshot downloadSnapshot mSnapshot = do- workingDir <- getWorkingDirectory+ currentDir <- getCurrentDirectory let tempDir = ".stackage-sandbox-tmp" enterTempDir = do- createDirectory False tempDir- setWorkingDirectory tempDir+ createDirectory tempDir+ setCurrentDirectory tempDir exitTempDir = do- setWorkingDirectory workingDir- removeTree tempDir+ setCurrentDirectory currentDir+ removeDirectoryRecursive tempDir bracket_ enterTempDir exitTempDir $ do runStackagePlugin "init" (mSnapshotToArgs mSnapshot) parseConfigSnapshot@@ -300,8 +293,8 @@ sandboxUpgrade :: Maybe Snapshot -> IO () sandboxUpgrade mSnapshot = do- cabalConfigExists <- isFile "cabal.config"- cabalSandboxConfigExists <- isFile "cabal.sandbox.config"+ cabalConfigExists <- doesFileExist "cabal.config"+ cabalSandboxConfigExists <- doesFileExist "cabal.sandbox.config" mConfigSnapshot <- if cabalConfigExists then Just <$> parseConfigSnapshot@@ -313,7 +306,7 @@ && cabalSandboxConfigExists) $ do packageDb <- getPackageDb snapshotDir <- getSnapshotDir snapshot- snapshotDirText <- toText' snapshotDir+ let snapshotDirText = T.pack snapshotDir if T.isPrefixOf snapshotDirText packageDb then do T.putStrLn $ "Already at snapshot: " <> snapshot@@ -327,7 +320,7 @@ getSandboxPrefix :: IO Text getSandboxPrefix = do dirPath <- getSnapshotDirPrefix- dirPathText <- toText' dirPath+ let dirPathText = T.pack dirPath let viaString f = T.pack . f . T.unpack return $ viaString addTrailingPathSeparator dirPathText
stackage-sandbox.cabal view
@@ -1,5 +1,5 @@ name: stackage-sandbox-version: 0.1.1+version: 0.1.2 synopsis: Work with shared stackage sandboxes description:@@ -40,13 +40,12 @@ base >=4.7 && <5 , text , stackage-cli- , system-fileio- , system-filepath , optparse-applicative , process , filepath+ , directory , attoparsec- , conduit-combinators+ , conduit-combinators >=0.4 , conduit-extra , bytestring default-language: Haskell2010