1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-05 16:31:47 +02:00

Implement alternative to lazy generations:

* only the last generation can be lazy
* depend on the '--lazy-generation' flag to be set
This commit is contained in:
Christian Theune 2015-05-19 20:03:36 +02:00
parent 3d83188702
commit ea39c98d41
6 changed files with 39 additions and 21 deletions

View file

@ -58,6 +58,7 @@ struct Globals
bool removeAll;
string forceName;
bool prebuiltOnly;
bool lazyGeneration;
};
@ -510,7 +511,7 @@ static void installDerivations(Globals & globals,
if (globals.dryRun) return;
if (createUserEnv(*globals.state, allElems,
profile, settings.envKeepDerivations, lockToken)) break;
profile, settings.envKeepDerivations, lockToken, globals.lazyGeneration)) break;
}
}
@ -524,6 +525,8 @@ static void opInstall(Globals & globals, Strings opFlags, Strings opArgs)
globals.preserveInstalled = true;
else if (arg == "--remove-all" || arg == "-r")
globals.removeAll = true;
else if (arg == "--lazy-generation")
globals.lazyGeneration = true;
else throw UsageError(format("unknown flag %1%") % arg);
}
@ -617,7 +620,7 @@ static void upgradeDerivations(Globals & globals,
if (globals.dryRun) return;
if (createUserEnv(*globals.state, newElems,
globals.profile, settings.envKeepDerivations, lockToken)) break;
globals.profile, settings.envKeepDerivations, lockToken, globals.lazyGeneration)) break;
}
}
@ -681,7 +684,7 @@ static void opSetFlag(Globals & globals, Strings opFlags, Strings opArgs)
/* Write the new user environment. */
if (createUserEnv(*globals.state, installedElems,
globals.profile, settings.envKeepDerivations, lockToken)) break;
globals.profile, settings.envKeepDerivations, lockToken, globals.lazyGeneration)) break;
}
}
@ -718,7 +721,8 @@ static void opSet(Globals & globals, Strings opFlags, Strings opArgs)
}
debug(format("switching to new user environment"));
Path generation = createGeneration(globals.profile, drv.queryOutPath());
Path generation = createGeneration(globals.profile, drv.queryOutPath(),
globals.lazyGeneration);
switchLink(globals.profile, generation);
}
@ -751,7 +755,7 @@ static void uninstallDerivations(Globals & globals, Strings & selectors,
if (globals.dryRun) return;
if (createUserEnv(*globals.state, newElems,
profile, settings.envKeepDerivations, lockToken)) break;
profile, settings.envKeepDerivations, lockToken, globals.lazyGeneration)) break;
}
}
@ -1355,6 +1359,7 @@ int main(int argc, char * * argv)
globals.preserveInstalled = false;
globals.removeAll = false;
globals.prebuiltOnly = false;
globals.lazyGeneration = false;
parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {
Operation oldOp = op;