* 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:
Eelco Dolstra 2006-07-25 11:53:22 +00:00
parent 7a3a5d1608
commit 5744dd5480
3 changed files with 27 additions and 3 deletions

View file

@ -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>

View file

@ -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)

View file

@ -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")