Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch :
http://hackage.haskell.org/trac/ghc/changeset/9f61e74a357dfba6f5d29e3ffc8c5d9a08e91207 >--------------------------------------------------------------- commit 9f61e74a357dfba6f5d29e3ffc8c5d9a08e91207 Author: Andres Loeh <[email protected]> Date: Sun Feb 12 13:43:22 2012 +0000 let --reinstall imply --force-reinstalls for targets >--------------------------------------------------------------- cabal-install/Distribution/Client/Install.hs | 30 +++++++++++++++++++------- 1 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs index 318d6f4..fae3f68 100644 --- a/cabal-install/Distribution/Client/Install.hs +++ b/cabal-install/Distribution/Client/Install.hs @@ -174,7 +174,8 @@ install verbosity packageDBs repos comp conf comp configFlags configExFlags installFlags installedPkgIndex sourcePkgDb pkgSpecifiers - checkPrintPlan verbosity installedPkgIndex installPlan installFlags solver + checkPrintPlan verbosity installedPkgIndex installPlan installFlags + pkgSpecifiers solver unless dryRun $ do installPlan' <- performInstallations verbosity @@ -289,11 +290,8 @@ planPackages comp configFlags configExFlags installFlags adjustPlanOnlyDeps :: InstallPlan -> Progress String String InstallPlan adjustPlanOnlyDeps = either (Fail . explain) Done - . InstallPlan.remove isTarget + . InstallPlan.remove (isTarget pkgSpecifiers) where - isTarget pkg = packageName pkg `elem` targetnames - targetnames = map pkgSpecifierTarget pkgSpecifiers - explain :: [InstallPlan.PlanProblem] -> String explain problems = "Cannot select only the dependencies (as requested by the " @@ -310,6 +308,9 @@ planPackages comp configFlags configExFlags installFlags , depid <- depids , packageName depid `elem` targetnames ] + targetnames = map pkgSpecifierTarget pkgSpecifiers + + solver = fromFlag (configSolver configExFlags) reinstall = fromFlag (installReinstall installFlags) reorderGoals = fromFlag (installReorderGoals installFlags) @@ -327,9 +328,10 @@ checkPrintPlan :: Verbosity -> PackageIndex -> InstallPlan -> InstallFlags + -> [PackageSpecifier SourcePackage] -> Solver -> IO () -checkPrintPlan verbosity installed installPlan installFlags solver = do +checkPrintPlan verbosity installed installPlan installFlags pkgSpecifiers solver = do when nothingToInstall $ notice verbosity $ @@ -338,7 +340,12 @@ checkPrintPlan verbosity installed installPlan installFlags solver = do ++ "the --reinstall flag." let lPlan = linearizeInstallPlan installed installPlan - let containsReinstalls = any (isReinstall . snd) lPlan + -- The following check is for packages contained in the install plan + -- that are destructive reinstalls. We exclude packages that are specified + -- targets as long as --reinstall is specified. + let containsReinstalls = any (\ (p, s) -> isReinstall s && + (not (reinstall && isTarget pkgSpecifiers p))) + lPlan let adaptedVerbosity | containsReinstalls = verbose `max` verbosity | otherwise = verbosity @@ -362,7 +369,9 @@ checkPrintPlan verbosity installed installPlan installFlags solver = do where nothingToInstall = null (InstallPlan.ready installPlan) - dryRun = fromFlag (installDryRun installFlags) + + reinstall = fromFlag (installReinstall installFlags) + dryRun = fromFlag (installDryRun installFlags) overrideReinstall = fromFlag (installOverrideReinstall installFlags) linearizeInstallPlan :: PackageIndex @@ -385,6 +394,11 @@ data PackageStatus = NewPackage type PackageChange = MergeResult PackageIdentifier PackageIdentifier +isTarget :: Package pkg => [PackageSpecifier SourcePackage] -> pkg -> Bool +isTarget pkgSpecifiers pkg = packageName pkg `elem` targetnames + where + targetnames = map pkgSpecifierTarget pkgSpecifiers + isReinstall :: PackageStatus -> Bool isReinstall (Reinstall _) = True isReinstall _ = False _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
