mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-02-16 16:25:49 +01:00
Merge branch 'master' into new-upload
This commit is contained in:
commit
c3d3821b87
@ -28,15 +28,16 @@ setupPackageDatabase
|
|||||||
-> FilePath -- ^ documentation root
|
-> FilePath -- ^ documentation root
|
||||||
-> (ByteString -> IO ()) -- ^ logging
|
-> (ByteString -> IO ()) -- ^ logging
|
||||||
-> Map PackageName Version -- ^ packages and versions to be installed
|
-> Map PackageName Version -- ^ packages and versions to be installed
|
||||||
|
-> (PackageIdentifier -> IO ()) -- ^ callback to be used when unregistering a package
|
||||||
-> IO (Set PackageName) -- ^ packages remaining in the database after cleanup
|
-> IO (Set PackageName) -- ^ packages remaining in the database after cleanup
|
||||||
setupPackageDatabase mdb docDir log' toInstall = do
|
setupPackageDatabase mdb docDir log' toInstall onUnregister = do
|
||||||
registered1 <- getRegisteredPackages flags
|
registered1 <- getRegisteredPackages flags
|
||||||
forM_ registered1 $ \pi@(PackageIdentifier name version) ->
|
forM_ registered1 $ \pi@(PackageIdentifier name version) ->
|
||||||
case lookup name toInstall of
|
case lookup name toInstall of
|
||||||
Just version' | version /= version' -> unregisterPackage log' docDir flags pi
|
Just version' | version /= version' -> unregisterPackage log' onUnregister docDir flags pi
|
||||||
_ -> return ()
|
_ -> return ()
|
||||||
broken <- getBrokenPackages flags
|
broken <- getBrokenPackages flags
|
||||||
forM_ broken $ unregisterPackage log' docDir flags
|
forM_ broken $ unregisterPackage log' onUnregister docDir flags
|
||||||
foldMap (\(PackageIdentifier name _) -> singletonSet name)
|
foldMap (\(PackageIdentifier name _) -> singletonSet name)
|
||||||
<$> getRegisteredPackages flags
|
<$> getRegisteredPackages flags
|
||||||
where
|
where
|
||||||
@ -78,13 +79,26 @@ parsePackageIdent = fmap fst .
|
|||||||
|
|
||||||
-- | Unregister a package.
|
-- | Unregister a package.
|
||||||
unregisterPackage :: (ByteString -> IO ()) -- ^ log func
|
unregisterPackage :: (ByteString -> IO ()) -- ^ log func
|
||||||
|
-> (PackageIdentifier -> IO ()) -- ^ callback to be used when unregistering a package
|
||||||
-> FilePath -- ^ doc directory
|
-> FilePath -- ^ doc directory
|
||||||
-> [String] -> PackageIdentifier -> IO ()
|
-> [String] -> PackageIdentifier -> IO ()
|
||||||
unregisterPackage log' docDir flags ident@(PackageIdentifier name _) = do
|
unregisterPackage log' onUnregister docDir flags ident@(PackageIdentifier name _) = do
|
||||||
log' $ "Unregistering " ++ encodeUtf8 (display ident) ++ "\n"
|
log' $ "Unregistering " ++ encodeUtf8 (display ident) ++ "\n"
|
||||||
|
onUnregister ident
|
||||||
|
|
||||||
|
-- Delete libraries
|
||||||
|
sourceProcessWithConsumer
|
||||||
|
(proc "ghc-pkg" ("describe" : flags ++ [unpack $ display ident]))
|
||||||
|
(CT.decodeUtf8
|
||||||
|
$= CT.lines
|
||||||
|
$= CL.mapMaybe parseLibraryDir
|
||||||
|
$= CL.mapM_ (void . tryIO . removeTree))
|
||||||
|
|
||||||
void (readProcessWithExitCode
|
void (readProcessWithExitCode
|
||||||
"ghc-pkg"
|
"ghc-pkg"
|
||||||
("unregister": flags ++ ["--force", unpack $ display name])
|
("unregister": flags ++ ["--force", unpack $ display name])
|
||||||
"")
|
"")
|
||||||
|
|
||||||
void $ tryIO $ removeTree $ docDir </> fpFromText (display ident)
|
void $ tryIO $ removeTree $ docDir </> fpFromText (display ident)
|
||||||
|
where
|
||||||
|
parseLibraryDir = fmap fpFromText . stripPrefix "library-dirs: "
|
||||||
|
|||||||
@ -30,7 +30,7 @@ import Stackage.Prelude hiding (pi)
|
|||||||
import System.Directory (findExecutable)
|
import System.Directory (findExecutable)
|
||||||
import System.Environment (getEnvironment)
|
import System.Environment (getEnvironment)
|
||||||
import System.IO (IOMode (WriteMode),
|
import System.IO (IOMode (WriteMode),
|
||||||
withBinaryFile)
|
openBinaryFile)
|
||||||
import System.IO.Temp (withSystemTempDirectory)
|
import System.IO.Temp (withSystemTempDirectory)
|
||||||
|
|
||||||
data BuildException = BuildException (Map PackageName BuildFailure) [Text]
|
data BuildException = BuildException (Map PackageName BuildFailure) [Text]
|
||||||
@ -198,6 +198,7 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
|
|||||||
(pbDocDir pb)
|
(pbDocDir pb)
|
||||||
pbLog
|
pbLog
|
||||||
(ppVersion <$> bpPackages pbPlan)
|
(ppVersion <$> bpPackages pbPlan)
|
||||||
|
(deletePreviousResults pb)
|
||||||
|
|
||||||
forM_ packageMap $ \pi -> void $ async $ singleBuild pb registeredPackages
|
forM_ packageMap $ \pi -> void $ async $ singleBuild pb registeredPackages
|
||||||
SingleBuild
|
SingleBuild
|
||||||
@ -290,11 +291,12 @@ singleBuild pb@PerformBuild {..} registeredPackages SingleBuild {..} =
|
|||||||
, display $ ppVersion $ piPlan sbPackageInfo
|
, display $ ppVersion $ piPlan sbPackageInfo
|
||||||
]
|
]
|
||||||
|
|
||||||
runIn wdir outH cmd args =
|
runIn wdir getOutH cmd args = do
|
||||||
withCheckedProcess cp $ \ClosedStream UseProvidedHandle UseProvidedHandle ->
|
outH <- getOutH
|
||||||
|
withCheckedProcess (cp outH) $ \ClosedStream UseProvidedHandle UseProvidedHandle ->
|
||||||
(return () :: IO ())
|
(return () :: IO ())
|
||||||
where
|
where
|
||||||
cp = (proc (unpack $ asText cmd) (map (unpack . asText) args))
|
cp outH = (proc (unpack $ asText cmd) (map (unpack . asText) args))
|
||||||
{ cwd = Just $ fpToString wdir
|
{ cwd = Just $ fpToString wdir
|
||||||
, std_out = UseHandle outH
|
, std_out = UseHandle outH
|
||||||
, std_err = UseHandle outH
|
, std_err = UseHandle outH
|
||||||
@ -320,8 +322,21 @@ singleBuild pb@PerformBuild {..} registeredPackages SingleBuild {..} =
|
|||||||
testRunOut = pbLogDir </> fpFromText namever </> "test-run.out"
|
testRunOut = pbLogDir </> fpFromText namever </> "test-run.out"
|
||||||
|
|
||||||
wf fp inner' = do
|
wf fp inner' = do
|
||||||
createTree $ parent fp
|
ref <- newIORef Nothing
|
||||||
withBinaryFile (fpToString fp) WriteMode inner'
|
let cleanup = do
|
||||||
|
mh <- readIORef ref
|
||||||
|
forM_ mh hClose
|
||||||
|
getH = do
|
||||||
|
mh <- readIORef ref
|
||||||
|
case mh of
|
||||||
|
Just h -> return h
|
||||||
|
Nothing -> mask_ $ do
|
||||||
|
createTree $ parent fp
|
||||||
|
h <- openBinaryFile (fpToString fp) WriteMode
|
||||||
|
writeIORef ref $ Just h
|
||||||
|
return h
|
||||||
|
|
||||||
|
inner' getH `finally` cleanup
|
||||||
|
|
||||||
configArgs = ($ []) $ execWriter $ do
|
configArgs = ($ []) $ execWriter $ do
|
||||||
when pbAllowNewer $ tell' "--allow-newer"
|
when pbAllowNewer $ tell' "--allow-newer"
|
||||||
@ -349,15 +364,15 @@ singleBuild pb@PerformBuild {..} registeredPackages SingleBuild {..} =
|
|||||||
|
|
||||||
PackageConstraints {..} = ppConstraints $ piPlan sbPackageInfo
|
PackageConstraints {..} = ppConstraints $ piPlan sbPackageInfo
|
||||||
|
|
||||||
buildLibrary = wf libOut $ \outH -> do
|
buildLibrary = wf libOut $ \getOutH -> do
|
||||||
let run a b = do when pbVerbose $ log' (unwords (a : b))
|
let run a b = do when pbVerbose $ log' (unwords (a : b))
|
||||||
runChild outH a b
|
runChild getOutH a b
|
||||||
|
|
||||||
isUnpacked <- newIORef False
|
isUnpacked <- newIORef False
|
||||||
let withUnpacked inner = do
|
let withUnpacked inner = do
|
||||||
unlessM (readIORef isUnpacked) $ do
|
unlessM (readIORef isUnpacked) $ do
|
||||||
log' $ "Unpacking " ++ namever
|
log' $ "Unpacking " ++ namever
|
||||||
runParent outH "cabal" ["unpack", namever]
|
runParent getOutH "cabal" ["unpack", namever]
|
||||||
writeIORef isUnpacked True
|
writeIORef isUnpacked True
|
||||||
inner
|
inner
|
||||||
|
|
||||||
@ -439,8 +454,8 @@ singleBuild pb@PerformBuild {..} registeredPackages SingleBuild {..} =
|
|||||||
|
|
||||||
return withUnpacked
|
return withUnpacked
|
||||||
|
|
||||||
runTests withUnpacked = wf testOut $ \outH -> do
|
runTests withUnpacked = wf testOut $ \getOutH -> do
|
||||||
let run = runChild outH
|
let run = runChild getOutH
|
||||||
|
|
||||||
prevTestResult <- getPreviousResult pb Test pident
|
prevTestResult <- getPreviousResult pb Test pident
|
||||||
let needTest = pbEnableTests
|
let needTest = pbEnableTests
|
||||||
|
|||||||
@ -1086,6 +1086,10 @@ expected-haddock-failures:
|
|||||||
# https://github.com/wereHamster/rethinkdb-client-driver/issues/1
|
# https://github.com/wereHamster/rethinkdb-client-driver/issues/1
|
||||||
- rethinkdb-client-driver
|
- rethinkdb-client-driver
|
||||||
|
|
||||||
|
# Requires build before haddock, which doesn't always happen in incremental
|
||||||
|
# builds. Could consider special-casing this requirement.
|
||||||
|
- gtk
|
||||||
|
|
||||||
# Benchmarks which should not be built. Note that Stackage does *not* generally
|
# Benchmarks which should not be built. Note that Stackage does *not* generally
|
||||||
# build benchmarks. The difference here will be whether dependencies for these
|
# build benchmarks. The difference here will be whether dependencies for these
|
||||||
# benchmarks are included or not.
|
# benchmarks are included or not.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user