about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/manual/release-notes.xml27
-rw-r--r--src/nix-env/main.cc27
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")