packages feed

stackage-curator 0.7.3 → 0.7.4

raw patch · 5 files changed

+68/−6 lines, 5 files

Files

ChangeLog.md view
@@ -1,3 +1,8 @@+## 0.7.4++* `-j`/`--jobs` option for build flags+* Only pass in required .haddock files (more memory efficiency)+ ## 0.7.3  * Number of jobs == number of capabilities
Stackage/CompleteBuild.hs view
@@ -45,6 +45,7 @@     , bfBundleDest       :: !(Maybe FilePath)     , bfGitPush          :: !Bool     -- ^ push to Git (when doing an LTS build)+    , bfJobs             :: !(Maybe Int)     } deriving (Show)  data BuildType = Nightly | LTS BumpType Text@@ -251,7 +252,7 @@  getPerformBuild :: BuildFlags -> Settings -> IO PerformBuild getPerformBuild buildFlags Settings {..} = do-    jobs <- getNumCapabilities+    jobs <- maybe getNumCapabilities return $ bfJobs buildFlags     return PerformBuild         { pbPlan = plan         , pbInstallDest = buildDir
Stackage/PerformBuild.hs view
@@ -205,6 +205,7 @@      pbLog "Collecting existing .haddock files\n"     haddockFiles <- getHaddockFiles pb >>= newTVarIO+    haddockDeps <- newTVarIO mempty      forM_ packageMap $ \pi -> void $ async $ singleBuild pb registeredPackages       SingleBuild@@ -223,6 +224,7 @@             (pbDatabase pb)             (filter allowedEnv $ map fixEnv env)         , sbHaddockFiles = haddockFiles+        , sbHaddockDeps = haddockDeps         }      void $ tryAny $ atomically $ readTVar active >>= checkSTM . (== 0)@@ -267,6 +269,8 @@     , sbRegisterMutex :: MVar ()     , sbModifiedEnv   :: [(String, String)]     , sbHaddockFiles  :: TVar (Map Text FilePath) -- ^ package-version, .haddock file+    , sbHaddockDeps   :: TVar (Map PackageName (Set PackageName))+    -- ^ Deep deps of library and executables     }  singleBuild :: PerformBuild@@ -432,7 +436,15 @@         when needHaddock $ withConfiged $ do             log' $ "Haddocks " ++ namever             hfs <- readTVarIO sbHaddockFiles-            let hfsOpts = flip map (mapToList hfs) $ \(pkgVer, hf) -> concat+            haddockDeps <- atomically $ getHaddockDeps pbPlan sbHaddockDeps pname+            let hfsOpts = map hfOpt+                        $ filter ((`member` haddockDeps) . toPackageName . fst)+                        $ mapToList hfs+                toPackageName t =+                    case simpleParse t of+                        Just (PackageIdentifier x _) -> x+                        Nothing -> error $ "Invalid package identifier: " ++ unpack t+                hfOpt (pkgVer, hf) = concat                     [ "--haddock-options=--read-interface="                     , "../"                     , pkgVer@@ -502,7 +514,7 @@         log' $ concat             [ display (piName sbPackageInfo)             , ": "-            , tshow exc+            , take 500 $ tshow exc             ]         atomically $ modifyTVar sbErrsVar $ insertMap (piName sbPackageInfo) exc'       where@@ -592,3 +604,42 @@                     else mempty       where         nameVerText = fpToText $ filename dir++getHaddockDeps :: BuildPlan+               -> TVar (Map PackageName (Set PackageName))+               -> PackageName+               -> STM (Set PackageName)+getHaddockDeps BuildPlan {..} var =+    go+  where+    go :: PackageName -> STM (Set PackageName)+    go name = do+        m <- readTVar var+        case lookup name m of+            Just res -> return res+            Nothing -> do+                -- First thing we do is put in a dummy value in the var for+                -- this package, to avoid the possibility of an infinite loop+                -- due to packages depending on themselves (which is in fact+                -- valid).+                modifyTVar var $ insertMap name mempty++                res' <- fmap fold $ mapM go $ setToList deps+                let res = deps ++ res'+                modifyTVar var $ insertMap name res+                return res+      where+        deps =+            case lookup name bpPackages of+                Nothing -> mempty+                Just PackagePlan {..} ->+                    asSet+                  $ setFromList+                  $ map fst+                  $ filter (isLibExe . snd)+                  $ mapToList+                  $ sdPackages ppDesc++    isLibExe DepInfo {..} =+        CompLibrary    `member` diComponents ||+        CompExecutable `member` diComponents
app/stackage.hs view
@@ -135,7 +135,12 @@             <|> pure Nothing) <*>         (fmap not (switch             (long "skip-git-push" <>-             help "Do not perform a git push after completion (for LTS builds only)")))+             help "Do not perform a git push after completion (for LTS builds only)"))) <*>+        (fmap Just (option+            auto+            (long "jobs" <> short 'j' <>+             metavar "NUMBER" <>+             help "Number of threads")) <|> pure Nothing)      installFlags =         InstallFlags <$>
stackage-curator.cabal view
@@ -1,5 +1,5 @@ name:                stackage-curator-version:             0.7.3+version:             0.7.4 synopsis:            Tools for curating Stackage bundles description:         Please see <http://www.stackage.org/package/stackage-curator> for a description and documentation. homepage:            https://github.com/fpco/stackage@@ -35,7 +35,7 @@                        Stackage.CompleteBuild   build-depends:       base >= 4 && < 5                      , containers-                     , Cabal >= 1.14+                     , Cabal >= 1.14 && < 1.20                      , tar >= 0.3                      , zlib                      , bytestring