aboutsummaryrefslogtreecommitdiff
path: root/src/nix-env/main.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-01-05 16:26:43 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-01-05 16:26:43 +0000
commit4a373a3e9ac07a2d4c43d495c0a44883106ecfde (patch)
tree27f4e22f8d3573bfe1ebba1acfa2e46a735fecee /src/nix-env/main.cc
parentf83c5e3e5f3e6b33c095d6559a4b3cd5922e88ce (diff)
* Implemented Eelco V.'s `nix-env -I' command to specify the default
path of the Nix expression to be used with the import, upgrade, and query commands. For instance, $ nix-env -I ~/nixpkgs/pkgs/system/i686-linux.nix $ nix-env --query --available [aka -qa] sylpheed-0.9.7 bison-1.875 pango-1.2.5 subversion-0.35.1 ... $ nix-env -i sylpheed $ nix-env -u subversion There can be only one default at a time. * If the path to a Nix expression is a symlink, follow the symlink prior to resolving relative path references in the expression.
Diffstat (limited to 'src/nix-env/main.cc')
-rw-r--r--src/nix-env/main.cc69
1 files changed, 49 insertions, 20 deletions
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 64ae6d412..f0877b058 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -11,6 +11,7 @@
struct Globals
{
Path linkPath;
+ Path nixExprPath;
EvalState state;
};
@@ -106,12 +107,26 @@ void loadDerivations(EvalState & state, Path nePath, DrvInfos & drvs)
}
+static Path getHomeDir()
+{
+ Path homeDir(getenv("HOME"));
+ if (homeDir == "") throw Error("HOME environment variable not set");
+ return homeDir;
+}
+
+
static Path getLinksDir()
{
return canonPath(nixStateDir + "/links");
}
+static Path getDefNixExprPath()
+{
+ return getHomeDir() + "/.nix-defexpr";
+}
+
+
void queryInstalled(EvalState & state, DrvInfos & drvs,
const Path & userEnv)
{
@@ -410,13 +425,11 @@ static void opInstall(Globals & globals,
{
if (opFlags.size() > 0)
throw UsageError(format("unknown flags `%1%'") % opFlags.front());
- if (opArgs.size() < 1) throw UsageError("Nix file expected");
- Path nePath = opArgs.front();
- DrvNames drvNames = drvNamesFromArgs(
- Strings(++opArgs.begin(), opArgs.end()));
+ DrvNames drvNames = drvNamesFromArgs(opArgs);
- installDerivations(globals.state, nePath, drvNames, globals.linkPath);
+ installDerivations(globals.state, globals.nixExprPath,
+ drvNames, globals.linkPath);
}
@@ -492,11 +505,10 @@ static void opUpgrade(Globals & globals,
throw UsageError(format("unknown flags `%1%'") % opFlags.front());
if (opArgs.size() < 1) throw UsageError("Nix file expected");
- Path nePath = opArgs.front();
- DrvNames drvNames = drvNamesFromArgs(
- Strings(++opArgs.begin(), opArgs.end()));
+ DrvNames drvNames = drvNamesFromArgs(opArgs);
- upgradeDerivations(globals.state, nePath, drvNames, globals.linkPath);
+ upgradeDerivations(globals.state, globals.nixExprPath,
+ drvNames, globals.linkPath);
}
@@ -547,7 +559,7 @@ static void opQuery(Globals & globals,
else if (*i == "--expr" || *i == "-e") query = qDrvPath;
else if (*i == "--status" || *i == "-s") query = qStatus;
else if (*i == "--installed") source = sInstalled;
- else if (*i == "--available" || *i == "-f") source = sAvailable;
+ else if (*i == "--available" || *i == "-a") source = sAvailable;
else throw UsageError(format("unknown flag `%1%'") % *i);
/* Obtain derivation information from the specified source. */
@@ -560,10 +572,7 @@ static void opQuery(Globals & globals,
break;
case sAvailable: {
- if (opArgs.size() < 1) throw UsageError("Nix file expected");
- Path nePath = opArgs.front();
- opArgs.pop_front();
- loadDerivations(globals.state, nePath, drvs);
+ loadDerivations(globals.state, globals.nixExprPath, drvs);
break;
}
@@ -611,17 +620,28 @@ static void opSwitchProfile(Globals & globals,
if (opFlags.size() > 0)
throw UsageError(format("unknown flags `%1%'") % opFlags.front());
if (opArgs.size() > 1)
- throw UsageError(format("--profile takes at most one argument"));
+ throw UsageError(format("`--profile' takes at most one argument"));
- string linkPath =
+ Path linkPath =
opArgs.size() == 0 ? globals.linkPath : opArgs.front();
+ Path linkPathFinal = getHomeDir() + "/.nix-userenv";
- string homeDir(getenv("HOME"));
- if (homeDir == "") throw Error("HOME environment variable not set");
+ switchLink(linkPathFinal, linkPath);
+}
- string linkPathFinal = homeDir + "/.nix-userenv";
+
+static void opDefaultExpr(Globals & globals,
+ Strings opFlags, Strings opArgs)
+{
+ if (opFlags.size() > 0)
+ throw UsageError(format("unknown flags `%1%'") % opFlags.front());
+ if (opArgs.size() != 1)
+ throw UsageError(format("`--import' takes exactly one argument"));
+
+ Path defNixExpr = opArgs.front();
+ Path defNixExprLink = getDefNixExprPath();
- switchLink(linkPathFinal, linkPath);
+ switchLink(defNixExprLink, defNixExpr);
}
@@ -635,6 +655,7 @@ void run(Strings args)
Globals globals;
globals.linkPath = getLinksDir() + "/current";
+ globals.nixExprPath = getDefNixExprPath();
for (Strings::iterator i = args.begin(); i != args.end(); ++i) {
string arg = *i;
@@ -649,12 +670,20 @@ void run(Strings args)
op = opUpgrade;
else if (arg == "--query" || arg == "-q")
op = opQuery;
+ else if (arg == "--import" || arg == "-I") /* !!! bad name */
+ op = opDefaultExpr;
else if (arg == "--link" || arg == "-l") {
++i;
if (i == args.end()) throw UsageError(
format("`%1%' requires an argument") % arg);
globals.linkPath = absPath(*i);
}
+ else if (arg == "--file" || arg == "-f") {
+ ++i;
+ if (i == args.end()) throw UsageError(
+ format("`%1%' requires an argument") % arg);
+ globals.nixExprPath = absPath(*i);
+ }
else if (arg == "--profile" || arg == "-p")
op = opSwitchProfile;
else if (arg[0] == '-')