about summary refs log tree commit diff
diff options
context:
space:
mode:
-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));