1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-30 15:48:00 +02:00

* By default, `nix-env -i' now deletes previously installed

derivations with names matching the derivations being installed.
  The option `--preserve-installed / -P' overrides this behaviour.
This commit is contained in:
Eelco Dolstra 2004-06-28 14:40:26 +00:00
parent 4d2946c516
commit 151e61fa5a
2 changed files with 58 additions and 3 deletions

View file

@ -17,6 +17,7 @@ struct Globals
Path nixExprPath;
EvalState state;
bool dryRun;
bool preserveInstalled;
};
@ -225,7 +226,7 @@ void createUserEnv(EvalState & state, const DrvInfos & drvs,
static void installDerivations(EvalState & state,
Path nePath, DrvNames & selectors, const Path & profile,
bool dryRun)
bool dryRun, bool preserveInstalled)
{
debug(format("installing derivations from `%1%'") % nePath);
@ -235,6 +236,7 @@ static void installDerivations(EvalState & state,
/* Filter out the ones we're not interested in. */
DrvInfos selectedDrvs;
StringSet selectedNames;
for (DrvInfos::iterator i = availDrvs.begin();
i != availDrvs.end(); ++i)
{
@ -247,6 +249,7 @@ static void installDerivations(EvalState & state,
format("installing `%1%'") % i->second.name);
j->hits++;
selectedDrvs.insert(*i);
selectedNames.insert(drvName.name);
}
}
}
@ -261,7 +264,18 @@ static void installDerivations(EvalState & state,
/* Add in the already installed derivations. */
DrvInfos installedDrvs;
queryInstalled(state, installedDrvs, profile);
selectedDrvs.insert(installedDrvs.begin(), installedDrvs.end());
for (DrvInfos::iterator i = installedDrvs.begin();
i != installedDrvs.end(); ++i)
{
DrvName drvName(i->second.name);
if (!preserveInstalled &&
selectedNames.find(drvName.name) != selectedNames.end())
printMsg(lvlInfo,
format("uninstalling `%1%'") % i->second.name);
else
selectedDrvs.insert(*i);
}
if (dryRun) return;
@ -278,7 +292,8 @@ static void opInstall(Globals & globals,
DrvNames drvNames = drvNamesFromArgs(opArgs);
installDerivations(globals.state, globals.nixExprPath,
drvNames, globals.profile, globals.dryRun);
drvNames, globals.profile, globals.dryRun,
globals.preserveInstalled);
}
@ -641,6 +656,7 @@ void run(Strings args)
Globals globals;
globals.nixExprPath = getDefNixExprPath();
globals.dryRun = false;
globals.preserveInstalled = false;
for (Strings::iterator i = args.begin(); i != args.end(); ++i) {
string arg = *i;
@ -681,6 +697,8 @@ void run(Strings args)
printMsg(lvlInfo, "(dry run; not doing anything)");
globals.dryRun = true;
}
else if (arg == "--preserve-installed" || arg == "-P")
globals.preserveInstalled = true;
else if (arg[0] == '-')
opFlags.push_back(arg);
else