From 7d203faff6d74d839324cd082236381d20444d8e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 20 Dec 2013 13:56:42 +0100 Subject: [PATCH] nix-env --set-flag: Barf if a selector doesn't match any installed package Fixes #184. --- src/nix-env/nix-env.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc index cf74747da..b42fe97eb 100644 --- a/src/nix-env/nix-env.cc +++ b/src/nix-env/nix-env.cc @@ -233,6 +233,15 @@ static bool isPrebuilt(EvalState & state, DrvInfo & elem) } +static void checkSelectorUse(DrvNames & selectors) +{ + /* Check that all selectors have been used. */ + foreach (DrvNames::iterator, i, selectors) + if (i->hits == 0 && i->fullName != "*") + throw Error(format("selector `%1%' matches no derivations") % i->fullName); +} + + static DrvInfos filterBySelector(EvalState & state, const DrvInfos & allElems, const Strings & args, bool newestOnly) { @@ -315,11 +324,7 @@ static DrvInfos filterBySelector(EvalState & state, const DrvInfos & allElems, } } - /* Check that all selectors have been used. */ - foreach (DrvNames::iterator, i, selectors) - if (i->hits == 0 && i->fullName != "*") - throw Error(format("selector `%1%' matches no derivations") - % i->fullName); + checkSelectorUse(selectors); return elems; } @@ -673,11 +678,14 @@ static void opSetFlag(Globals & globals, foreach (DrvNames::iterator, j, selectors) if (j->matches(drvName)) { printMsg(lvlInfo, format("setting flag on `%1%'") % i->name); + j->hits++; setMetaFlag(globals.state, *i, flagName, flagValue); break; } } + checkSelectorUse(selectors); + /* Write the new user environment. */ if (createUserEnv(globals.state, installedElems, globals.profile, settings.envKeepDerivations, lockToken)) break;