about summary refs log tree commit diff
path: root/src/libmain
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2008-08-04T13·44+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2008-08-04T13·44+0000
commita1d310b6b5c710215265c1cd0d5893248ed50f92 (patch)
treebf35d52f339ee027fc749bb63cc3d2bbe5a23f49 /src/libmain
parent42043953c3558f054dc5b9bb3da605a4a3ed6314 (diff)
* `nix-store --realise': print what paths will be built/downloaded,
  just like nix-env.
* `nix-store --realise': --dry-run option.

Diffstat (limited to 'src/libmain')
-rw-r--r--src/libmain/shared.cc29
-rw-r--r--src/libmain/shared.hh2
2 files changed, 31 insertions, 0 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 5a8f600e8d..fd16dece7d 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -4,6 +4,7 @@
 #include "globals.hh"
 #include "store-api.hh"
 #include "util.hh"
+#include "misc.hh"
 
 #include <iostream>
 #include <cctype>
@@ -49,6 +50,34 @@ void printGCWarning()
 }
 
 
+void printMissing(const PathSet & paths)
+{
+    unsigned long long downloadSize;
+    PathSet willBuild, willSubstitute, unknown;
+    queryMissing(paths, willBuild, willSubstitute, unknown, downloadSize);
+
+    if (!willBuild.empty()) {
+        printMsg(lvlInfo, format("the following derivations will be built:"));
+        foreach (PathSet::iterator, i, willBuild)
+            printMsg(lvlInfo, format("  %1%") % *i);
+    }
+
+    if (!willSubstitute.empty()) {
+        printMsg(lvlInfo, format("the following paths will be downloaded/copied (%.2f MiB):") %
+            (downloadSize / (1024.0 * 1024.0)));
+        foreach (PathSet::iterator, i, willSubstitute)
+            printMsg(lvlInfo, format("  %1%") % *i);
+    }
+
+    if (!unknown.empty()) {
+        printMsg(lvlInfo, format("don't know how to build the following paths%1%:")
+            % (readOnlyMode ? " (may be caused by read-only store access)" : ""));
+        foreach (PathSet::iterator, i, unknown)
+            printMsg(lvlInfo, format("  %1%") % *i);
+    }
+}
+
+
 static void setLogType(string lt)
 {
     if (lt == "pretty") logType = ltPretty;
diff --git a/src/libmain/shared.hh b/src/libmain/shared.hh
index 95d80bacda..c432dc5f7b 100644
--- a/src/libmain/shared.hh
+++ b/src/libmain/shared.hh
@@ -26,6 +26,8 @@ namespace nix {
 Path makeRootName(const Path & gcRoot, int & counter);
 void printGCWarning();
 
+void printMissing(const PathSet & paths);
+
 unsigned long long getIntArg(const string & opt,
     Strings::iterator & i, const Strings::iterator & end);