stackage-curator 0.14.5 → 0.15.0.0
raw patch · 23 files changed
+181/−119 lines, 23 filesdep ~Cabal
Dependency ranges changed: Cabal
Files
- ChangeLog.md +7/−0
- README.md +3/−0
- Stackage/BuildConstraints.hs +22/−6
- Stackage/BuildPlan.hs +4/−1
- Stackage/CheckBuildPlan.hs +6/−2
- Stackage/CorePackages.hs +3/−2
- Stackage/Curator/RevDeps.hs +2/−2
- Stackage/Curator/UploadDocs.hs +1/−1
- Stackage/Curator/UploadIndex.hs +1/−2
- Stackage/DiffPlans.hs +2/−3
- Stackage/PackageDescription.hs +5/−4
- Stackage/PackageIndex.hs +42/−39
- Stackage/PerformBuild.hs +34/−21
- Stackage/Prelude.hs +5/−5
- Stackage/ServerBundle.hs +4/−4
- Stackage/ShowBuildPlan.hs +2/−2
- Stackage/Types.hs +23/−12
- Stackage/UpdateBuildPlan.hs +6/−4
- app/stackage-build-plan.hs +1/−1
- stackage-curator.cabal +2/−2
- test/Stackage/BuildPlanSpec.hs +4/−4
- test/Stackage/CorePackagesSpec.hs +1/−1
- test/Stackage/PackageIndexSpec.hs +1/−1
ChangeLog.md view
@@ -1,3 +1,10 @@+## 0.15.0.0++* Ignore packages with invalid flag definitions [fpco/stackage#2468](https://github.com/fpco/stackage/issues/2468)+* Support a `no-revisions` field to ignore Hackage revisions (experimental) [fpco/stackage#2469](https://github.com/fpco/stackage/issues/2469)+* Cabal 2.0+* cabal-format-version+ ## 0.14.5 * Add support for the `hide` field [yesodweb/wai#579](https://github.com/yesodweb/wai/issues/579)
README.md view
@@ -1,6 +1,9 @@ ## stackage-curator [](https://travis-ci.org/fpco/stackage-curator)+[](http://hackage.haskell.org/package/stackage-curator)+[](http://stackage.org/lts/package/stackage-curator)+[](http://stackage.org/nightly/package/stackage-curator) This repository contains the code for curating Stackage package sets and building reusable package databases. It was originally simply called the
Stackage/BuildConstraints.hs view
@@ -49,6 +49,12 @@ -- cabal executable , bcTellMeWhenItsReleased :: Map PackageName Version++ , bcNoRevisions :: !(Set PackageName)+ -- ^ see 'cfNoRevisions'++ , bcCabalFormatVersion :: !(Maybe Version)+ -- ^ Maximum supported Cabal file format version } -- | Modify the version bounds with the given Dependencies@@ -124,10 +130,14 @@ , cfBuildToolOverrides :: Map Text (Set Text) , cfSkippedLibProfiling :: Set PackageName , cfGhcMajorVersion :: Maybe (Int, Int)+ , cfCabalFormatVersion :: Maybe (Int, Int)+ -- ^ Maximum supported Cabal file format version , cfTreatAsNonCore :: Set PackageName , cfTellMeWhenItsReleased :: Map PackageName Version , cfHide :: Set PackageName -- ^ Packages which should be hidden after registering+ , cfNoRevisions :: !(Set PackageName)+ -- ^ Packages where we should ignore any Hackage revisions } instance FromJSON ConstraintFile where@@ -148,15 +158,17 @@ cfGithubUsers <- o .: "github-users" cfBuildToolOverrides <- o .:? "build-tool-overrides" .!= mempty cfGhcMajorVersion <- o .:? "ghc-major-version" >>= mapM parseMajorVersion+ cfCabalFormatVersion <- o .:? "cabal-format-version" >>= mapM parseMajorVersion cfTreatAsNonCore <- getPackages o "treat-as-non-core" <|> return mempty cfTellMeWhenItsReleased <- (fmap mconcat $ o .: "tell-me-when-its-released" >>= mapM toNameVerMap) <?> Key "tell-me-when-its-released"- cfHide <- Set.map PackageName <$> o .:? "hide" .!= mempty+ cfHide <- Set.map mkPackageName <$> o .:? "hide" .!= mempty+ cfNoRevisions <- Set.map mkPackageName <$> o .:? "no-revisions" .!= mempty return ConstraintFile {..} where- goFlagMap = Map.mapKeysWith const FlagName- goPackageMap = Map.mapKeysWith const PackageName- getPackages o name = (setFromList . map PackageName) <$> o .: name+ goFlagMap = Map.mapKeysWith const mkFlagName+ goPackageMap = Map.mapKeysWith const mkPackageName+ getPackages o name = (setFromList . map mkPackageName) <$> o .: name toDep :: Monad m => Text -> m Dependency toDep = either (fail . show) return . simpleParse@@ -166,7 +178,7 @@ . simpleParse parseMajorVersion t =- case versionBranch <$> simpleParse t of+ case versionNumbers <$> simpleParse t of Just [x, y] -> return (x, y) _ -> fail $ "Invalid GHC major version: " ++ unpack t @@ -189,7 +201,7 @@ toBC ConstraintFile {..} = do bcSystemInfo <- removeFromCore cfTreatAsNonCore <$> getSystemInfo forM_ cfGhcMajorVersion $ \(major, minor) ->- case versionBranch $ siGhcVersion bcSystemInfo of+ case versionNumbers $ siGhcVersion bcSystemInfo of major':minor':_ | major == major' && minor == minor' -> return () _ -> throwIO $ MismatchedGhcVersion (siGhcVersion bcSystemInfo) major minor return BuildConstraints {..}@@ -231,3 +243,7 @@ bcGithubUsers = cfGithubUsers bcBuildToolOverrides = cfBuildToolOverrides bcTellMeWhenItsReleased = cfTellMeWhenItsReleased+ bcNoRevisions = cfNoRevisions+ bcCabalFormatVersion = fmap+ (\(x, y) -> mkVersion [x, y])+ cfCabalFormatVersion
Stackage/BuildPlan.hs view
@@ -79,6 +79,8 @@ , bpGithubUsers = bcGithubUsers , bpBuildToolOverrides = bcBuildToolOverrides , bpAllCabalHashesCommit = either (const Nothing) Just eallCabalHashesCommit+ , bpNoRevisions = bcNoRevisions+ , bpCabalFormatVersion = bcCabalFormatVersion } where SystemInfo {..} = bcSystemInfo@@ -96,7 +98,7 @@ overrides' :: Map ExeName (Set PackageName) overrides' = Map.mapKeysWith (++) ExeName- $ fmap (Set.map mkPackageName) overrides+ $ fmap (Set.map (mkPackageName . unpack)) overrides topologicalSortTools :: MonadThrow m => Map ExeName (Set PackageName)@@ -194,5 +196,6 @@ getLatestAllowedPlans :: MonadIO m => BuildConstraints -> m (Map PackageName PackagePlan, Map PackageName Version) getLatestAllowedPlans bc = getLatestDescriptions+ (bcNoRevisions bc) (isAllowed bc) (mkPackagePlan bc)
Stackage/CheckBuildPlan.hs view
@@ -34,7 +34,7 @@ map (ppVersion &&& M.keys . M.filter libAndExe . sdPackages . ppDesc) bpPackages errs@(BadBuildPlan errs1 errs2) = execWriter $ do mapM_ (checkDeps getMaint allPackages) $ mapToList bpPackages- let cabalName = PackageName "Cabal"+ let cabalName = mkPackageName "Cabal" case lookup cabalName bpPackages of Nothing | failMissingCabal -> tell@@ -43,7 +43,11 @@ $ singleton "Cabal not found in build plan" | otherwise -> return () Just (ppVersion -> cabalVersion) ->- mapM_ (checkCabalVersion cabalVersion) (mapToList bpPackages)+ let cabalVersion' =+ case bpCabalFormatVersion of+ Nothing -> cabalVersion+ Just formatVersion -> min formatVersion cabalVersion+ in mapM_ (checkCabalVersion cabalVersion') (mapToList bpPackages) -- Only looking at libraries and executables, benchmarks and tests -- are allowed to create cycles (e.g. test-framework depends on -- text, which uses test-framework in its test-suite).
Stackage/CorePackages.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE GADTs #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ViewPatterns #-} module Stackage.CorePackages ( getCorePackages , getCoreExecutables@@ -18,7 +19,7 @@ import System.FilePath (takeDirectory, takeFileName) addDeepDepends :: PackageName -> StateT (Map PackageName Version) IO ()-addDeepDepends name@(PackageName name') = do+addDeepDepends name@(unPackageName -> name') = do m <- get case lookup name m of Just _ -> return ()@@ -104,7 +105,7 @@ -- Precondition: GHC global package database has only core packages, and GHC -- ships with just a single version of each packages. getCorePackages :: IO (Map PackageName Version)-getCorePackages = flip execStateT mempty $ mapM_ (addDeepDepends . PackageName)+getCorePackages = flip execStateT mempty $ mapM_ (addDeepDepends . mkPackageName) [ "ghc" {- , "haskell2010"
Stackage/Curator/RevDeps.hs view
@@ -13,7 +13,7 @@ -> Bool -- ^ deep revdeps -> PackageName -- ^ package to check -> IO ()-listRevDeps planFile deep pkg0 = do+listRevDeps planFile _FIXMEdeep pkg0 = do BuildPlan {..} <- decodeFileEither planFile >>= either throwIO return let go pkg = do visited <- get@@ -23,4 +23,4 @@ Nothing -> return () Just PackagePlan {..} -> mapM_ go ppUsers let pkgs = execState (go pkg0) (asSet mempty)- mapM_ (putStrLn . unPackageName) pkgs+ mapM_ (putStrLn . pack . unPackageName) pkgs
Stackage/Curator/UploadDocs.hs view
@@ -30,7 +30,7 @@ import qualified Filesystem as F import qualified Filesystem.Path.CurrentOS as F import Network.AWS (Credentials (Discover), Env,- Region (NorthVirginia), newEnv,+ newEnv, send, toBody, runAWS) import Network.AWS.S3 (ObjectCannedACL (OPublicRead), poACL, poCacheControl,
Stackage/Curator/UploadIndex.hs view
@@ -16,8 +16,7 @@ import qualified Codec.Archive.Tar as Tar import Data.Conduit.Lazy (lazyConsume) import Codec.Compression.GZip (compress)-import Network.AWS (Credentials (Discover),- Region (NorthVirginia), newEnv)+import Network.AWS (Credentials (Discover), newEnv) import Stackage.Curator.UploadDocs (upload) uploadIndex
Stackage/DiffPlans.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE FlexibleContexts, GADTs, NoImplicitPrelude, OverloadedStrings,- ScopedTypeVariables #-}+ ScopedTypeVariables, ViewPatterns #-} module Stackage.DiffPlans ( diffPlans ) where@@ -9,7 +9,6 @@ import Data.Yaml (decodeFileEither) import Network.HTTP.Client import Network.HTTP.Simple (httpSink)-import Network.HTTP.Client.TLS (tlsManagerSettings) import Stackage.Prelude import Data.Maybe@@ -76,7 +75,7 @@ (singletonMap name $ (display x, Just $ display y)) isMajor :: Version -> Version -> Bool-isMajor (Version old _) (Version new _) =+isMajor (versionNumbers -> old) (versionNumbers -> new) = toPair old /= toPair new where toPair [] = (0, 0)
Stackage/PackageDescription.hs view
@@ -23,6 +23,7 @@ import Distribution.Compiler (CompilerFlavor) import Distribution.Package (Dependency (..)) import Distribution.PackageDescription+import Distribution.Types.CondTree (CondBranch (..)) import Distribution.System (Arch, OS) import Stackage.PackageIndex import Stackage.Prelude@@ -39,7 +40,7 @@ tell mempty { sdProvidedExes = setFromList $ map (fromString . fst) $ spdCondExecutables spd- , sdCabalVersion = Option $ Max <$> spdCabalVersion spd+ , sdCabalVersion = Option $ Just $ Max $ spdCabalVersion spd , sdPackages = unionsWith (<>) $ maybe [] (map $ \(Dependency x y) -> singletonMap x DepInfo { diComponents = setFromList [minBound..maxBound]@@ -72,17 +73,17 @@ , diRange = simplifyVersionRange y } , sdTools = unionsWith (<>) $ flip map (sciBuildTools dat)- $ \(Dependency name range) -> singletonMap+ $ \(name, range) -> singletonMap -- In practice, cabal files refer to the exe name, not the -- package name.- (ExeName $ unPackageName name)+ name DepInfo { diComponents = singletonSet component , diRange = simplifyVersionRange range } , sdModules = sciModules dat }- forM_ comps $ \(cond, ontrue, onfalse) -> do+ forM_ comps $ \(CondBranch cond ontrue onfalse) -> do b <- checkCond cc cond if b then loop ontrue
Stackage/PackageIndex.hs view
@@ -29,8 +29,11 @@ lazyConsume) import qualified Data.Text as T import Distribution.Compiler (CompilerFlavor)+import Distribution.Types.CondTree (CondBranch (..))+import Distribution.Types.UnqualComponentName (unUnqualComponentName)+import Distribution.Types.ExeDependency import Distribution.Version (VersionRange (..))-import Distribution.Package (Dependency)+import Distribution.Package (Dependency (..)) import Distribution.PackageDescription import Distribution.PackageDescription.Parse (ParseResult (..), parsePackageDescription)@@ -46,7 +49,7 @@ SHA512 (..), Skein512_512 (..), hashlazy, Digest, HashAlgorithm, digestToHexByteString) import qualified Crypto.Hash.SHA1 as SHA1-import Data.Store (Store)+import Data.Store (Store (..), Size (..)) import qualified Data.Store as Store import qualified Data.Store.TypeHash as Store @@ -87,7 +90,7 @@ } data SimplifiedComponentInfo = SimplifiedComponentInfo- { sciBuildTools :: [Dependency]+ { sciBuildTools :: [(ExeName, VersionRange)] , sciModules :: Set Text } deriving Generic@@ -104,7 +107,7 @@ , spdSetupDeps :: Maybe [Dependency] , spdPackageFlags :: Map FlagName Bool , spdGithubPings :: Set Text- , spdCabalVersion :: Maybe Version+ , spdCabalVersion :: Version } deriving Generic @@ -114,16 +117,29 @@ instance Store SimplifiedPackageDescription instance Store a => Store (CondTree ConfVar [Dependency] a)+instance Store a => Store (CondBranch ConfVar [Dependency] a) instance Store Dependency instance Store v => Store (Condition v) instance Store ConfVar instance Store Arch instance Store OS instance Store CompilerFlavor-instance Store PackageName+instance Store PackageName where+ size =+ case size of+ VarSize f -> VarSize (f . unPackageName)+ ConstSize _ -> error "impossible"+ poke = poke . unPackageName+ peek = mkPackageName <$> peek instance Store Version instance Store VersionRange-instance Store FlagName+instance Store FlagName where+ size =+ case size of+ VarSize f -> VarSize (f . unFlagName)+ ConstSize _ -> error "impossible"+ poke = poke . unFlagName+ peek = mkFlagName <$> peek -- END orphans Store.mkManyHasTypeHash@@ -157,54 +173,36 @@ ] } , spdCondLibrary = mapCondTree simpleLib <$> condLibrary gpd- , spdCondExecutables = map (fmap $ mapCondTree simpleExe) $ condExecutables gpd- , spdCondTestSuites = map (fmap $ mapCondTree simpleTest) $ condTestSuites gpd- , spdCondBenchmarks = map (fmap $ mapCondTree simpleBench) $ condBenchmarks gpd+ , spdCondExecutables = map unqual $ map (fmap $ mapCondTree simpleExe) $ condExecutables gpd+ , spdCondTestSuites = map unqual $ map (fmap $ mapCondTree simpleTest) $ condTestSuites gpd+ , spdCondBenchmarks = map unqual $ map (fmap $ mapCondTree simpleBench) $ condBenchmarks gpd , spdSetupDeps = fmap setupDepends $ setupBuildInfo $ packageDescription gpd , spdPackageFlags = let getFlag MkFlag {..} = (flagName, flagDefault) in mapFromList $ map getFlag $ genPackageFlags gpd , spdGithubPings = getGithubPings gpd- , spdCabalVersion =- case specVersionRaw $ packageDescription gpd of- Left v -> Just v- Right range0 ->- let maxRange AnyVersion = Nothing- maxRange (ThisVersion v) = Just v- maxRange (LaterVersion v) = Just v- -- ideally the following case would never happen- maxRange (EarlierVersion v) = Just v- maxRange (WildcardVersion v) = Just v- maxRange (UnionVersionRanges x y) = maxRanges x y- maxRange (IntersectVersionRanges x y) = maxRanges x y- maxRange (VersionRangeParens x) = maxRange x-- maxRanges x y =- case (maxRange x, maxRange y) of- (Nothing, Nothing) -> Nothing- (Just x', Nothing) -> Just x'- (Nothing, Just y') -> Just y'- (Just x', Just y') -> Just (max x' y')- in maxRange range0+ , spdCabalVersion = specVersion $ packageDescription gpd } where PackageIdentifier name version = package $ packageDescription gpd + unqual = first unUnqualComponentName+ simpleLib = helper getModules libBuildInfo simpleExe = helper noModules buildInfo simpleTest = helper noModules testBuildInfo simpleBench = helper noModules benchmarkBuildInfo helper getModules' getBI x = SimplifiedComponentInfo- { sciBuildTools = buildTools $ getBI x+ { sciBuildTools = map+ (\(ExeDependency _ name' range) -> (ExeName $ pack $ unUnqualComponentName name', range))+ (buildToolDepends $ getBI x) , sciModules = getModules' x } noModules = const mempty getModules = setFromList . map display . exposedModules -deriving instance Functor (CondTree v c)- mapCondTree :: (a -> b) -> CondTree v c a -> CondTree v c b mapCondTree = fmap @@ -299,10 +297,12 @@ -- | Get all of the latest descriptions for name/version pairs matching the -- given criterion. getLatestDescriptions :: MonadIO m- => (PackageName -> Version -> Bool)- -> (SimplifiedPackageDescription -> IO desc)+ => Set PackageName+ -- ^ packages where we ignore the Hackage revisions+ -> (PackageName -> Version -> Bool)+ -> (SimplifiedPackageDescription -> Either SomeException desc) -> m (Map PackageName desc, Map PackageName Version)-getLatestDescriptions f parseDesc = liftIO $ do+getLatestDescriptions noRevisions f parseDesc = liftIO $ do root <- fmap (</> "curator") $ getAppUserDataDirectory "stackage" -- Parse twice to avoid keeping stuff in memory: once to determine which@@ -318,10 +318,13 @@ liftIO $ putStrLn "Parsing package descriptions" plans <- runResourceT $ sourcePackageIndex $$ flip foldMC mempty (\m ucf ->- if lookup (ucfName ucf) (asMap mvers) == Just (ucfVersion ucf)+ if lookup (ucfName ucf) (asMap mvers) == Just (ucfVersion ucf) &&+ (ucfName ucf `notMember` noRevisions || ucfName ucf `notMember` m) then do- desc <- liftIO $ ucfParse root ucf >>= parseDesc- return $! insertMap (ucfName ucf) desc m+ edesc <- liftIO $ parseDesc <$> ucfParse root ucf+ case edesc of+ Left e -> print e $> m+ Right desc -> return $! insertMap (ucfName ucf) desc m else return m) return (plans, latests) where
Stackage/PerformBuild.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ViewPatterns #-} {-# LANGUAGE ScopedTypeVariables #-} module Stackage.PerformBuild ( performBuild@@ -26,6 +27,7 @@ condTestSuites) import Distribution.Package (Dependency (..)) import Distribution.PackageDescription.PrettyPrint (writeGenericPackageDescription)+import Distribution.Types.UnqualComponentName import Distribution.Version (anyVersion) import Filesystem (canonicalizePath, createTree, getWorkingDirectory,@@ -56,7 +58,7 @@ show (BuildException m warnings) = unlines $ "" : "" : "" : map go (mapToList m) ++ map unpack warnings where- go (PackageName name, bf) = concat+ go (unPackageName -> name, bf) = concat [ name , ": " , take 500 $ show bf@@ -146,7 +148,7 @@ -- Since we build every package using the Cabal library, it's an implicit -- dependency of everything addCabal :: Set PackageName -> Set PackageName- addCabal = insertSet (PackageName "Cabal")+ addCabal = insertSet (mkPackageName "Cabal") withCounter :: TVar Int -> IO a -> IO a withCounter counter = bracket_@@ -304,7 +306,7 @@ testComps = insertSet CompTestSuite libComps benchComps = insertSet CompBenchmark libComps - thisIsCabal = pname == PackageName "Cabal" -- cue Sparta joke+ thisIsCabal = pname == mkPackageName "Cabal" -- cue Sparta joke inner | thisIsCabal && pbNoRebuildCabal =@@ -327,6 +329,13 @@ , "-" , version ]+ nameverrevhash = concat+ [ namever+ , fromMaybe (assert False "") $ do+ cfi <- ppCabalFileInfo $ piPlan sbPackageInfo+ hash <- lookup "GitSHA1" $ cfiHashes cfi+ Just $ "@gitsha1:" ++ hash+ ] quote :: Text -> Text quote s@@ -402,13 +411,17 @@ inner' getH `finally` cleanup - runghcArgs :: [Text] -> [Text]- runghcArgs rest =- "-clear-package-db"- : "-global-package-db"- : (case pbDatabase pb of- Nothing -> rest- Just db -> ("-package-db=" ++ pack db) : setupPackages ++ rest)+ setup run args = do+ _ <- run "ghc" $ runghcArgs ["Setup"]+ run "./Setup" args+ where+ runghcArgs :: [Text] -> [Text]+ runghcArgs rest =+ "-clear-package-db"+ : "-global-package-db"+ : (case pbDatabase pb of+ Nothing -> rest+ Just db -> ("-package-db=" ++ pack db) : setupPackages ++ rest) setupPackages :: [Text] setupPackages =@@ -445,7 +458,7 @@ tell' x = tell (x:) flags :: Text- flags = unwords $ map go $ mapToList pcFlagOverrides+ flags = pack $ unwords $ map go $ mapToList pcFlagOverrides where go (name', isOn) = concat [ if isOn then "" else "-"@@ -473,9 +486,9 @@ ] return $ sbBuildDir </> "cabal" </> "Cabal" else do- log' $ "Unpacking " ++ namever+ log' $ "Unpacking " ++ nameverrevhash case ppSourceUrl $ piPlan sbPackageInfo of- Nothing -> runParent getOutH "stack" ["unpack", namever]+ Nothing -> runParent getOutH "stack" ["unpack", nameverrevhash] Just url -> unpackFromURL sbBuildDir url return $ sbBuildDir </> unpack namever @@ -489,7 +502,7 @@ let withConfiged inner' = withUnpacked $ \_gpd childDir -> do let run a b = do when pbVerbose $ log' (unwords (a : b)) runIn childDir getOutH a b- cabal args = run "runghc" $ runghcArgs $ "Setup" : args+ cabal = setup run unlessM (readIORef isConfiged) $ do log' $ "Configuring " ++ namever@@ -603,7 +616,7 @@ && not pcSkipBuild when needTest $ withUnpacked $ \gpd childDir -> do let run = runIn childDir getOutH- cabal args = run "runghc" $ runghcArgs $ "Setup" : args+ cabal = setup run log' $ "Test configure " ++ namever cabal $ "configure" : "--enable-tests" : configArgs@@ -612,7 +625,7 @@ log' $ "Test build " ++ namever cabal ["build"] - let tests = map fst $ condTestSuites gpd+ let tests = map (unUnqualComponentName . fst) $ condTestSuites gpd forM_ tests $ \test -> do log' $ concat [ "Test run "@@ -637,7 +650,7 @@ ] else do outH <- getOutH- hPut outH $ encodeUtf8 $ "Test suite not built: " ++ pack test+ hPut outH $ encodeUtf8 $ asText $ "Test suite not built: " ++ pack test savePreviousResult pb Test pident $ either (const False) (const True) eres case (eres, pcTests) of@@ -652,7 +665,7 @@ && not pcSkipBuild when needTest $ withUnpacked $ \_gpd childDir -> do let run = runIn childDir getOutH- cabal args = run "runghc" $ runghcArgs $ "Setup" : args+ cabal = setup run log' $ "Benchmark configure " ++ namever cabal $ "configure" : "--enable-benchmarks" : configArgs@@ -858,7 +871,7 @@ go dir = case simpleParse nameVerText of Nothing -> return mempty- Just (PackageIdentifier (PackageName name) _) -> do+ Just (PackageIdentifier (unPackageName -> name) _) -> do let fp = dir </> name <.> "haddock" exists <- doesFileExist fp return $ if exists@@ -987,8 +1000,8 @@ -- If we have a previous successful build result which -- matches our version, then we'll need to check -- dependencies to know what to do- | Just (prevVer, prevRes) <- prevRes name Build- , prevVer == version && prevRes == PRSuccess = mempty+ | Just (prevVer, prevRes') <- prevRes name Build+ , prevVer == version && prevRes' == PRSuccess = mempty -- Something in the previous step failed, so do a full build | otherwise = singletonMap name BSFullBuild
Stackage/Prelude.hs view
@@ -11,11 +11,11 @@ import ClassyPrelude.Conduit as X import Data.Conduit.Process as X import qualified Data.Map as Map-import Distribution.Package as X (PackageIdentifier (..), PackageName (PackageName))-import Distribution.PackageDescription as X (FlagName (..), GenericPackageDescription)-import Distribution.Version as X (Version (..),- VersionRange)-import Distribution.Version as X (withinRange)+import Distribution.Package as X (PackageIdentifier (..))+import Distribution.PackageDescription as X (FlagName, GenericPackageDescription)+import Distribution.Version as X (Version, VersionRange)+import Distribution.Version as X (withinRange, versionNumbers, mkVersion)+import Distribution.Types.PackageName as X (PackageName, mkPackageName, unPackageName) import qualified Distribution.Version as C import Filesystem (createTree) import Filesystem.Path (parent)
Stackage/ServerBundle.hs view
@@ -66,7 +66,7 @@ hackage = builderToLazy $ foldMap goPair $ mapToList packageMap -- need to remove some packages that don't exist on Hackage- packageMap = foldr deleteMap (bpAllPackages bp) $ map PackageName+ packageMap = foldr deleteMap (bpAllPackages bp) $ map mkPackageName [ "bin-package-db" , "ghc" , "rts"@@ -80,7 +80,7 @@ corePackagesList = builderToLazy $ toBuilder $ unlines $- map (\(PackageName name) -> name)+ map unPackageName (M.keys $ siCorePackages bpSystemInfo) docsListing :: BuildPlan@@ -164,10 +164,10 @@ $$ filterMC (liftIO . doesDirectoryExist) =$ mapC takeFileName =$ sinkList- writeFile (dir </> "index.html") $ encodeUtf8 $ pack $ mkIndex+ writeFile (dir </> "index.html") $ encodeUtf8 $ asText $ pack $ mkIndex (unpack <$> msnapid) dirs- writeFile (dir </> "style.css") $ encodeUtf8 $ pack styleCss+ writeFile (dir </> "style.css") $ encodeUtf8 $ asText $ pack styleCss return dirs mkIndex :: Maybe String -> [String] -> String
Stackage/ShowBuildPlan.hs view
@@ -45,7 +45,7 @@ import Data.Text.Read (decimal) import Data.Time (Day) import Data.Typeable (Typeable)-import Data.Version (Version)+import Distribution.Version (Version) import Data.Yaml (decodeFileEither) import Distribution.Package (PackageName) import Network.HTTP.Client (Manager, brRead, httpLbs,@@ -356,7 +356,7 @@ forM_ (Map.toList $ sdPackages $ ppDesc pp) $ \(name', depInfo) -> when (includeDep depInfo) (goName name') addToList name (ppVersion pp)- (Map.mapKeysWith const unFlagName+ (Map.mapKeysWith const (T.pack . unFlagName) $ pcFlagOverrides $ ppConstraints pp) False
Stackage/Types.hs view
@@ -24,10 +24,10 @@ -- * Helper functions , display , simpleParse- , unPackageName- , mkPackageName- , unFlagName- , mkFlagName+ , C.unPackageName+ , C.mkPackageName+ , C.unFlagName+ , C.mkFlagName , intersectVersionRanges , compToText ) where@@ -53,8 +53,10 @@ import qualified Data.Traversable as T import Data.Typeable (TypeRep, Typeable, typeOf) import Data.Vector (Vector)-import Distribution.Package (PackageName (PackageName))-import Distribution.PackageDescription (FlagName (..))+import Distribution.Types.PackageName (PackageName)+import qualified Distribution.Types.PackageName as C+import qualified Distribution.PackageDescription as C+import Distribution.PackageDescription (FlagName) import Distribution.System (Arch, OS) import qualified Distribution.Text as DT import Distribution.Version (Version, VersionRange)@@ -124,17 +126,23 @@ , bpGithubUsers :: Map Text (Set Text) , bpBuildToolOverrides :: Map Text (Set Text) , bpAllCabalHashesCommit :: Maybe Text+ , bpNoRevisions :: !(Set PackageName)+ -- ^ Packages where we ignore Hackage revisions+ , bpCabalFormatVersion :: !(Maybe Version)+ -- ^ Maximum allowed version of the Cabal file format } deriving (Show, Eq) instance ToJSON BuildPlan where toJSON BuildPlan {..} = object $ maybe id (\x -> (("all-cabal-hashes-commit" .= x):)) bpAllCabalHashesCommit+ $ maybe id (\x -> (("cabal-format-version" .= display x):)) bpCabalFormatVersion [ "system-info" .= bpSystemInfo , "tools" .= fmap goTool bpTools , "packages" .= Map.mapKeysWith const unPackageName bpPackages , "github-users" .= bpGithubUsers , "build-tool-overrides" .= bpBuildToolOverrides+ , "no-revisions" .= Set.map unPackageName bpNoRevisions ] where goTool (k, v) = object@@ -149,6 +157,9 @@ bpGithubUsers <- o .:? "github-users" .!= mempty bpBuildToolOverrides <- o .:? "build-tool-overrides" .!= mempty bpAllCabalHashesCommit <- o .:? "all-cabal-hashes-commit"+ bpNoRevisions <- Set.map C.mkPackageName <$> o .:? "no-revisions" .!= mempty+ bpCabalFormatVersion <- o .:? "cabal-format-version" >>= T.mapM+ (either (fail . show) return . simpleParse . asText) return BuildPlan {..} where goTool = withObject "Tool" $ \o -> (,)@@ -185,7 +196,7 @@ . simpleParse . asText ppCabalFileInfo <- o .:? "cabal-file-info" ppGithubPings <- o .:? "github-pings" .!= mempty- ppUsers <- Set.map PackageName <$> (o .:? "users" .!= mempty)+ ppUsers <- Set.map C.mkPackageName <$> (o .:? "users" .!= mempty) ppConstraints <- o .: "constraints" ppDesc <- o .: "description" ppSourceUrl <- o .:? "source-url"@@ -236,10 +247,10 @@ instance Exception ParseFailedException unPackageName :: PackageName -> Text-unPackageName (PackageName str) = pack str+unPackageName = pack . C.unPackageName mkPackageName :: Text -> PackageName-mkPackageName = PackageName . unpack+mkPackageName = C.mkPackageName . unpack data PackageConstraints = PackageConstraints { pcVersionRange :: VersionRange@@ -350,17 +361,17 @@ . Map.mapKeysWith const mkPackageName unFlagName :: FlagName -> Text-unFlagName (FlagName str) = pack str+unFlagName = pack . C.unFlagName mkFlagName :: Text -> FlagName-mkFlagName = FlagName . unpack+mkFlagName = C.mkFlagName . unpack newtype Maintainer = Maintainer { unMaintainer :: Text } deriving (Show, Eq, Ord, Hashable, ToJSON, FromJSON, IsString) -- | Name of an executable. newtype ExeName = ExeName { unExeName :: Text }- deriving (Show, Eq, Ord, Hashable, ToJSON, FromJSON, IsString)+ deriving (Show, Eq, Ord, Hashable, ToJSON, FromJSON, IsString, Generic, Store) -- | A simplified package description that tracks: --
Stackage/UpdateBuildPlan.hs view
@@ -31,6 +31,8 @@ bcGithubUsers = bpGithubUsers bcBuildToolOverrides = bpBuildToolOverrides bcTellMeWhenItsReleased = mempty -- we don't care when doing an update+ bcNoRevisions = bpNoRevisions+ bcCabalFormatVersion = bpCabalFormatVersion bcPackageConstraints name = PackageConstraints { pcVersionRange = addBumpRange (maybe anyVersion pcVersionRange moldPC)@@ -56,7 +58,7 @@ bumpRange version = intersectVersionRanges (orLaterVersion version)- (earlierVersion $ bumpVersion version)- bumpVersion (Version (x:y:_) _) = Version [x, y + 1] []- bumpVersion (Version [x] _) = Version [x, 1] []- bumpVersion (Version [] _) = assert False $ Version [1, 0] []+ (earlierVersion $ bumpVersion $ versionNumbers version)+ bumpVersion (x:y:_) = mkVersion [x, y + 1]+ bumpVersion [x] = mkVersion [x, 1]+ bumpVersion [] = assert False $ mkVersion [1, 0]
app/stackage-build-plan.hs view
@@ -20,7 +20,7 @@ "Calculate and print (in different formats) Stackage build plans" options empty- tis <- getBuildPlan set $ map (mkPackageName . T.pack) packages+ tis <- getBuildPlan set $ map mkPackageName packages TLIO.putStr $ render set tis where options = (,,)
stackage-curator.cabal view
@@ -1,5 +1,5 @@ name: stackage-curator-version: 0.14.5+version: 0.15.0.0 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-curator@@ -41,7 +41,7 @@ Stackage.Types build-depends: base >= 4 && < 5 , containers- , Cabal >= 1.24+ , Cabal >= 2.0 && < 2.1 , tar >= 0.3 , zlib , bytestring
test/Stackage/BuildPlanSpec.hs view
@@ -96,12 +96,12 @@ M.fromList $ map (\(name,ver,deps) ->- ( PackageName name+ ( mkPackageName name , dummyPackage ver $ M.fromList $ map (\(dname,dver) ->- ( PackageName dname+ ( mkPackageName dname , DepInfo {diComponents = S.fromList [CompLibrary] ,diRange = dver}))@@ -110,7 +110,7 @@ where dummyPackage v deps = PackagePlan- {ppVersion = Version v []+ {ppVersion = mkVersion v ,ppCabalFileInfo = Nothing ,ppSourceUrl = Nothing ,ppGithubPings = mempty@@ -138,7 +138,7 @@ -- | This exact version is required. thisV :: [Int] -> VersionRange-thisV ver = thisVersion (Version ver [])+thisV ver = thisVersion (mkVersion ver) -- | Accept any version. anyV :: VersionRange
test/Stackage/CorePackagesSpec.hs view
@@ -11,7 +11,7 @@ it "contains known core packages" $ do m <- getCorePackages forM_ (words "ghc containers base") $ \p ->- m `shouldSatisfy` (member (PackageName p))+ m `shouldSatisfy` (member (mkPackageName p)) it "getCoreExecutables includes known executables" $ do s <- getCoreExecutables s `shouldSatisfy` member "ghc"
test/Stackage/PackageIndexSpec.hs view
@@ -14,7 +14,7 @@ [ (asText "base", asText "4.5.0.0") , ("does-not-exist", "9999999999999999999") ])- (m, _) <- getLatestDescriptions f return+ (m, _) <- getLatestDescriptions mempty f return length m `shouldBe` 1 p <- simpleParse $ asText "base" v <- simpleParse $ asText "4.5.0.0"