From 89c1d2b202dccbf91c40586ac33efee515f7e93d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 27 Apr 2007 23:48:14 +0000 Subject: * 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.) --- src/nix-env/nix-env.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc index 77b7881711..1a4d8ee587 100644 --- a/src/nix-env/nix-env.cc +++ b/src/nix-env/nix-env.cc @@ -482,8 +482,10 @@ static void installDerivations(Globals & globals, i != installedElems.end(); ++i) { DrvName drvName(i->name); + MetaInfo meta = i->queryMetaInfo(globals.state); if (!globals.preserveInstalled && - newNames.find(drvName.name) != newNames.end()) + newNames.find(drvName.name) != newNames.end() && + meta["keep"] == "true") printMsg(lvlInfo, format("replacing old `%1%'") % i->name); else @@ -543,6 +545,9 @@ static void upgradeDerivations(Globals & globals, { 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 same name and satisfying the version constraints specified by upgradeType. If there are multiple matches, take the -- cgit 1.4.1