about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2007-04-26T14·20+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2007-04-26T14·20+0000
commitb7f0f65c1934851b038826b2ab78c0378a36143a (patch)
tree3712f11db4838e8ba0ce898d71244982b60b028d
parent5dc05b76ab88a332521a777d6a42974b3f432f02 (diff)
* nix-env -q now has a flag --prebuilt-only (-b<) that causes nix-env
  to show only those derivations whose output is already in the Nix
  store or that can be substituted (i.e., downloaded from somewhere).
  In other words, it shows the packages that can be installed “quickly”,
  i.e., don’t need to be built from source.

-rw-r--r--doc/manual/release-notes.xml9
-rw-r--r--src/nix-env/help.txt14
-rw-r--r--src/nix-env/nix-env.cc8
3 files changed, 25 insertions, 6 deletions
diff --git a/doc/manual/release-notes.xml b/doc/manual/release-notes.xml
index 4830b323efba..e5d0adf74bef 100644
--- a/doc/manual/release-notes.xml
+++ b/doc/manual/release-notes.xml
@@ -74,6 +74,15 @@
   <option>--set-flag</option>.</para></listitem>
   
 
+  <listitem><para><command>nix-env -q</command> now has a flag
+  <option>--prebuilt-only</option> (<option>-b</option>) that causes
+  <command>nix-env</command> to show only those derivations whose
+  output is already in the Nix store or that can be substituted (i.e.,
+  downloaded from somewhere).  In other words, it shows the packages
+  that can be installed “quickly”, i.e., don’t need to be built from
+  source.</para></listitem>
+  
+
   <listitem><para>TODO: new built-ins
   <function>builtins.attrNames</function>,
   <function>builtins.filterSource</function>,
diff --git a/src/nix-env/help.txt b/src/nix-env/help.txt
index 534d16ad3c56..16e47a73e3ac 100644
--- a/src/nix-env/help.txt
+++ b/src/nix-env/help.txt
@@ -45,7 +45,12 @@ Upgrade flags:
   --eq: "upgrade" if the current version is equal
   --always: upgrade regardless of current version
 
-Query types:
+Query sources:
+
+  --installed: use installed derivations (default)
+  --available / -a: use derivations available in Nix expression
+
+Query flags:
 
   --status / -s: print installed/present status
   --no-name: hide derivation names
@@ -55,11 +60,8 @@ Query types:
   --compare-versions / -c: compare version to available or installed
   --drv-path: print path of derivation
   --out-path: print path of derivation output
-
-Query sources:
-
-  --installed: use installed derivations (default)
-  --available / -a: use derivations available in Nix expression
+  --prebuilt-only: only show derivations whose prebuilt binaries are
+      available on this machine or are downloadable
 
 Options:
 
diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc
index 5dab2e60b2d0..77b7881711e4 100644
--- a/src/nix-env/nix-env.cc
+++ b/src/nix-env/nix-env.cc
@@ -831,6 +831,7 @@ static void opQuery(Globals & globals,
     bool printDrvPath = false;
     bool printOutPath = false;
     bool printDescription = false;
+    bool prebuiltOnly = false;
     bool compareVersions = false;
     bool xmlOutput = false;
 
@@ -849,6 +850,7 @@ static void opQuery(Globals & globals,
         else if (*i == "--out-path") printOutPath = true;
         else if (*i == "--installed") source = sInstalled;
         else if (*i == "--available" || *i == "-a") source = sAvailable;
+        else if (*i == "--prebuilt-only" || *i == "-b") prebuiltOnly = true;
         else if (*i == "--xml") xmlOutput = true;
         else throw UsageError(format("unknown flag `%1%'") % *i);
 
@@ -914,6 +916,12 @@ static void opQuery(Globals & globals,
 
             /* For XML output. */
             XMLAttrs attrs;
+
+            if (prebuiltOnly) {
+                if (!store->isValidPath(i->queryOutPath(globals.state)) &&
+                    !store->hasSubstitutes(i->queryOutPath(globals.state)))
+                    continue;
+            }
         
             if (printStatus) {
                 bool hasSubs = store->hasSubstitutes(i->queryOutPath(globals.state));