* Support the --attr / -A flag in nix-env as well. So now we can do,
e.g., $ nix-env -i -A subversion xorg.xorgserver The main advantage over using symbolic names is that using attribute names is unambiguous and much, much faster.
This commit is contained in:
parent
7a3a5d1608
commit
5744dd5480
|
@ -69,6 +69,9 @@ irreversible.</para></warning>
|
||||||
<listitem><para>TODO: open files etc. are now used as roots of the
|
<listitem><para>TODO: open files etc. are now used as roots of the
|
||||||
garbage collector.</para></listitem>
|
garbage collector.</para></listitem>
|
||||||
|
|
||||||
|
<listitem><para>TODO: --attr / -a flags in
|
||||||
|
nix-env/nix-instantiate/nix-build.</para</listitem>
|
||||||
|
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -28,6 +28,15 @@ Install / upgrade / uninstall flags:
|
||||||
|
|
||||||
--dry-run: show what would be done, but don't do it
|
--dry-run: show what would be done, but don't do it
|
||||||
|
|
||||||
|
Installation sources:
|
||||||
|
|
||||||
|
--from-expression / -E EXPR...: evaluate expressions specified on
|
||||||
|
the command line; expressions should be functions that take the
|
||||||
|
default Nix expression as an argument
|
||||||
|
--from-profile PROFILE NAMES...: copy named packages from PROFILE
|
||||||
|
--attr / -A ATTRS...: select attributes by name from the default Nix
|
||||||
|
expression
|
||||||
|
|
||||||
Upgrade flags:
|
Upgrade flags:
|
||||||
|
|
||||||
--lt: upgrade if the current version is older (default)
|
--lt: upgrade if the current version is older (default)
|
||||||
|
|
|
@ -25,6 +25,7 @@ typedef enum {
|
||||||
srcNixExprs,
|
srcNixExprs,
|
||||||
srcStorePaths,
|
srcStorePaths,
|
||||||
srcProfile,
|
srcProfile,
|
||||||
|
srcAttrPath,
|
||||||
srcUnknown
|
srcUnknown
|
||||||
} InstallSourceType;
|
} InstallSourceType;
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ struct InstallSourceInfo
|
||||||
Path nixExprPath; /* for srcNixExprDrvs, srcNixExprs */
|
Path nixExprPath; /* for srcNixExprDrvs, srcNixExprs */
|
||||||
Path profile; /* for srcProfile */
|
Path profile; /* for srcProfile */
|
||||||
string systemFilter; /* for srcNixExprDrvs */
|
string systemFilter; /* for srcNixExprDrvs */
|
||||||
|
string attrPath; /* srcAttrPath */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -381,6 +383,14 @@ static void queryInstSources(EvalState & state,
|
||||||
args, newestOnly);
|
args, newestOnly);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case srcAttrPath: {
|
||||||
|
for (Strings::const_iterator i = args.begin();
|
||||||
|
i != args.end(); ++i)
|
||||||
|
getDerivations(state,
|
||||||
|
parseExprFromFile(state, instSource.nixExprPath), elems, *i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,7 +480,7 @@ static void opInstall(Globals & globals,
|
||||||
Strings opFlags, Strings opArgs)
|
Strings opFlags, Strings opArgs)
|
||||||
{
|
{
|
||||||
if (opFlags.size() > 0)
|
if (opFlags.size() > 0)
|
||||||
throw UsageError(format("unknown flags `%1%'") % opFlags.front());
|
throw UsageError(format("unknown flag `%1%'") % opFlags.front());
|
||||||
|
|
||||||
installDerivations(globals, opArgs, globals.profile);
|
installDerivations(globals, opArgs, globals.profile);
|
||||||
}
|
}
|
||||||
|
@ -606,7 +616,7 @@ static void opUninstall(Globals & globals,
|
||||||
Strings opFlags, Strings opArgs)
|
Strings opFlags, Strings opArgs)
|
||||||
{
|
{
|
||||||
if (opFlags.size() > 0)
|
if (opFlags.size() > 0)
|
||||||
throw UsageError(format("unknown flags `%1%'") % opFlags.front());
|
throw UsageError(format("unknown flag `%1%'") % opFlags.front());
|
||||||
|
|
||||||
DrvNames drvNames = drvNamesFromArgs(opArgs);
|
DrvNames drvNames = drvNamesFromArgs(opArgs);
|
||||||
|
|
||||||
|
@ -988,7 +998,7 @@ static void opDefaultExpr(Globals & globals,
|
||||||
Strings opFlags, Strings opArgs)
|
Strings opFlags, Strings opArgs)
|
||||||
{
|
{
|
||||||
if (opFlags.size() > 0)
|
if (opFlags.size() > 0)
|
||||||
throw UsageError(format("unknown flags `%1%'") % opFlags.front());
|
throw UsageError(format("unknown flag `%1%'") % opFlags.front());
|
||||||
if (opArgs.size() != 1)
|
if (opArgs.size() != 1)
|
||||||
throw UsageError(format("exactly one argument expected"));
|
throw UsageError(format("exactly one argument expected"));
|
||||||
|
|
||||||
|
@ -1040,6 +1050,8 @@ void run(Strings args)
|
||||||
globals.instSource.type = srcProfile;
|
globals.instSource.type = srcProfile;
|
||||||
globals.instSource.profile = needArg(i, args, arg);
|
globals.instSource.profile = needArg(i, args, arg);
|
||||||
}
|
}
|
||||||
|
else if (arg == "--attr" || arg == "-A")
|
||||||
|
globals.instSource.type = srcAttrPath;
|
||||||
else if (arg == "--uninstall" || arg == "-e")
|
else if (arg == "--uninstall" || arg == "-e")
|
||||||
op = opUninstall;
|
op = opUninstall;
|
||||||
else if (arg == "--upgrade" || arg == "-u")
|
else if (arg == "--upgrade" || arg == "-u")
|
||||||
|
|
Loading…
Reference in a new issue