Skip to content

Commit c976c0a

Browse files
Add package-db flag for v2 commands (#7676)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent d638e33 commit c976c0a

File tree

30 files changed

+276
-25
lines changed

30 files changed

+276
-25
lines changed

Cabal-QuickCheck/src/Test/QuickCheck/Instances/Cabal.hs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ instance Arbitrary TestShowDetails where
483483
instance Arbitrary PackageDB where
484484
arbitrary = oneof [ pure GlobalPackageDB
485485
, pure UserPackageDB
486-
, SpecificPackageDB <$> arbitraryShortToken
486+
, SpecificPackageDB <$> arbitraryShortPath
487487
]
488488

489489
-------------------------------------------------------------------------------
@@ -503,8 +503,14 @@ shortListOf1 bound gen = sized $ \n -> do
503503
vectorOf k gen
504504

505505
arbitraryShortToken :: Gen String
506-
arbitraryShortToken =
507-
shortListOf1 5 $ elements [c | c <- ['#' .. '~' ], c `notElem` "{}[]" ]
506+
arbitraryShortToken = arbitraryShortStringWithout "{}[]"
507+
508+
arbitraryShortPath :: Gen String
509+
arbitraryShortPath = arbitraryShortStringWithout "{}[],"
510+
511+
arbitraryShortStringWithout :: String -> Gen String
512+
arbitraryShortStringWithout excludeChars =
513+
shortListOf1 5 $ elements [c | c <- ['#' .. '~' ], c `notElem` excludeChars ]
508514

509515
-- |
510516
intSqrt :: Int -> Int

Cabal/src/Distribution/Simple/Setup.hs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ module Distribution.Simple.Setup (
3838
GlobalFlags(..), emptyGlobalFlags, defaultGlobalFlags, globalCommand,
3939
ConfigFlags(..), emptyConfigFlags, defaultConfigFlags, configureCommand,
4040
configPrograms,
41-
configAbsolutePaths, readPackageDbList, showPackageDbList,
41+
configAbsolutePaths, readPackageDb, readPackageDbList, showPackageDb, showPackageDbList,
4242
CopyFlags(..), emptyCopyFlags, defaultCopyFlags, copyCommand,
4343
InstallFlags(..), emptyInstallFlags, defaultInstallFlags, installCommand,
4444
HaddockTarget(..),
@@ -751,18 +751,28 @@ configureOptions showOrParseArgs =
751751
(fmap fromPathTemplate . get) (set . fmap toPathTemplate)
752752

753753
readPackageDbList :: String -> [Maybe PackageDB]
754-
readPackageDbList "clear" = [Nothing]
755-
readPackageDbList "global" = [Just GlobalPackageDB]
756-
readPackageDbList "user" = [Just UserPackageDB]
757-
readPackageDbList other = [Just (SpecificPackageDB other)]
754+
readPackageDbList str = [readPackageDb str]
755+
756+
-- | Parse a PackageDB stack entry
757+
--
758+
-- @since 3.7.0.0
759+
readPackageDb :: String -> Maybe PackageDB
760+
readPackageDb "clear" = Nothing
761+
readPackageDb "global" = Just GlobalPackageDB
762+
readPackageDb "user" = Just UserPackageDB
763+
readPackageDb other = Just (SpecificPackageDB other)
758764

759765
showPackageDbList :: [Maybe PackageDB] -> [String]
760766
showPackageDbList = map showPackageDb
761-
where
762-
showPackageDb Nothing = "clear"
763-
showPackageDb (Just GlobalPackageDB) = "global"
764-
showPackageDb (Just UserPackageDB) = "user"
765-
showPackageDb (Just (SpecificPackageDB db)) = db
767+
768+
-- | Show a PackageDB stack entry
769+
--
770+
-- @since 3.7.0.0
771+
showPackageDb :: Maybe PackageDB -> String
772+
showPackageDb Nothing = "clear"
773+
showPackageDb (Just GlobalPackageDB) = "global"
774+
showPackageDb (Just UserPackageDB) = "user"
775+
showPackageDb (Just (SpecificPackageDB db)) = db
766776

767777
showProfDetailLevelFlag :: Flag ProfDetailLevel -> [String]
768778
showProfDetailLevelFlag NoFlag = []

cabal-install/src/Distribution/Client/PackageHash.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import Distribution.Types.Flag
3434
( FlagAssignment, showFlagAssignment )
3535
import Distribution.Simple.Compiler
3636
( CompilerId, OptimisationLevel(..), DebugInfoLevel(..)
37-
, ProfDetailLevel(..), showProfDetailLevel )
37+
, ProfDetailLevel(..), PackageDB, showProfDetailLevel )
3838
import Distribution.Simple.InstallDirs
3939
( PathTemplate, fromPathTemplate )
4040
import Distribution.Types.PkgconfigVersion (PkgconfigVersion)
@@ -200,6 +200,7 @@ data PackageHashConfigInputs = PackageHashConfigInputs {
200200
pkgHashExtraIncludeDirs :: [FilePath],
201201
pkgHashProgPrefix :: Maybe PathTemplate,
202202
pkgHashProgSuffix :: Maybe PathTemplate,
203+
pkgHashPackageDbs :: [Maybe PackageDB],
203204

204205
-- Haddock options
205206
pkgHashDocumentation :: Bool,
@@ -293,6 +294,7 @@ renderPackageHashInputs PackageHashInputs{
293294
, opt "extra-include-dirs" [] unwords pkgHashExtraIncludeDirs
294295
, opt "prog-prefix" Nothing (maybe "" fromPathTemplate) pkgHashProgPrefix
295296
, opt "prog-suffix" Nothing (maybe "" fromPathTemplate) pkgHashProgSuffix
297+
, opt "package-dbs" [] (unwords . map show) pkgHashPackageDbs
296298

297299
, opt "documentation" False prettyShow pkgHashDocumentation
298300
, opt "haddock-hoogle" False prettyShow pkgHashHaddockHoogle

cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import Distribution.Simple.Setup
5555
, TestFlags(..), testOptions', defaultTestFlags
5656
, BenchmarkFlags(..), benchmarkOptions', defaultBenchmarkFlags
5757
, programDbPaths', splitArgs, DumpBuildInfo (NoDumpBuildInfo, DumpBuildInfo)
58+
, readPackageDb, showPackageDb
5859
)
5960
import Distribution.Client.NixStyleOptions (NixStyleFlags (..))
6061
import Distribution.Client.ProjectFlags (ProjectFlags (..), projectFlagsOptions, defaultProjectFlags)
@@ -92,7 +93,7 @@ import Distribution.Simple.Command
9293
, OptionField, option, reqArg' )
9394
import Distribution.Types.PackageVersionConstraint
9495
( PackageVersionConstraint )
95-
import Distribution.Parsec (ParsecParser)
96+
import Distribution.Parsec (ParsecParser, parsecToken)
9697

9798
import qualified Data.Map as Map
9899
import qualified Data.ByteString as BS
@@ -352,11 +353,11 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
352353
configDistPref = projectConfigDistDir,
353354
configHcFlavor = projectConfigHcFlavor,
354355
configHcPath = projectConfigHcPath,
355-
configHcPkg = projectConfigHcPkg
356+
configHcPkg = projectConfigHcPkg,
356357
--configProgramPathExtra = projectConfigProgPathExtra DELETE ME
357358
--configInstallDirs = projectConfigInstallDirs,
358359
--configUserInstall = projectConfigUserInstall,
359-
--configPackageDBs = projectConfigPackageDBs,
360+
configPackageDBs = projectConfigPackageDBs
360361
} = configFlags
361362

362363
ConfigExFlags {
@@ -593,7 +594,8 @@ convertToLegacySharedConfig
593594

594595
configFlags = mempty {
595596
configVerbosity = projectConfigVerbosity,
596-
configDistPref = projectConfigDistDir
597+
configDistPref = projectConfigDistDir,
598+
configPackageDBs = projectConfigPackageDBs
597599
}
598600

599601
configExFlags = ConfigExFlags {
@@ -696,7 +698,7 @@ convertToLegacyAllPackageConfig
696698
configCabalFilePath = mempty,
697699
configVerbosity = mempty,
698700
configUserInstall = mempty, --projectConfigUserInstall,
699-
configPackageDBs = mempty, --projectConfigPackageDBs,
701+
configPackageDBs = mempty,
700702
configGHCiLib = mempty,
701703
configSplitSections = mempty,
702704
configSplitObjs = mempty,
@@ -976,6 +978,11 @@ legacySharedConfigFieldDescrs constraintSrc = concat
976978
, liftFields
977979
legacyConfigureShFlags
978980
(\flags conf -> conf { legacyConfigureShFlags = flags })
981+
. addFields
982+
[ commaNewLineListFieldParsec "package-dbs"
983+
(Disp.text . showPackageDb) (fmap readPackageDb parsecToken)
984+
configPackageDBs (\v conf -> conf { configPackageDBs = v })
985+
]
979986
. filterFields ["verbose", "builddir" ]
980987
. commandOptionsToFields
981988
$ configureOptions ParseArgs

cabal-install/src/Distribution/Client/ProjectConfig/Types.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import Distribution.System
5656
import Distribution.PackageDescription
5757
( FlagAssignment )
5858
import Distribution.Simple.Compiler
59-
( Compiler, CompilerFlavor
59+
( Compiler, CompilerFlavor, PackageDB
6060
, OptimisationLevel(..), ProfDetailLevel, DebugInfoLevel(..) )
6161
import Distribution.Simple.Setup
6262
( Flag, HaddockTarget(..), TestShowDetails(..), DumpBuildInfo (..) )
@@ -175,7 +175,7 @@ data ProjectConfigShared
175175
--projectConfigInstallDirs :: InstallDirs (Flag PathTemplate),
176176
--TODO: [required eventually] decide what to do with InstallDirs
177177
-- currently we don't allow it to be specified in the config file
178-
--projectConfigPackageDBs :: [Maybe PackageDB],
178+
projectConfigPackageDBs :: [Maybe PackageDB],
179179

180180
-- configuration used both by the solver and other phases
181181
projectConfigRemoteRepos :: NubList RemoteRepo, -- ^ Available Hackage servers.

cabal-install/src/Distribution/Client/ProjectPlanning.hs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,9 @@ rebuildInstallPlan verbosity
594594
Right plan -> return (plan, pkgConfigDB, tis, ar)
595595
where
596596
corePackageDbs :: [PackageDB]
597-
corePackageDbs = [GlobalPackageDB]
597+
corePackageDbs = applyPackageDbFlags [GlobalPackageDB]
598+
(projectConfigPackageDBs projectConfigShared)
599+
598600
withRepoCtx = projectConfigWithSolverRepoContext verbosity
599601
projectConfigShared
600602
projectConfigBuildOnly
@@ -984,6 +986,12 @@ getPackageSourceHashes verbosity withRepoCtx solverPlan = do
984986
return $! hashesFromRepoMetadata
985987
<> hashesFromTarballFiles
986988

989+
-- | Append the given package databases to an existing PackageDBStack.
990+
-- A @Nothing@ entry will clear everything before it.
991+
applyPackageDbFlags :: PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
992+
applyPackageDbFlags dbs' [] = dbs'
993+
applyPackageDbFlags _ (Nothing:dbs) = applyPackageDbFlags [] dbs
994+
applyPackageDbFlags dbs' (Just db:dbs) = applyPackageDbFlags (dbs' ++ [db]) dbs
987995

988996
-- ------------------------------------------------------------
989997
-- * Installation planning
@@ -1844,6 +1852,7 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB
18441852
elabLocalToProject = isLocalToProject pkg
18451853
elabBuildStyle = if shouldBuildInplaceOnly pkg
18461854
then BuildInplaceOnly else BuildAndInstall
1855+
elabPackageDbs = projectConfigPackageDBs sharedPackageConfig
18471856
elabBuildPackageDBStack = buildAndRegisterDbs
18481857
elabRegisterPackageDBStack = buildAndRegisterDbs
18491858

@@ -1859,7 +1868,7 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB
18591868

18601869
buildAndRegisterDbs
18611870
| shouldBuildInplaceOnly pkg = inplacePackageDbs
1862-
| otherwise = storePackageDbs
1871+
| otherwise = corePackageDbs
18631872

18641873
elabPkgDescriptionOverride = descOverride
18651874

@@ -1972,10 +1981,11 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB
19721981
= mempty
19731982
perpkg = maybe mempty f (Map.lookup (packageName pkg) perPackageConfig)
19741983

1975-
inplacePackageDbs = storePackageDbs
1984+
inplacePackageDbs = corePackageDbs
19761985
++ [ distPackageDB (compilerId compiler) ]
19771986

1978-
storePackageDbs = storePackageDBStack (compilerId compiler)
1987+
corePackageDbs = applyPackageDbFlags (storePackageDBStack (compilerId compiler))
1988+
(projectConfigPackageDBs sharedPackageConfig)
19791989

19801990
-- For this local build policy, every package that lives in a local source
19811991
-- dir (as opposed to a tarball), or depends on such a package, will be
@@ -3873,6 +3883,7 @@ packageHashConfigInputs shared@ElaboratedSharedConfig{..} pkg =
38733883
pkgHashExtraIncludeDirs = elabExtraIncludeDirs,
38743884
pkgHashProgPrefix = elabProgPrefix,
38753885
pkgHashProgSuffix = elabProgSuffix,
3886+
pkgHashPackageDbs = elabPackageDbs,
38763887

38773888
pkgHashDocumentation = elabBuildHaddocks,
38783889
pkgHashHaddockHoogle = elabHaddockHoogle,

cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ data ElaboratedConfiguredPackage
234234
-- warn if ALL local packages don't have any tests.)
235235
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool),
236236

237+
elabPackageDbs :: [Maybe PackageDB],
237238
elabSetupPackageDBStack :: PackageDBStack,
238239
elabBuildPackageDBStack :: PackageDBStack,
239240
elabRegisterPackageDBStack :: PackageDBStack,

cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ instance Arbitrary ProjectConfigShared where
456456
projectConfigHcPath <- arbitraryFlag arbitraryShortToken
457457
projectConfigHcPkg <- arbitraryFlag arbitraryShortToken
458458
projectConfigHaddockIndex <- arbitrary
459+
projectConfigPackageDBs <- shortListOf 2 arbitrary
459460
projectConfigRemoteRepos <- arbitrary
460461
projectConfigLocalNoIndexRepos <- arbitrary
461462
projectConfigActiveRepos <- arbitrary
@@ -494,6 +495,7 @@ instance Arbitrary ProjectConfigShared where
494495
<*> shrinkerAla (fmap NonEmpty) projectConfigHcPath
495496
<*> shrinkerAla (fmap NonEmpty) projectConfigHcPkg
496497
<*> shrinker projectConfigHaddockIndex
498+
<*> shrinker projectConfigPackageDBs
497499
<*> shrinker projectConfigRemoteRepos
498500
<*> shrinker projectConfigLocalNoIndexRepos
499501
<*> shrinker projectConfigActiveRepos

cabal-install/tests/UnitTests/Distribution/Client/TreeDiffInstances.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import Distribution.Client.Types
2020
import Distribution.Client.Types.OverwritePolicy (OverwritePolicy)
2121
import Distribution.Client.Types.SourceRepo (SourceRepositoryPackage)
2222

23+
import Distribution.Simple.Compiler (PackageDB)
24+
2325
import Data.TreeDiff.Class
2426
import Data.TreeDiff.Instances.Cabal ()
2527
import Network.URI
@@ -50,6 +52,7 @@ instance ToExpr OptionalStanza
5052
instance ToExpr Outcome
5153
instance ToExpr OverwritePolicy
5254
instance ToExpr PackageConfig
55+
instance ToExpr PackageDB
5356
instance ToExpr PackageProperty
5457
instance ToExpr PreSolver
5558
instance ToExpr ProjectConfig
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Setup configure
2+
Configuring p-1.0...
3+
# Setup build
4+
Preprocessing library for p-1.0..
5+
Building library for p-1.0..
6+
# Setup copy
7+
Installing library in <PATH>
8+
# Setup register
9+
Registering library for p-1.0..
10+
# cabal v2-build
11+
Resolving dependencies...
12+
Error: cabal: Could not resolve dependencies:
13+
[__0] trying: q-1.0 (user goal)
14+
[__1] unknown package: base (dependency of q)
15+
[__1] fail (backjumping, conflict set: base, q)
16+
After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: q (2), base (1)

0 commit comments

Comments
 (0)