on master help sign in
Allow a directory of replacement tarballs
574ba0bMichael Snoyman
Stackage/Build.hs+3−3
@@ -25,6 +25,7 @@ defaultBuildSettings version = BuildSettings
25 , extraArgs = const ["-fnetwork23"]
25 , extraArgs = const ["-fnetwork23"]
26 , testWorkerThreads = 4
26 , testWorkerThreads = 4
27 , buildDocs = True
27 , buildDocs = True
28+ , tarballDir = "patching/tarballs"
28 }
29 }
29
30
30build :: BuildSettings -> BuildPlan -> IO ()
31build :: BuildSettings -> BuildPlan -> IO ()
@@ -72,6 +73,7 @@ build settings' bp = do
72
73
73 putStrLn "Beginning Stackage build"
74 putStrLn "Beginning Stackage build"
74 ph <- withBinaryFile "build.log" WriteMode $ \handle -> do
75 ph <- withBinaryFile "build.log" WriteMode $ \handle -> do
76+ packageList <- mapM (replaceTarball settings) $ bpPackageList bp
75 let args = addCabalArgs settings BSBuild
77 let args = addCabalArgs settings BSBuild
76 $ "install"
78 $ "install"
77 : ("--cabal-lib-version=" ++ libVersion)
79 : ("--cabal-lib-version=" ++ libVersion)
@@ -79,9 +81,7 @@ build settings' bp = do
79 : "--max-backjumps=-1"
81 : "--max-backjumps=-1"
80 : "--reorder-goals"
82 : "--reorder-goals"
81 : "-j"
83 : "-j"
82− : concat
84+ : packageList
83− [ bpPackageList bp
84− ]
85 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
85 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
86 runCabal args handle
86 runCabal args handle
87 ec <- waitForProcess ph
87 ec <- waitForProcess ph
Stackage/Test.hs+2−1
@@ -97,7 +97,8 @@ runTestSuite settings testdir (packageName, SelectedPackageInfo {..}) = do
97 runGhcPackagePath = runGen True
97 runGhcPackagePath = runGen True
98
98
99 passed <- handle (\TestException -> return False) $ do
99 passed <- handle (\TestException -> return False) $ do
100+ package' <- replaceTarball settings package
100− getHandle WriteMode $ run "cabal" ["unpack", package] testdir
101+ getHandle WriteMode $ run "cabal" ["unpack", package'] testdir
101 getHandle AppendMode $ run "cabal" (addCabalArgs settings BSTest ["configure", "--enable-tests"]) dir
102 getHandle AppendMode $ run "cabal" (addCabalArgs settings BSTest ["configure", "--enable-tests"]) dir
102 when spiHasTests $ do
103 when spiHasTests $ do
103 getHandle AppendMode $ run "cabal" ["build"] dir
104 getHandle AppendMode $ run "cabal" ["build"] dir
Stackage/Types.hs+2
@@ -132,6 +132,8 @@ data BuildSettings = BuildSettings
132 -- ^ How many threads to spawn for running test suites.
132 -- ^ How many threads to spawn for running test suites.
133 , buildDocs :: Bool
133 , buildDocs :: Bool
134 -- ^ Build docs as part of the test procedure.
134 -- ^ Build docs as part of the test procedure.
135+ , tarballDir :: FilePath
136+ -- ^ Directory containing replacement tarballs.
135 }
137 }
136
138
137-- | A wrapper around a @Map@ providing a better @Monoid@ instance.
139-- | A wrapper around a @Map@ providing a better @Monoid@ instance.
Stackage/Util.hs+17−4
@@ -18,11 +18,11 @@ import Distribution.Version (thisVersion)
18import Stackage.Types
18import Stackage.Types
19import System.Directory (doesDirectoryExist,
19import System.Directory (doesDirectoryExist,
20 removeDirectoryRecursive)
20 removeDirectoryRecursive)
21−import System.Directory (getAppUserDataDirectory)
21+import System.Directory (getAppUserDataDirectory
22−import System.Directory (canonicalizePath,
22+ ,canonicalizePath,
23− createDirectoryIfMissing)
23+ createDirectoryIfMissing, doesFileExist)
24import System.Environment (getEnvironment)
24import System.Environment (getEnvironment)
25−import System.FilePath ((</>))
25+import System.FilePath ((</>), (<.>))
26
26
27-- | Allow only packages with permissive licenses.
27-- | Allow only packages with permissive licenses.
28allowPermissive :: [String] -- ^ list of explicitly allowed packages
28allowPermissive :: [String] -- ^ list of explicitly allowed packages
@@ -148,3 +148,16 @@ fixBuildSettings settings' = do
148 createDirectoryIfMissing True root'
148 createDirectoryIfMissing True root'
149 root <- canonicalizePath root'
149 root <- canonicalizePath root'
150 return settings' { sandboxRoot = root }
150 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"