* Package flag "keep" that prevents a package from being removed from

a user environment by an install or upgrade action.  This is
  particularly useful if you have a version installed that you don't
  want to upgrade (e.g., because the newer versions are broken).
  Example:

    $ nix-env -u zapping --dry-run
    (dry run; not doing anything)
    upgrading `zapping-0.9.6' to `zapping-0.10cvs6'

    $ nix-env --set-flag keep true zapping

    $ nix-env -u zapping --dry-run
    (dry run; not doing anything)

  However, "-e" will still uninstall the package.  (Maybe we should
  require the keep flag to be explicitly set to false before it can be
  uninstalled.)
This commit is contained in:
Eelco Dolstra 2007-04-27 23:48:14 +00:00
parent a46db5d013
commit 89c1d2b202
2 changed files with 8 additions and 3 deletions

View file

@ -72,8 +72,8 @@
<listitem><para>TODO: <command>nix-env</command> <listitem><para>TODO: <command>nix-env</command>
<option>--set-flag</option>. Specific flags: <option>--set-flag</option>. Specific flags:
<literal>active</literal>, <literal>active</literal>, <literal>priority</literal>,
<literal>priority</literal>.</para></listitem> <literal>keep</literal>.</para></listitem>
<listitem><para><command>nix-env -q</command> now has a flag <listitem><para><command>nix-env -q</command> now has a flag

View file

@ -482,8 +482,10 @@ static void installDerivations(Globals & globals,
i != installedElems.end(); ++i) i != installedElems.end(); ++i)
{ {
DrvName drvName(i->name); DrvName drvName(i->name);
MetaInfo meta = i->queryMetaInfo(globals.state);
if (!globals.preserveInstalled && if (!globals.preserveInstalled &&
newNames.find(drvName.name) != newNames.end()) newNames.find(drvName.name) != newNames.end() &&
meta["keep"] == "true")
printMsg(lvlInfo, printMsg(lvlInfo,
format("replacing old `%1%'") % i->name); format("replacing old `%1%'") % i->name);
else else
@ -543,6 +545,9 @@ static void upgradeDerivations(Globals & globals,
{ {
DrvName drvName(i->name); DrvName drvName(i->name);
MetaInfo meta = i->queryMetaInfo(globals.state);
if (meta["keep"] == "true") continue;
/* Find the derivation in the input Nix expression with the /* Find the derivation in the input Nix expression with the
same name and satisfying the version constraints specified same name and satisfying the version constraints specified
by upgradeType. If there are multiple matches, take the by upgradeType. If there are multiple matches, take the