Skip to content

Commit

Permalink
Rename and rearrange the PackagePreferences type
Browse files Browse the repository at this point in the history
  • Loading branch information
dcoutts committed Dec 15, 2008
1 parent a0d25ef commit 619d1ce
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 32 deletions.
25 changes: 15 additions & 10 deletions Distribution/Client/Dependency.hs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import Distribution.Client.Types
( UnresolvedDependency(..), AvailablePackage(..) )
import Distribution.Client.Dependency.Types
( DependencyResolver
, PackagePreference(..), PackageInstalledPreference(..)
, PackagePreferences(..), InstalledPreference(..)
, Progress(..), foldProgress )
import Distribution.Package
( PackageIdentifier(..), PackageName(..), packageVersion, packageName
Expand Down Expand Up @@ -187,17 +187,22 @@ dependencyResolver resolver platform comp installed available pref deps =
--
interpretPackagesPreference :: Set PackageName
-> PackagesPreference
-> (PackageName -> PackagePreference)
-> (PackageName -> PackagePreferences)
interpretPackagesPreference selected
(PackagesPreference installPref versionPref) = case installPref of
PreferAllLatest -> PackagePreference PreferLatest . versionPref
PreferAllInstalled -> PackagePreference PreferInstalled . versionPref
PreferLatestForSelected -> \pkgname ->
-- When you say cabal install foo, what you really mean is, prefer the
-- latest version of foo, but the installed version of everything else:
if pkgname `Set.member` selected
then PackagePreference PreferLatest (versionPref pkgname)
else PackagePreference PreferInstalled (versionPref pkgname)

PreferAllLatest -> \pkgname ->
PackagePreferences (versionPref pkgname) PreferLatest

PreferAllInstalled -> \pkgname ->
PackagePreferences (versionPref pkgname) PreferInstalled

PreferLatestForSelected -> \pkgname ->
-- When you say cabal install foo, what you really mean is, prefer the
-- latest version of foo, but the installed version of everything else:
if pkgname `Set.member` selected
then PackagePreferences (versionPref pkgname) PreferLatest
else PackagePreferences (versionPref pkgname) PreferInstalled

-- | Given the list of installed packages and available packages, figure
-- out which packages can be upgraded.
Expand Down
16 changes: 8 additions & 8 deletions Distribution/Client/Dependency/TopDown.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import Distribution.Client.Types
( UnresolvedDependency(..), AvailablePackage(..)
, ConfiguredPackage(..) )
import Distribution.Client.Dependency.Types
( DependencyResolver, PackagePreference(..)
, PackageInstalledPreference(..)
( DependencyResolver
, PackagePreferences(..), InstalledPreference(..)
, Progress(..), foldProgress )

import qualified Distribution.Simple.PackageIndex as PackageIndex
Expand Down Expand Up @@ -86,7 +86,7 @@ data SearchSpace inherited pkg
-- * Traverse a search tree
-- ------------------------------------------------------------

explore :: (PackageName -> PackagePreference)
explore :: (PackageName -> PackagePreferences)
-> SearchSpace (SelectedPackages, Constraints, SelectionChanges)
SelectablePackage
-> Progress Log Failure (SelectedPackages, Constraints)
Expand Down Expand Up @@ -116,7 +116,7 @@ explore pref (ChoiceNode _ choices) =
isInstalled (AvailableOnly _) = False
isInstalled _ = True
isPreferred p = packageVersion p `withinRange` preferredVersions
(PackagePreference packageInstalledPreference preferredVersions)
(PackagePreferences preferredVersions packageInstalledPreference)
= pref pkgname

logInfo node = Select selected discarded
Expand Down Expand Up @@ -209,7 +209,7 @@ constrainDeps pkg (dep:deps) cs discard =
-- ------------------------------------------------------------

search :: ConfigurePackage
-> (PackageName -> PackagePreference)
-> (PackageName -> PackagePreferences)
-> Constraints
-> Set PackageName
-> Progress Log Failure (SelectedPackages, Constraints)
Expand All @@ -234,7 +234,7 @@ topDownResolver = (((((mapMessages .).).).).) . topDownResolver'
topDownResolver' :: Platform -> CompilerId
-> PackageIndex InstalledPackageInfo
-> PackageIndex AvailablePackage
-> (PackageName -> PackagePreference)
-> (PackageName -> PackagePreferences)
-> [UnresolvedDependency]
-> Progress Log Failure [PlanPackage]
topDownResolver' platform comp installed available pref deps =
Expand Down Expand Up @@ -400,7 +400,7 @@ selectNeededSubset installed available = select mempty mempty
-- * Post processing the solution
-- ------------------------------------------------------------

finaliseSelectedPackages :: (PackageName -> PackagePreference)
finaliseSelectedPackages :: (PackageName -> PackagePreferences)
-> SelectedPackages
-> Constraints
-> [PlanPackage]
Expand Down Expand Up @@ -440,7 +440,7 @@ finaliseSelectedPackages pref selected constraints =
-- Is this package a preferred version acording to the hackage or
-- user's suggested version constraints
isPreferred p = packageVersion p `withinRange` preferredVersions
where (PackagePreference _ preferredVersions) = pref (packageName p)
where (PackagePreferences preferredVersions _) = pref (packageName p)

-- | Improve an existing installation plan by, where possible, swapping
-- packages we plan to install with ones that are already installed.
Expand Down
20 changes: 6 additions & 14 deletions Distribution/Client/Dependency/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
module Distribution.Client.Dependency.Types (
DependencyResolver,

PackagePreference(..),
PackageVersionPreference,
PackageInstalledPreference(..),
PackagePreferences(..),
InstalledPreference(..),

Progress(..),
foldProgress,
Expand Down Expand Up @@ -52,33 +51,26 @@ type DependencyResolver = Platform
-> CompilerId
-> PackageIndex InstalledPackageInfo
-> PackageIndex AvailablePackage
-> (PackageName -> PackagePreference)
-> (PackageName -> PackagePreferences)
-> [UnresolvedDependency]
-> Progress String String [InstallPlan.PlanPackage]

-- | A per-package preference on the version. It is a soft constraint that the
-- 'DependencyResolver' should try to respect where possible. It consists of
-- a 'PackageInstalledPreference' which says if we prefer versions of packages
-- a 'InstalledPreference' which says if we prefer versions of packages
-- that are already installed. It also hase a 'PackageVersionPreference' which
-- is a suggested constraint on the version number. The resolver should try to
-- use package versions that satisfy the suggested version constraint.
--
-- It is not specified if preferences on some packages are more important than
-- others.
--
data PackagePreference = PackagePreference
PackageInstalledPreference
PackageVersionPreference

-- | A suggested constraint on the version number. The resolver should try to
-- use package versions that satisfy the suggested version constraint.
--
type PackageVersionPreference = VersionRange
data PackagePreferences = PackagePreferences VersionRange InstalledPreference

-- | Wether we prefer an installed version of a package or simply the latest
-- version.
--
data PackageInstalledPreference = PreferInstalled | PreferLatest
data InstalledPreference = PreferInstalled | PreferLatest

-- | A type to represent the unfolding of an expensive long running
-- calculation that may fail. We may get intermediate steps before the final
Expand Down

0 comments on commit 619d1ce

Please sign in to comment.