mirror of
https://github.com/NixOS/nix
synced 2025-07-07 18:31:49 +02:00
Merge pull request #12275 from andrewhamon/ah/set-priority-nix-env-install
nix-env: add a --priority flag to --install
This commit is contained in:
commit
17b6557c03
3 changed files with 39 additions and 14 deletions
|
@ -501,9 +501,17 @@ static bool keep(PackageInfo & drv)
|
|||
return drv.queryMetaBool("keep", false);
|
||||
}
|
||||
|
||||
static void setMetaFlag(EvalState & state, PackageInfo & drv,
|
||||
const std::string & name, const std::string & value)
|
||||
{
|
||||
auto v = state.allocValue();
|
||||
v->mkString(value);
|
||||
drv.setMeta(name, v);
|
||||
}
|
||||
|
||||
|
||||
static void installDerivations(Globals & globals,
|
||||
const Strings & args, const Path & profile)
|
||||
const Strings & args, const Path & profile, std::optional<int> priority)
|
||||
{
|
||||
debug("installing derivations");
|
||||
|
||||
|
@ -527,6 +535,11 @@ static void installDerivations(Globals & globals,
|
|||
newNames.insert(DrvName(i.queryName()).name);
|
||||
}
|
||||
|
||||
if (priority) {
|
||||
for (auto & drv : newElems) {
|
||||
setMetaFlag(*globals.state, drv, "priority", std::to_string((priority.value())));
|
||||
}
|
||||
}
|
||||
|
||||
while (true) {
|
||||
auto lockToken = optimisticLockProfile(profile);
|
||||
|
@ -564,6 +577,7 @@ static void installDerivations(Globals & globals,
|
|||
|
||||
static void opInstall(Globals & globals, Strings opFlags, Strings opArgs)
|
||||
{
|
||||
std::optional<int> priority;
|
||||
for (Strings::iterator i = opFlags.begin(); i != opFlags.end(); ) {
|
||||
auto arg = *i++;
|
||||
if (parseInstallSourceOptions(globals, i, opFlags, arg)) ;
|
||||
|
@ -571,10 +585,17 @@ 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 == "--priority") {
|
||||
if (i == opFlags.end())
|
||||
throw UsageError("'%1%' requires an argument", arg);
|
||||
priority = string2Int<int>(*i++);
|
||||
if (!priority)
|
||||
throw UsageError("'--priority' requires an integer argument");
|
||||
}
|
||||
else throw UsageError("unknown flag '%1%'", arg);
|
||||
}
|
||||
|
||||
installDerivations(globals, opArgs, globals.profile);
|
||||
installDerivations(globals, opArgs, globals.profile, priority);
|
||||
}
|
||||
|
||||
|
||||
|
@ -689,15 +710,6 @@ static void opUpgrade(Globals & globals, Strings opFlags, Strings opArgs)
|
|||
}
|
||||
|
||||
|
||||
static void setMetaFlag(EvalState & state, PackageInfo & drv,
|
||||
const std::string & name, const std::string & value)
|
||||
{
|
||||
auto v = state.allocValue();
|
||||
v->mkString(value);
|
||||
drv.setMeta(name, v);
|
||||
}
|
||||
|
||||
|
||||
static void opSetFlag(Globals & globals, Strings opFlags, Strings opArgs)
|
||||
{
|
||||
if (opFlags.size() > 0)
|
||||
|
@ -1507,7 +1519,8 @@ static int main_nix_env(int argc, char * * argv)
|
|||
opFlags.push_back(*arg);
|
||||
/* FIXME: hacky */
|
||||
if (*arg == "--from-profile" ||
|
||||
(op == opQuery && (*arg == "--attr" || *arg == "-A")))
|
||||
(op == opQuery && (*arg == "--attr" || *arg == "-A")) ||
|
||||
(op == opInstall && (*arg == "--priority")))
|
||||
opFlags.push_back(getArg(*arg, arg, end));
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue