diff options
-rw-r--r-- | doc/manual/release-notes.xml | 27 | ||||
-rw-r--r-- | src/nix-env/main.cc | 27 |
2 files changed, 37 insertions, 17 deletions
diff --git a/doc/manual/release-notes.xml b/doc/manual/release-notes.xml index 1ebef331eb6f..3ad9e1de0a6a 100644 --- a/doc/manual/release-notes.xml +++ b/doc/manual/release-notes.xml @@ -47,8 +47,8 @@ irreversible.</para></warning> <literal>references</literal> table (i.e., it tells you what store paths refer to a given path). Maintaining this table could take a quadratic amount of time, as well as a quadratic amount of Berkeley - DB log file space (in particular when running the garbage - collector).</para></listitem> + DB log file space (in particular when running the garbage collector) + (<literal>NIX-23</literal>).</para></listitem> <listitem><para>Nix now catches the <literal>TERM</literal> and <literal>HUP</literal> signals in addition to the @@ -85,7 +85,8 @@ irreversible.</para></warning> (<literal>~</literal>) has been deprecated.</para></listitem> <listitem><para>TODO: function argument default values can refer - to other function arguments</para></listitem> + to other function arguments + (<literal>NIX-45</literal>)</para></listitem> <listitem><para>TODO: domain checks (r5895).</para></listitem> @@ -148,7 +149,18 @@ irreversible.</para></warning> <itemizedlist> <listitem><para>Make sure that the garbage collector can run - succesfully when the disk is full.</para></listitem> + succesfully when the disk is full + (<literal>NIX-18</literal>).</para></listitem> + + <listitem><para><command>nix-env</command> now locks the profile + to prevent races between concurrent <command>nix-env</command> + operations on the same profile + (<literal>NIX-7</literal>).</para></listitem> + + <listitem><para>Removed misleading messages from + <literal>nix-env -i</literal> (e.g., <literal>installing + `foo'</literal> followed by <literal>uninstalling + `foo'</literal>) (<literal>NIX-17</literal>).</para></listitem> </itemizedlist> @@ -162,7 +174,7 @@ irreversible.</para></warning> <replaceable>pkgname</replaceable></literal> will now install the highest available version of <replaceable>pkgname</replaceable>, rather than installing all available versions (which would probably - give collisions).</para></listitem> + give collisions) (<literal>NIX-31</literal>).</para></listitem> <listitem><para><literal>nix-env (-i|-u) --dry-run</literal> now shows exactly which missing paths will be built or @@ -185,11 +197,6 @@ irreversible.</para></warning> <literal>i686-cygwin</literal>) and Mac OS X on Intel (<literal>i686-darwin</literal>).</para></listitem> - <listitem><para><command>nix-env</command> now locks the profile to - prevent races between concurrent <command>nix-env</command> - operations on the same profile - (<literal>NIX-7</literal>).</para></listitem> - <listitem><para>TODO: <literal>nix-push --target</literal>.</para></listitem> diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc index 0fb115533f18..284730c04293 100644 --- a/src/nix-env/main.cc +++ b/src/nix-env/main.cc @@ -39,6 +39,8 @@ struct InstallSourceInfo Path nixExprPath; /* for srcNixExprDrvs, srcNixExprs */ Path profile; /* for srcProfile */ string systemFilter; /* for srcNixExprDrvs */ + ATermMap autoArgs; + InstallSourceInfo() : autoArgs(128) { }; }; @@ -64,10 +66,10 @@ void printHelp() static void loadDerivations(EvalState & state, Path nixExprPath, - string systemFilter, DrvInfos & elems) + string systemFilter, const ATermMap & autoArgs, DrvInfos & elems) { getDerivations(state, - parseExprFromFile(state, absPath(nixExprPath)), "", ATermMap(1), elems); + parseExprFromFile(state, absPath(nixExprPath)), "", autoArgs, elems); /* Filter out all derivations not applicable to the current system. */ @@ -312,7 +314,7 @@ static void queryInstSources(EvalState & state, Nix expression. */ DrvInfos allElems; loadDerivations(state, instSource.nixExprPath, - instSource.systemFilter, allElems); + instSource.systemFilter, instSource.autoArgs, allElems); elems = filterBySelector(state, allElems, args, newestOnly); @@ -336,7 +338,7 @@ static void queryInstSources(EvalState & state, { Expr e2 = parseExprFromString(state, *i, absPath(".")); Expr call = makeCall(e2, e1); - getDerivations(state, call, "", ATermMap(1), elems); + getDerivations(state, call, "", instSource.autoArgs, elems); } break; @@ -390,9 +392,9 @@ static void queryInstSources(EvalState & state, for (Strings::const_iterator i = args.begin(); i != args.end(); ++i) getDerivations(state, - findAlongAttrPath(state, *i, + findAlongAttrPath(state, *i, instSource.autoArgs, parseExprFromFile(state, instSource.nixExprPath)), - "", ATermMap(1), elems); + "", instSource.autoArgs, elems); break; } } @@ -772,7 +774,8 @@ static void opQuery(Globals & globals, if (source == sAvailable || compareVersions) { loadDerivations(globals.state, globals.instSource.nixExprPath, - globals.instSource.systemFilter, availElems); + globals.instSource.systemFilter, globals.instSource.autoArgs, + availElems); } DrvInfos elems = filterBySelector(globals.state, @@ -1115,6 +1118,16 @@ void run(Strings args) } else if (arg == "--attr" || arg == "-A") globals.instSource.type = srcAttrPath; + else if (arg == "--arg") { /* !!! code duplication from nix-instantiate */ + i++; + if (i == args.end()) + throw UsageError("`--arg' requires two arguments"); + string name = *i++; + if (i == args.end()) + throw UsageError("`--arg' requires two arguments"); + Expr value = parseExprFromString(globals.state, *i, absPath(".")); + globals.instSource.autoArgs.set(toATerm(name), value); + } else if (arg == "--uninstall" || arg == "-e") op = opUninstall; else if (arg == "--upgrade" || arg == "-u") |