about summary refs log tree commit diff
path: root/src/nix/log.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix/log.cc')
-rw-r--r--src/nix/log.cc26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/nix/log.cc b/src/nix/log.cc
index ba5e71c10a08..15ae61d08ccb 100644
--- a/src/nix/log.cc
+++ b/src/nix/log.cc
@@ -24,23 +24,25 @@ struct CmdLog : InstallableCommand
 
     void run(ref<Store> store) override
     {
+        settings.readOnlyMode = true;
+
         auto subs = getDefaultSubstituters();
 
         subs.push_front(store);
 
-        for (auto & b : installable->toBuildable(true)) {
-
-            for (auto & sub : subs) {
-                auto log = b.second.drvPath != "" ? sub->getBuildLog(b.second.drvPath) : nullptr;
-                if (!log) {
-                    log = sub->getBuildLog(b.first);
-                    if (!log) continue;
-                }
-                stopProgressBar();
-                printInfo("got build log for '%s' from '%s'", b.first, sub->getUri());
-                std::cout << *log;
-                return;
+        auto b = installable->toBuildable();
+
+        for (auto & sub : subs) {
+            auto log = b.drvPath != "" ? sub->getBuildLog(b.drvPath) : nullptr;
+            for (auto & output : b.outputs) {
+                if (log) break;
+                log = sub->getBuildLog(output.second);
             }
+            if (!log) continue;
+            stopProgressBar();
+            printInfo("got build log for '%s' from '%s'", installable->what(), sub->getUri());
+            std::cout << *log;
+            return;
         }
 
         throw Error("build log of '%s' is not available", installable->what());