on master help sign in
Allow a directory of replacement tarballs
commit574ba0ba0478349b9612d4e183deffb46ef99c98 authorMichael Snoyman <michael@snoyman.com> dateSun 30 Jun 2013, 13:31 (13 years ago) parentbbec9ac
4 files changed+24−8
Stackage/Build.hs+3−3 Stackage/Test.hs+2−1 Stackage/Types.hs+2 Stackage/Util.hs+17−4
Stackage/Build.hs+3−3
@@ -25,6 +25,7 @@ defaultBuildSettings version = BuildSettings
2525 , extraArgs = const ["-fnetwork23"]
2626 , testWorkerThreads = 4
2727 , buildDocs = True
28+ , tarballDir = "patching/tarballs"
2829 }
2930
3031build :: BuildSettings -> BuildPlan -> IO ()
@@ -72,6 +73,7 @@ build settings' bp = do
7273
7374 putStrLn "Beginning Stackage build"
7475 ph <- withBinaryFile "build.log" WriteMode $ \handle -> do
76+ packageList <- mapM (replaceTarball settings) $ bpPackageList bp
7577 let args = addCabalArgs settings BSBuild
7678 $ "install"
7779 : ("--cabal-lib-version=" ++ libVersion)
@@ -79,9 +81,7 @@ build settings' bp = do
7981 : "--max-backjumps=-1"
8082 : "--reorder-goals"
8183 : "-j"
82− : concat
83− [ bpPackageList bp
84− ]
84+ : packageList
8585 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
8686 runCabal args handle
8787 ec <- waitForProcess ph
Stackage/Test.hs+2−1
@@ -97,7 +97,8 @@ runTestSuite settings testdir (packageName, SelectedPackageInfo {..}) = do
9797 runGhcPackagePath = runGen True
9898
9999 passed <- handle (\TestException -> return False) $ do
100− getHandle WriteMode $ run "cabal" ["unpack", package] testdir
100+ package' <- replaceTarball settings package
101+ getHandle WriteMode $ run "cabal" ["unpack", package'] testdir
101102 getHandle AppendMode $ run "cabal" (addCabalArgs settings BSTest ["configure", "--enable-tests"]) dir
102103 when spiHasTests $ do
103104 getHandle AppendMode $ run "cabal" ["build"] dir
Stackage/Types.hs+2
@@ -132,6 +132,8 @@ data BuildSettings = BuildSettings
132132 -- ^ How many threads to spawn for running test suites.
133133 , buildDocs :: Bool
134134 -- ^ Build docs as part of the test procedure.
135+ , tarballDir :: FilePath
136+ -- ^ Directory containing replacement tarballs.
135137 }
136138
137139-- | A wrapper around a @Map@ providing a better @Monoid@ instance.
Stackage/Util.hs+17−4
@@ -18,11 +18,11 @@ import Distribution.Version (thisVersion)
1818import Stackage.Types
1919import System.Directory (doesDirectoryExist,
2020 removeDirectoryRecursive)
21−import System.Directory (getAppUserDataDirectory)
22−import System.Directory (canonicalizePath,
23− createDirectoryIfMissing)
21+import System.Directory (getAppUserDataDirectory
22+ ,canonicalizePath,
23+ createDirectoryIfMissing, doesFileExist)
2424import System.Environment (getEnvironment)
25−import System.FilePath ((</>))
25+import System.FilePath ((</>), (<.>))
2626
2727-- | Allow only packages with permissive licenses.
2828allowPermissive :: [String] -- ^ list of explicitly allowed packages
@@ -148,3 +148,16 @@ fixBuildSettings settings' = do
148148 createDirectoryIfMissing True root'
149149 root <- canonicalizePath root'
150150 return settings' { sandboxRoot = root }
151+
152+-- | Check if a tarball exists in the tarball directory and, if so, use that
153+-- instead of the given name.
154+replaceTarball :: BuildSettings
155+ -> String
156+ -> IO String
157+replaceTarball bs pkgname = do
158+ exists <- doesFileExist fp
159+ if exists
160+ then canonicalizePath fp
161+ else return pkgname
162+ where
163+ fp = tarballDir bs </> pkgname <.> "tar.gz"