Skip to content

Commit 4811a3c

Browse files
committed
Add provenance information to PackageLocation
1 parent 63c486a commit 4811a3c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1688
-1007
lines changed

cabal-install-solver/cabal-install-solver.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,13 @@ library
7676
Distribution.Solver.Modular.WeightedPSQ
7777
Distribution.Solver.Types.ComponentDeps
7878
Distribution.Solver.Types.ConstraintSource
79+
Distribution.Solver.Types.WithConstraintSource
7980
Distribution.Solver.Types.DependencyResolver
8081
Distribution.Solver.Types.Flag
8182
Distribution.Solver.Types.InstalledPreference
8283
Distribution.Solver.Types.InstSolverPackage
8384
Distribution.Solver.Types.LabeledPackageConstraint
85+
Distribution.Solver.Types.NamedPackage
8486
Distribution.Solver.Types.OptionalStanza
8587
Distribution.Solver.Types.PackageConstraint
8688
Distribution.Solver.Types.PackageFixedDeps

cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ module Distribution.Solver.Types.ConstraintSource
66

77
import Distribution.Solver.Compat.Prelude
88
import Distribution.Solver.Types.ProjectConfigPath (ProjectConfigPath, docProjectConfigPath)
9-
import Text.PrettyPrint (render)
9+
import Distribution.Pretty (Pretty(pretty), prettyShow)
10+
import Text.PrettyPrint (text)
1011

1112
-- | Source of a 'PackageConstraint'.
1213
data ConstraintSource =
@@ -55,31 +56,40 @@ data ConstraintSource =
5556
-- | An internal constraint due to compatibility issues with the Setup.hs
5657
-- command line interface requires a maximum upper bound on Cabal
5758
| ConstraintSetupCabalMaxVersion
58-
deriving (Eq, Show, Generic)
59+
60+
-- | An implicit constraint added by Cabal.
61+
| ConstraintSourceImplicit
62+
deriving (Show, Eq, Ord, Generic, Typeable)
5963

6064
instance Binary ConstraintSource
6165
instance Structured ConstraintSource
6266

6367
-- | Description of a 'ConstraintSource'.
6468
showConstraintSource :: ConstraintSource -> String
65-
showConstraintSource (ConstraintSourceMainConfig path) =
66-
"main config " ++ path
67-
showConstraintSource (ConstraintSourceProjectConfig path) =
68-
"project config " ++ render (docProjectConfigPath path)
69-
showConstraintSource (ConstraintSourceUserConfig path)= "user config " ++ path
70-
showConstraintSource ConstraintSourceCommandlineFlag = "command line flag"
71-
showConstraintSource ConstraintSourceUserTarget = "user target"
72-
showConstraintSource ConstraintSourceNonReinstallablePackage =
73-
"non-reinstallable package"
74-
showConstraintSource ConstraintSourceFreeze = "cabal freeze"
75-
showConstraintSource ConstraintSourceConfigFlagOrTarget =
76-
"config file, command line flag, or user target"
77-
showConstraintSource ConstraintSourceMultiRepl =
78-
"--enable-multi-repl"
79-
showConstraintSource ConstraintSourceProfiledDynamic =
80-
"--enable-profiling-shared"
81-
showConstraintSource ConstraintSourceUnknown = "unknown source"
82-
showConstraintSource ConstraintSetupCabalMinVersion =
83-
"minimum version of Cabal used by Setup.hs"
84-
showConstraintSource ConstraintSetupCabalMaxVersion =
85-
"maximum version of Cabal used by Setup.hs"
69+
showConstraintSource = prettyShow
70+
71+
instance Pretty ConstraintSource where
72+
pretty constraintSource = case constraintSource of
73+
(ConstraintSourceMainConfig path) ->
74+
text "main config" <+> text path
75+
(ConstraintSourceProjectConfig path) ->
76+
text "project config" <+> docProjectConfigPath path
77+
(ConstraintSourceUserConfig path)-> text "user config " <+> text path
78+
ConstraintSourceCommandlineFlag -> text "command line flag"
79+
ConstraintSourceUserTarget -> text "user target"
80+
ConstraintSourceNonReinstallablePackage ->
81+
text "non-reinstallable package"
82+
ConstraintSourceFreeze -> text "cabal freeze"
83+
ConstraintSourceConfigFlagOrTarget ->
84+
text "config file, command line flag, or user target"
85+
ConstraintSourceMultiRepl ->
86+
text "--enable-multi-repl"
87+
ConstraintSourceProfiledDynamic ->
88+
text "--enable-profiling-shared"
89+
ConstraintSourceUnknown -> text "unknown source"
90+
ConstraintSetupCabalMinVersion ->
91+
text "minimum version of Cabal used by Setup.hs"
92+
ConstraintSetupCabalMaxVersion ->
93+
text "maximum version of Cabal used by Setup.hs"
94+
ConstraintSourceImplicit ->
95+
text "implicit target"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{-# LANGUAGE NamedFieldPuns #-}
2+
{-# LANGUAGE DeriveGeneric #-}
3+
{-# LANGUAGE DeriveFunctor #-}
4+
5+
module Distribution.Solver.Types.NamedPackage
6+
( NamedPackage (..)
7+
, NamedPackageConstraint
8+
) where
9+
10+
import Distribution.Solver.Compat.Prelude
11+
import Prelude ()
12+
13+
import Distribution.Types.PackageName (PackageName)
14+
import Distribution.Solver.Types.PackageConstraint (PackageProperty)
15+
import Distribution.Solver.Types.WithConstraintSource (WithConstraintSource)
16+
import Distribution.Pretty (Pretty (pretty), commaSpaceSep)
17+
import Text.PrettyPrint
18+
19+
-- | A package, identified by a name and properties.
20+
data NamedPackage = NamedPackage PackageName [PackageProperty]
21+
deriving (Show, Eq, Ord, Generic, Typeable)
22+
23+
instance Binary NamedPackage
24+
instance Structured NamedPackage
25+
26+
instance Pretty NamedPackage where
27+
pretty (NamedPackage name properties) =
28+
pretty name <+> parens (commaSpaceSep properties)
29+
30+
type NamedPackageConstraint = WithConstraintSource NamedPackage

cabal-install-solver/src/Distribution/Solver/Types/PackageConstraint.hs

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ module Distribution.Solver.Types.PackageConstraint (
1111
scopeToPackageName,
1212
constraintScopeMatches,
1313
PackageProperty(..),
14-
dispPackageProperty,
1514
PackageConstraint(..),
16-
dispPackageConstraint,
1715
showPackageConstraint,
1816
packageConstraintToDependency
1917
) where
@@ -23,7 +21,7 @@ import Prelude ()
2321

2422
import Distribution.Package (PackageName)
2523
import Distribution.PackageDescription (FlagAssignment, dispFlagAssignment)
26-
import Distribution.Pretty (flatStyle, pretty)
24+
import Distribution.Pretty (flatStyle, Pretty(pretty))
2725
import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint (..))
2826
import Distribution.Version (VersionRange, simplifyVersionRange)
2927

@@ -82,12 +80,11 @@ constraintScopeMatches (ScopeAnySetupQualifier pn) (Q pp pn') =
8280
in setup pp && pn == pn'
8381
constraintScopeMatches (ScopeAnyQualifier pn) (Q _ pn') = pn == pn'
8482

85-
-- | Pretty-prints a constraint scope.
86-
dispConstraintScope :: ConstraintScope -> Disp.Doc
87-
dispConstraintScope (ScopeTarget pn) = pretty pn <<>> Disp.text "." <<>> pretty pn
88-
dispConstraintScope (ScopeQualified q pn) = dispQualifier q <<>> pretty pn
89-
dispConstraintScope (ScopeAnySetupQualifier pn) = Disp.text "setup." <<>> pretty pn
90-
dispConstraintScope (ScopeAnyQualifier pn) = Disp.text "any." <<>> pretty pn
83+
instance Pretty ConstraintScope where
84+
pretty (ScopeTarget pn) = pretty pn <<>> Disp.text "." <<>> pretty pn
85+
pretty (ScopeQualified q pn) = dispQualifier q <<>> pretty pn
86+
pretty (ScopeAnySetupQualifier pn) = Disp.text "setup." <<>> pretty pn
87+
pretty (ScopeAnyQualifier pn) = Disp.text "any." <<>> pretty pn
9188

9289
-- | A package property is a logical predicate on packages.
9390
data PackageProperty
@@ -96,37 +93,35 @@ data PackageProperty
9693
| PackagePropertySource
9794
| PackagePropertyFlags FlagAssignment
9895
| PackagePropertyStanzas [OptionalStanza]
99-
deriving (Eq, Show, Generic)
96+
deriving (Eq, Ord, Show, Generic)
10097

10198
instance Binary PackageProperty
10299
instance Structured PackageProperty
103100

104-
-- | Pretty-prints a package property.
105-
dispPackageProperty :: PackageProperty -> Disp.Doc
106-
dispPackageProperty (PackagePropertyVersion verrange) = pretty verrange
107-
dispPackageProperty PackagePropertyInstalled = Disp.text "installed"
108-
dispPackageProperty PackagePropertySource = Disp.text "source"
109-
dispPackageProperty (PackagePropertyFlags flags) = dispFlagAssignment flags
110-
dispPackageProperty (PackagePropertyStanzas stanzas) =
111-
Disp.hsep $ map (Disp.text . showStanza) stanzas
101+
instance Pretty PackageProperty where
102+
pretty (PackagePropertyVersion verrange) = pretty verrange
103+
pretty PackagePropertyInstalled = Disp.text "installed"
104+
pretty PackagePropertySource = Disp.text "source"
105+
pretty (PackagePropertyFlags flags) = dispFlagAssignment flags
106+
pretty (PackagePropertyStanzas stanzas) =
107+
Disp.hsep $ map (Disp.text . showStanza) stanzas
112108

113109
-- | A package constraint consists of a scope plus a property
114110
-- that must hold for all packages within that scope.
115111
data PackageConstraint = PackageConstraint ConstraintScope PackageProperty
116112
deriving (Eq, Show)
117113

118-
-- | Pretty-prints a package constraint.
119-
dispPackageConstraint :: PackageConstraint -> Disp.Doc
120-
dispPackageConstraint (PackageConstraint scope prop) =
121-
dispConstraintScope scope <+> dispPackageProperty prop
114+
instance Pretty PackageConstraint where
115+
pretty (PackageConstraint scope prop) =
116+
pretty scope <+> pretty prop
122117

123118
-- | Alternative textual representation of a package constraint
124119
-- for debugging purposes (slightly more verbose than that
125120
-- produced by 'dispPackageConstraint').
126121
--
127122
showPackageConstraint :: PackageConstraint -> String
128123
showPackageConstraint pc@(PackageConstraint scope prop) =
129-
Disp.renderStyle flatStyle . postprocess $ dispPackageConstraint pc2
124+
Disp.renderStyle flatStyle . postprocess $ pretty pc2
130125
where
131126
pc2 = case prop of
132127
PackagePropertyVersion vr ->
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{-# LANGUAGE DeriveFunctor #-}
2+
{-# LANGUAGE DeriveGeneric #-}
3+
{-# LANGUAGE NamedFieldPuns #-}
4+
5+
module Distribution.Solver.Types.WithConstraintSource
6+
( WithConstraintSource (..)
7+
, showWithConstraintSource
8+
, withUnknownConstraint
9+
) where
10+
11+
import Distribution.Solver.Compat.Prelude
12+
13+
import Distribution.Solver.Types.ConstraintSource (ConstraintSource (..), showConstraintSource)
14+
import Distribution.Pretty (Pretty (pretty))
15+
import Text.PrettyPrint
16+
17+
-- | A package bundled with a `ConstraintSource`.
18+
data WithConstraintSource pkg =
19+
WithConstraintSource
20+
{ constraintPackage :: pkg
21+
-- ^ The package.
22+
, constraintConstraint :: ConstraintSource
23+
-- ^ The constraint source for the package.
24+
}
25+
deriving (Show, Functor, Eq, Ord, Generic, Typeable)
26+
27+
instance Binary pkg => Binary (WithConstraintSource pkg)
28+
instance Structured pkg => Structured (WithConstraintSource pkg)
29+
30+
withUnknownConstraint :: pkg -> WithConstraintSource pkg
31+
withUnknownConstraint constraintPackage =
32+
WithConstraintSource
33+
{ constraintPackage
34+
, constraintConstraint = ConstraintSourceUnknown
35+
}
36+
37+
showWithConstraintSource :: (pkg -> String) -> WithConstraintSource pkg -> String
38+
showWithConstraintSource
39+
showPackage
40+
(WithConstraintSource { constraintPackage, constraintConstraint }) =
41+
showPackage constraintPackage ++ " (" ++ showConstraintSource constraintConstraint ++ ")"
42+
43+
instance Pretty pkg => Pretty (WithConstraintSource pkg) where
44+
pretty (WithConstraintSource { constraintPackage, constraintConstraint = ConstraintSourceUnknown })
45+
= pretty constraintPackage
46+
pretty (WithConstraintSource { constraintPackage, constraintConstraint })
47+
= pretty constraintPackage
48+
<+> parens (text "from" <+> pretty constraintConstraint)

cabal-install/cabal-install.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ library
244244
zlib >= 0.5.3 && < 0.8,
245245
hackage-security >= 0.6.2.0 && < 0.7,
246246
text >= 1.2.3 && < 1.3 || >= 2.0 && < 2.2,
247+
transformers >= 0.2 && <0.7,
247248
parsec >= 3.1.13.0 && < 3.2,
248249
open-browser >= 0.2.1.0 && < 0.3,
249250
regex-base >= 0.94.0.0 && <0.95,

cabal-install/src/Distribution/Client/BuildReports/Storage.hs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ import Distribution.Client.Types
3939

4040
import qualified Distribution.Solver.Types.ComponentDeps as CD
4141
import Distribution.Solver.Types.SourcePackage
42+
import Distribution.Solver.Types.WithConstraintSource
43+
( WithConstraintSource (..)
44+
)
4245

4346
import Distribution.Compiler
4447
( CompilerId (..)
@@ -200,8 +203,16 @@ fromPlanPackage
200203
, extractRepo srcPkg
201204
)
202205
where
203-
extractRepo (SourcePackage{srcpkgSource = RepoTarballPackage repo _ _}) =
204-
Just repo
206+
extractRepo
207+
( SourcePackage
208+
{ srcpkgSource =
209+
WithConstraintSource
210+
{ constraintPackage =
211+
RepoTarballPackage repo _ _
212+
}
213+
}
214+
) =
215+
Just repo
205216
extractRepo _ = Nothing
206217
fromPlanPackage _ _ _ _ = Nothing
207218

0 commit comments

Comments
 (0)