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 <[email protected]>
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,



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to