Mis-read Eelko's request to not make this an option: now, let's not make

it an option. :)
This commit is contained in:
Christian Theune 2015-05-20 17:29:52 +02:00
parent ea39c98d41
commit 12a888894b
6 changed files with 16 additions and 30 deletions

View file

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

View file

@ -74,7 +74,7 @@ static void makeName(const Path & profile, unsigned int num,
} }
Path createGeneration(Path profile, Path outPath, bool lazy) Path createGeneration(Path profile, Path outPath)
{ {
/* The new generation number should be higher than old the /* The new generation number should be higher than old the
previous ones. */ previous ones. */
@ -85,9 +85,9 @@ Path createGeneration(Path profile, Path outPath, bool lazy)
if (gens.size() > 0) { if (gens.size() > 0) {
Generation last = gens.back(); Generation last = gens.back();
if (lazy && readLink(last.path) == outPath) { if (readLink(last.path) == outPath) {
/* If lazy generations are enabled then we only create a /* We only create a new generation symlink if it differs
new generation symlink if it differs from the last one. from the last one.
This helps keeping gratuitous installs/rebuilds from piling This helps keeping gratuitous installs/rebuilds from piling
up uncontrolled numbers of generations, cluttering up the up uncontrolled numbers of generations, cluttering up the

View file

@ -31,7 +31,7 @@ typedef list<Generation> Generations;
profile, sorted by generation number. */ profile, sorted by generation number. */
Generations findGenerations(Path profile, int & curGen); Generations findGenerations(Path profile, int & curGen);
Path createGeneration(Path profile, Path outPath, bool lazy); Path createGeneration(Path profile, Path outPath);
void deleteGeneration(const Path & profile, unsigned int gen); void deleteGeneration(const Path & profile, unsigned int gen);

View file

@ -28,7 +28,7 @@ DrvInfos queryInstalled(EvalState & state, const Path & userEnv)
bool createUserEnv(EvalState & state, DrvInfos & elems, bool createUserEnv(EvalState & state, DrvInfos & elems,
const Path & profile, bool keepDerivations, const Path & profile, bool keepDerivations,
const string & lockToken, bool lazyGeneration) const string & lockToken)
{ {
/* Build the components in the user environment, if they don't /* Build the components in the user environment, if they don't
exist already. */ exist already. */
@ -141,7 +141,7 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
} }
debug(format("switching to new user environment")); debug(format("switching to new user environment"));
Path generation = createGeneration(profile, topLevelOut, lazyGeneration); Path generation = createGeneration(profile, topLevelOut);
switchLink(profile, generation); switchLink(profile, generation);
return true; return true;

View file

@ -8,6 +8,6 @@ DrvInfos queryInstalled(EvalState & state, const Path & userEnv);
bool createUserEnv(EvalState & state, DrvInfos & elems, bool createUserEnv(EvalState & state, DrvInfos & elems,
const Path & profile, bool keepDerivations, const Path & profile, bool keepDerivations,
const string & lockToken, bool lazyGeneration); const string & lockToken);
} }

View file

@ -99,25 +99,16 @@ if nix-env -q '*' | grep -q bar; then false; fi
nix-env --list-generations nix-env --list-generations
test "$(nix-env --list-generations | wc -l)" -eq 7 test "$(nix-env --list-generations | wc -l)" -eq 7
# Doing the same operation twice results in the same generation, but creates an # Doing the same operation twice results in the same generation, which triggers
# additional one. At this point we just brought back foo. # "lazy" behaviour and does not create a new symlink.
nix-env -i foo
nix-env -i foo nix-env -i foo
# Count generations. # Count generations.
nix-env --list-generations nix-env --list-generations
test "$(nix-env --list-generations | wc -l)" -eq 8 test "$(nix-env --list-generations | wc -l)" -eq 8
# Now, doing that again but passing the --lazy-generations flag will not
# create a new generation.
nix-env -i foo --lazy-generation
# Count generations.
nix-env --list-generations
test "$(nix-env --list-generations | wc -l)" -eq 8
# Switch to a specified generation. # Switch to a specified generation.
nix-env --switch-generation 7 nix-env --switch-generation 7
[ "$(nix-store -q --resolve $profiles/test)" = "$oldGen" ] [ "$(nix-store -q --resolve $profiles/test)" = "$oldGen" ]