* Fixed a bug in the upgrade operation.

This commit is contained in:
Eelco Dolstra 2003-12-23 22:13:36 +00:00
parent 833f2fc92d
commit 392b7e0f8e
1 changed files with 13 additions and 11 deletions

View File

@ -439,6 +439,7 @@ static void upgradeDerivations(EvalState & state,
loadDerivations(state, nePath, availDrvs);
/* Go through all installed derivations. */
DrvInfos newDrvs;
for (DrvInfos::iterator i = installedDrvs.begin();
i != installedDrvs.end(); ++i)
{
@ -455,31 +456,32 @@ static void upgradeDerivations(EvalState & state,
break;
}
}
if (!upgrade) continue;
/* If yes, find the derivation in the input Nix expression
with the same name and the highest version number. */
DrvInfos::iterator bestDrv = i;
DrvName bestName = drvName;
for (DrvInfos::iterator j = availDrvs.begin();
j != availDrvs.end(); ++j)
{
DrvName newName(j->second.name);
if (newName.name == bestName.name &&
compareVersions(newName.version, bestName.version) > 0)
bestDrv = j;
if (upgrade) {
for (DrvInfos::iterator j = availDrvs.begin();
j != availDrvs.end(); ++j)
{
DrvName newName(j->second.name);
if (newName.name == bestName.name &&
compareVersions(newName.version, bestName.version) > 0)
bestDrv = j;
}
}
if (bestDrv != i) {
printMsg(lvlInfo,
format("upgrading `%1%' to `%2%'")
% i->second.name % bestDrv->second.name);
installedDrvs.erase(i);
installedDrvs.insert(*bestDrv);
}
newDrvs.insert(*bestDrv);
}
createUserEnv(state, installedDrvs, linkPath);
createUserEnv(state, newDrvs, linkPath);
}