diff --git a/doc/manual/release-notes.xml b/doc/manual/release-notes.xml index 161643e52d..3b4525129d 100644 --- a/doc/manual/release-notes.xml +++ b/doc/manual/release-notes.xml @@ -72,8 +72,8 @@ TODO: nix-env . Specific flags: - active, - priority. + active, priority, + keep. nix-env -q now has a flag 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