aboutsummaryrefslogtreecommitdiff
path: root/src/nix-env
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-07-25 11:53:22 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-07-25 11:53:22 +0000
commit5744dd548039b9a8666a414dcb66629322e5af21 (patch)
treeecae6153bee7c028bce7e978875a15984f18fe1c /src/nix-env
parent7a3a5d1608254565030ae8ceb593605962a2614e (diff)
* 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.
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/help.txt9
-rw-r--r--src/nix-env/main.cc18
2 files changed, 24 insertions, 3 deletions
diff --git a/src/nix-env/help.txt b/src/nix-env/help.txt
index e83194774..3287bab28 100644
--- a/src/nix-env/help.txt
+++ b/src/nix-env/help.txt
@@ -28,6 +28,15 @@ Install / upgrade / uninstall flags:
--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:
--lt: upgrade if the current version is older (default)
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 400bb0d87..633c85b61 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -25,6 +25,7 @@ typedef enum {
srcNixExprs,
srcStorePaths,
srcProfile,
+ srcAttrPath,
srcUnknown
} InstallSourceType;
@@ -35,6 +36,7 @@ struct InstallSourceInfo
Path nixExprPath; /* for srcNixExprDrvs, srcNixExprs */
Path profile; /* for srcProfile */
string systemFilter; /* for srcNixExprDrvs */
+ string attrPath; /* srcAttrPath */
};
@@ -381,6 +383,14 @@ static void queryInstSources(EvalState & state,
args, newestOnly);
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)
{
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);
}
@@ -606,7 +616,7 @@ static void opUninstall(Globals & globals,
Strings opFlags, Strings opArgs)
{
if (opFlags.size() > 0)
- throw UsageError(format("unknown flags `%1%'") % opFlags.front());
+ throw UsageError(format("unknown flag `%1%'") % opFlags.front());
DrvNames drvNames = drvNamesFromArgs(opArgs);
@@ -988,7 +998,7 @@ static void opDefaultExpr(Globals & globals,
Strings opFlags, Strings opArgs)
{
if (opFlags.size() > 0)
- throw UsageError(format("unknown flags `%1%'") % opFlags.front());
+ throw UsageError(format("unknown flag `%1%'") % opFlags.front());
if (opArgs.size() != 1)
throw UsageError(format("exactly one argument expected"));
@@ -1040,6 +1050,8 @@ void run(Strings args)
globals.instSource.type = srcProfile;
globals.instSource.profile = needArg(i, args, arg);
}
+ else if (arg == "--attr" || arg == "-A")
+ globals.instSource.type = srcAttrPath;
else if (arg == "--uninstall" || arg == "-e")
op = opUninstall;
else if (arg == "--upgrade" || arg == "-u")