[Hackage] #197: implement cabal upgrade (installs new versions
of all packages)
Hackage
trac at galois.com
Tue Jan 1 16:21:20 EST 2008
#197: implement cabal upgrade (installs new versions of all packages)
---------------------------------+------------------------------------------
Reporter: ijones | Owner:
Type: defect | Status: closed
Priority: normal | Milestone:
Component: cabal-install tool | Version: 1.2.3.0
Severity: normal | Resolution: fixed
Keywords: | Difficulty: normal
Ghcversion: 6.8.2 | Platform: Linux
---------------------------------+------------------------------------------
Comment (by duncan):
I'm glad this is in, I just want to think about the user interface for a
moment; for these variations on installing/upgrading stuff, what mix of
top level commands or modifying flags they should use.
So at the moment the behaviour is:
{{{
cabal install foo
}}}
means install the package foo only if it is not already installed. If a
newer version is available it is ignored. Though if someone specifies
{{{cabal install foo-1.1}}} then that really will be installed, even if
foo-1.0 is installed already. This is probably not what most people want
(see #168 & #198).
{{{
cabal upgrade
}}}
means upgrade all upgradable packages. Presumably we upgrade them in
dependency order.
There are more variations that people would probably like so the question
is, what variations, and how should the user interface allow those things
to be expressed.
One data point that I am familiar with is gentoo's package manager. It has
a number of variations:
{{{
emerge foo
}}}
means install or re-install package foo. So if a newer one is available,
that newer one will be installed. This is the behaviur that bugs #168 &
#198 are asking for. If foo is already installed and no later version is
available then it is re-installed. The default behavior is not to upgrade
dependencies of foo even if updates are available, that is we
install/upgrade the minimum number of packages necessary to install the
package requested.
{{{
emerge foo --update
}}}
changes the behavior so that foo is not re-installed if it is already
installed. Remember the default behavior was to reinstall foo if it was
the latest version.
This is probably the most controversial behasvour. It'd make a lot of
sense to reverse the default of this mode and make --update the default
and have something like --force-reinstall to re-install the same version
that is already installed.
{{{
emerge foo --deep
}}}
This modifies the behaviour to also update dependencies. So this updates
the maximal number of packages that are used directly or indirectly by
package foo.
There are also a couple meta-packages. One {{{emerge world}}} which is all
packages that have ever been explicitly requested (ie not including
packages that were merely dependencies of requested packages). That detail
is probably not necessary, but we could do with an everything target.
So in this gentoo semantics, we'd express the new upgrade command by
{{{
emerge world --update --deep
}}}
--
Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/197#comment:3>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects
More information about the cabal-devel
mailing list