Skip to content

Commit aa91b43

Browse files
outdated: accept --project-file
This doesn't get anywhere near the improvements suggested in haskell#4831, but it's a very respectable improvement over the status-quo for not much effort.
1 parent 7fdf646 commit aa91b43

File tree

7 files changed

+39
-17
lines changed

7 files changed

+39
-17
lines changed

cabal-install/Distribution/Client/Outdated.hs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ import Distribution.Package (PackageName, packageVersio
3131
import Distribution.PackageDescription (allBuildDepends)
3232
import Distribution.PackageDescription.Configuration (finalizePD)
3333
import Distribution.Simple.Compiler (Compiler, compilerInfo)
34-
import Distribution.Simple.Setup (fromFlagOrDefault)
34+
import Distribution.Simple.Setup
35+
(fromFlagOrDefault, flagToMaybe)
3536
import Distribution.Simple.Utils
3637
(die', notice, debug, tryFindPackageDesc)
3738
import Distribution.System (Platform)
@@ -58,8 +59,8 @@ outdated :: Verbosity -> OutdatedFlags -> RepoContext
5859
-> IO ()
5960
outdated verbosity0 outdatedFlags repoContext comp platform = do
6061
let freezeFile = fromFlagOrDefault False (outdatedFreezeFile outdatedFlags)
61-
newFreezeFile = fromFlagOrDefault False
62-
(outdatedNewFreezeFile outdatedFlags)
62+
mprojectFile = flagToMaybe
63+
(outdatedProjectFile outdatedFlags)
6364
simpleOutput = fromFlagOrDefault False
6465
(outdatedSimpleOutput outdatedFlags)
6566
quiet = fromFlagOrDefault False (outdatedQuiet outdatedFlags)
@@ -79,9 +80,11 @@ outdated verbosity0 outdatedFlags repoContext comp platform = do
7980
let pkgIndex = packageIndex sourcePkgDb
8081
deps <- if freezeFile
8182
then depsFromFreezeFile verbosity
82-
else if newFreezeFile
83-
then depsFromNewFreezeFile verbosity
84-
else depsFromPkgDesc verbosity comp platform
83+
else case mprojectFile of
84+
Just projectFile
85+
-> depsFromNewFreezeFile verbosity projectFile
86+
Nothing
87+
-> depsFromPkgDesc verbosity comp platform
8588
debug verbosity $ "Dependencies loaded: "
8689
++ (intercalate ", " $ map display deps)
8790
let outdatedDeps = listOutdated deps pkgIndex
@@ -123,20 +126,19 @@ depsFromFreezeFile verbosity = do
123126
return deps
124127

125128
-- | Read the list of dependencies from the new-style freeze file.
126-
depsFromNewFreezeFile :: Verbosity -> IO [Dependency]
127-
depsFromNewFreezeFile verbosity = do
129+
depsFromNewFreezeFile :: Verbosity -> FilePath -> IO [Dependency]
130+
depsFromNewFreezeFile verbosity projectFile = do
128131
projectRoot <- either throwIO return =<<
129-
findProjectRoot Nothing
130-
{- TODO: Support '--project-file': -} Nothing
132+
findProjectRoot Nothing (Just projectFile)
131133
let distDirLayout = defaultDistDirLayout projectRoot
132134
{- TODO: Support dist dir override -} Nothing
133135
projectConfig <- runRebuild (distProjectRootDirectory distDirLayout) $
134136
readProjectLocalFreezeConfig verbosity distDirLayout
135137
let ucnstrs = map fst . projectConfigConstraints . projectConfigShared
136138
$ projectConfig
137139
deps = userConstraintsToDependencies ucnstrs
138-
debug verbosity
139-
"Reading the list of dependencies from the new-style freeze file"
140+
debug verbosity $
141+
"Reading the list of dependencies from the new-style freeze file " ++ projectFile ++ ".freeze"
140142
return deps
141143

142144
-- | Read the list of dependencies from the package description.

cabal-install/Distribution/Client/Setup.hs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,7 +1100,7 @@ instance Semigroup IgnoreMajorVersionBumps where
11001100
data OutdatedFlags = OutdatedFlags {
11011101
outdatedVerbosity :: Flag Verbosity,
11021102
outdatedFreezeFile :: Flag Bool,
1103-
outdatedNewFreezeFile :: Flag Bool,
1103+
outdatedProjectFile :: Flag FilePath,
11041104
outdatedSimpleOutput :: Flag Bool,
11051105
outdatedExitCode :: Flag Bool,
11061106
outdatedQuiet :: Flag Bool,
@@ -1112,7 +1112,7 @@ defaultOutdatedFlags :: OutdatedFlags
11121112
defaultOutdatedFlags = OutdatedFlags {
11131113
outdatedVerbosity = toFlag normal,
11141114
outdatedFreezeFile = mempty,
1115-
outdatedNewFreezeFile = mempty,
1115+
outdatedProjectFile = mempty,
11161116
outdatedSimpleOutput = mempty,
11171117
outdatedExitCode = mempty,
11181118
outdatedQuiet = mempty,
@@ -1140,9 +1140,14 @@ outdatedCommand = CommandUI {
11401140
trueArg
11411141

11421142
,option [] ["new-freeze-file"]
1143-
"Act on the new-style freeze file"
1144-
outdatedNewFreezeFile (\v flags -> flags { outdatedNewFreezeFile = v })
1145-
trueArg
1143+
"Act on the new-style freeze file named cabal.project.freeze"
1144+
outdatedProjectFile (\_ flags -> flags { outdatedProjectFile = pure "cabal.project" })
1145+
(noArg mempty)
1146+
1147+
,option [] ["project-file"]
1148+
"Act on the new-style freeze file named PROJECTFILE.freeze"
1149+
outdatedProjectFile (\v flags -> flags { outdatedProjectFile = v })
1150+
(reqArgFlag "PROJECTFILE")
11461151

11471152
,option [] ["simple-output"]
11481153
"Only print names of outdated dependencies, one per line"

cabal-install/changelog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
-*-change-log-*-
22

33
2.4.0.0 (current development version)
4+
* 'outdated' now accepts '--project-file FILE', which will look for bounds
5+
from the new-style freeze file named FILE.freeze.
46
* 'new-repl' now accepts a '--build-depends' flag which accepts the
57
same syntax as is used in .cabal files to add additional dependencies
68
to the environment when developing in the REPL. It is now usable outside
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# cabal v1-update
2+
Downloading the latest package list from test-local-repo
3+
# cabal outdated
4+
Outdated dependencies:
5+
base ==3.0.3.2 (latest: 4.0.0.0)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import Test.Cabal.Prelude
2+
main = cabalTest $ withRepo "repo" $ do
3+
res <- cabal' "outdated" ["--project-file", "variant.project"]
4+
assertOutputContains "base" res
5+
assertOutputDoesNotContain "template-haskell" res
6+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
packages: .
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
constraints: base == 3.0.3.2

0 commit comments

Comments
 (0)