[commit: Cabal] master: Add cabal install --reinstall flag (e2a9e1c)
Ian Lynagh
igloo at earth.li
Fri Jun 24 01:58:21 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/e2a9e1c433f4bf6c6e77d603e68d66e88677a99e
>---------------------------------------------------------------
commit e2a9e1c433f4bf6c6e77d603e68d66e88677a99e
Author: Duncan Coutts <duncan at haskell.org>
Date: Thu Aug 14 18:34:45 2008 +0000
Add cabal install --reinstall flag
to force reinstall of package where we have the exact same
version already installed. Ordinarily we would say that
there is nothing to do as the exact same package version
is already installed. There are some cases where you might
want to do this, eg to rebuild with different compiler
options, or adding/removing components (since we do not
track those indifidually yet, eg docs, profiling libs).
>---------------------------------------------------------------
cabal-install/Distribution/Client/Install.hs | 23 +++++++++++++++++------
cabal-install/Distribution/Client/Setup.hs | 8 ++++++++
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs
index a0d6bbc..5eed080 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -76,7 +76,8 @@ import Distribution.Simple.InstallDirs
( fromPathTemplate, toPathTemplate
, initialPathTemplateEnv, substPathTemplate )
import Distribution.Package
- ( PackageIdentifier(..), Package(..), thisPackageVersion )
+ ( PackageIdentifier(..), Package(..), thisPackageVersion
+ , Dependency(..) )
import qualified Distribution.PackageDescription as PackageDescription
import Distribution.PackageDescription
( PackageDescription, readPackageDescription )
@@ -118,7 +119,8 @@ install verbosity packageDB repos comp conf configFlags installFlags deps =
where
planner :: Planner
planner | null deps = planLocalPackage verbosity comp configFlags
- | otherwise = planRepoPackages PreferLatestForSelected comp deps
+ | otherwise = planRepoPackages PreferLatestForSelected
+ comp installFlags deps
upgrade verbosity packageDB repos comp conf configFlags installFlags deps =
installWithPlanner planner
@@ -126,7 +128,8 @@ upgrade verbosity packageDB repos comp conf configFlags installFlags deps =
where
planner :: Planner
planner | null deps = planUpgradePackages comp
- | otherwise = planRepoPackages PreferAllLatest comp deps
+ | otherwise = planRepoPackages PreferAllLatest
+ comp installFlags deps
type Planner = Maybe (PackageIndex InstalledPackageInfo)
-> PackageIndex AvailablePackage
@@ -252,12 +255,20 @@ planLocalPackage verbosity comp configFlags installed available = do
-- | Make an 'InstallPlan' for the given dependencies.
--
-planRepoPackages :: PackagesVersionPreference -> Compiler
+planRepoPackages :: PackagesVersionPreference -> Compiler -> InstallFlags
-> [UnresolvedDependency] -> Planner
-planRepoPackages pref comp deps installed available = do
+planRepoPackages pref comp installFlags deps installed available = do
deps' <- IndexUtils.disambiguateDependencies available deps
+ let installed'
+ | Cabal.fromFlag (installReinstall installFlags)
+ = fmap (hideGivenDeps deps') installed
+ | otherwise = installed
return $ resolveDependenciesWithProgress buildOS buildArch (compilerId comp)
- installed available pref deps'
+ installed' available pref deps'
+ where
+ hideGivenDeps pkgs index =
+ foldr PackageIndex.deletePackageName index
+ [ name | UnresolvedDependency (Dependency name _) _ <- pkgs ]
planUpgradePackages :: Compiler -> Planner
planUpgradePackages comp (Just installed) available = return $
diff --git a/cabal-install/Distribution/Client/Setup.hs b/cabal-install/Distribution/Client/Setup.hs
index bfe4c78..d927082 100644
--- a/cabal-install/Distribution/Client/Setup.hs
+++ b/cabal-install/Distribution/Client/Setup.hs
@@ -211,6 +211,7 @@ instance Monoid ListFlags where
data InstallFlags = InstallFlags {
installDocumentation:: Flag Bool,
installDryRun :: Flag Bool,
+ installReinstall :: Flag Bool,
installOnly :: Flag Bool,
installRootCmd :: Flag String,
installCabalVersion :: Flag Version,
@@ -223,6 +224,7 @@ defaultInstallFlags :: InstallFlags
defaultInstallFlags = InstallFlags {
installDocumentation= Flag False,
installDryRun = Flag False,
+ installReinstall = Flag False,
installOnly = Flag False,
installRootCmd = mempty,
installCabalVersion = mempty,
@@ -250,6 +252,11 @@ installCommand = configureCommand {
installDryRun (\v flags -> flags { installDryRun = v })
trueArg
+ , option [] ["reinstall"]
+ "Install even if it means installing the same version again."
+ installReinstall (\v flags -> flags { installReinstall = v })
+ trueArg
+
, option [] ["root-cmd"]
"Command used to gain root privileges, when installing with --global."
installRootCmd (\v flags -> flags { installRootCmd = v })
@@ -288,6 +295,7 @@ instance Monoid InstallFlags where
mappend a b = InstallFlags {
installDocumentation= combine installDocumentation,
installDryRun = combine installDryRun,
+ installReinstall = combine installReinstall,
installOnly = combine installOnly,
installRootCmd = combine installRootCmd,
installCabalVersion = combine installCabalVersion,
More information about the Cvs-libraries
mailing list