[Hackage] #474: cabal-install needlessly reinstalls an existing package
Hackage
cvs-ghc at haskell.org
Mon Apr 9 13:27:58 CEST 2012
#474: cabal-install needlessly reinstalls an existing package
---------------------------------+------------------------------------------
Reporter: judah | Owner: kosmikus
Type: defect | Status: new
Priority: high | Milestone: cabal-install-0.16
Component: cabal-install tool | Version: 1.6.0.1
Severity: normal | Keywords: solver
Difficulty: unknown | Ghcversion:
Platform: |
---------------------------------+------------------------------------------
Changes (by kosmikus):
* priority: normal => high
* milestone: cabal-install-0.14 => cabal-install-0.16
Comment:
Ok, I can reproduce a similar situation and it seems it's still handled as
described in this bug. Using an imaginary version `process-1.0.1.6` with
`ghc-7.0.4`, I get:
{{{
In order, the following would be installed:
Cabal-1.10.2.0 (reinstall) changes: process-1.0.1.5 -> 1.0.1.6
deepseq-1.3.0.0 (new package)
text-0.11.1.13 (new package)
transformers-0.2.2.0 (new package)
mtl-2.0.1.0 (new package)
parsec-3.1.2 (new package)
network-2.3.0.11 (new package)
HTTP-4000.2.2 (new package)
zlib-0.5.3.3 (new package)
cabal-install-0.10.2 -bytestring-in-base (new package)
Warning: The following packages are likely to be broken by the reinstalls:
ghc-7.0.4
bin-package-db-0.0.0.0
Use --force-reinstalls if you want to install anyway.
}}}
Using the modular solver does not help, as it's using the same policy to
pick the latest installed package by default, and doing this does not lead
to an error, only to a reinstallation -- although that reinstallation
breaks the `ghc` and `bin-package-db` packages.
We can fix this by using the `--avoid-reinstalls` flag. However, I don't
want to make that flag the default, because it may lead to confusing
install plans, as we can actually observe here:
{{{
In order, the following would be installed (use -v for more details):
Cabal-1.10.1.0
deepseq-1.3.0.0
text-0.11.1.13
transformers-0.2.2.0
mtl-2.0.1.0
parsec-3.1.2
network-2.3.0.11
HTTP-4000.2.2
zlib-0.5.3.3
cabal-install-0.10.2
}}}
Now, we get an older version of `Cabal`, which is also not what we really
want.
We get the "correct" solution by passing `--constraint="process ==
1.0.1.5":
{{{
Resolving dependencies...
In order, the following would be installed (use -v for more details):
deepseq-1.3.0.0
text-0.11.1.13
transformers-0.2.2.0
mtl-2.0.1.0
parsec-3.1.2
network-2.3.0.11
HTTP-4000.2.2
zlib-0.5.3.3
cabal-install-0.10.2
}}}
One option to fix problems like this one would be to actually try to find
several install plans for a given problem and try to pick the "best".
Picking an older uninstalled version should have a higher penalty as
picking an older installed version.
--
Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/474#comment:10>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects
More information about the cabal-devel
mailing list