From 28648ed78413c9a681501e37473cfebe39bedb1b Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Tue, 31 Jan 2023 13:24:23 +0100 Subject: [PATCH 1/5] nix store ping: add --json flag --- src/nix/ping-store.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/nix/ping-store.cc b/src/nix/ping-store.cc index 3c3b7bb45..0d7a75075 100644 --- a/src/nix/ping-store.cc +++ b/src/nix/ping-store.cc @@ -2,9 +2,11 @@ #include "shared.hh" #include "store-api.hh" +#include + using namespace nix; -struct CmdPingStore : StoreCommand +struct CmdPingStore : StoreCommand, MixJSON { std::string description() override { @@ -20,10 +22,19 @@ struct CmdPingStore : StoreCommand void run(ref store) override { - notice("Store URL: %s", store->getUri()); - store->connect(); - if (auto version = store->getVersion()) - notice("Version: %s", *version); + if (!json) { + notice("Store URL: %s", store->getUri()); + store->connect(); + if (auto version = store->getVersion()) + notice("Version: %s", *version); + } else { + nlohmann::json res; + res["url"] = store->getUri(); + store->connect(); + if (auto version = store->getVersion()) + res["version"] = *version; + logger->cout("%s", res); + } } }; From 4f4a6074e41bb635bc35ac14000b11d341536650 Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Tue, 31 Jan 2023 15:10:39 +0100 Subject: [PATCH 2/5] nix store ping: try to print json if connect() fails aswell --- src/nix/ping-store.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/nix/ping-store.cc b/src/nix/ping-store.cc index 0d7a75075..5c44510ab 100644 --- a/src/nix/ping-store.cc +++ b/src/nix/ping-store.cc @@ -1,6 +1,7 @@ #include "command.hh" #include "shared.hh" #include "store-api.hh" +#include "finally.hh" #include @@ -29,11 +30,13 @@ struct CmdPingStore : StoreCommand, MixJSON notice("Version: %s", *version); } else { nlohmann::json res; + Finally printRes([&]() { + logger->cout("%s", res); + }); res["url"] = store->getUri(); store->connect(); if (auto version = store->getVersion()) res["version"] = *version; - logger->cout("%s", res); } } }; From 4757b3f04e0a4568ab40ab86b9251945874a5662 Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Tue, 31 Jan 2023 15:10:54 +0100 Subject: [PATCH 3/5] tests/store-ping: test nix store ping --json --- tests/store-ping.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/store-ping.sh b/tests/store-ping.sh index f9427cf0a..9846c7d3d 100644 --- a/tests/store-ping.sh +++ b/tests/store-ping.sh @@ -1,13 +1,17 @@ source common.sh STORE_INFO=$(nix store ping 2>&1) +STORE_INFO_JSON=$(nix store ping --json) echo "$STORE_INFO" | grep "Store URL: ${NIX_REMOTE}" if [[ -v NIX_DAEMON_PACKAGE ]] && isDaemonNewer "2.7.0pre20220126"; then DAEMON_VERSION=$($NIX_DAEMON_PACKAGE/bin/nix-daemon --version | cut -d' ' -f3) echo "$STORE_INFO" | grep "Version: $DAEMON_VERSION" + [[ "$(echo "$STORE_INFO_JSON" | jq -r ".version")" == "$DAEMON_VERSION" ]] fi expect 127 NIX_REMOTE=unix:$PWD/store nix store ping || \ fail "nix store ping on a non-existent store should fail" + +[[ "$(echo "$STORE_INFO_JSON" | jq -r ".url")" == "${NIX_REMOTE:-local}" ]] From 57a4258426260da9faf8c1ffd003edac330d50b8 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 1 Feb 2023 20:27:35 +0100 Subject: [PATCH 4/5] Remove an unused capture --- src/libstore/store-api.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index 31bd9318f..601efa1cc 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -744,7 +744,7 @@ StorePathSet Store::queryValidPaths(const StorePathSet & paths, SubstituteFlag m auto doQuery = [&](const StorePath & path) { checkInterrupt(); - queryPathInfo(path, {[path, this, &state_, &wakeup](std::future> fut) { + queryPathInfo(path, {[path, &state_, &wakeup](std::future> fut) { auto state(state_.lock()); try { auto info = fut.get(); From e8ca49f6efeb54a9e1ed624f658e6790a3121ac9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 1 Feb 2023 20:34:44 +0100 Subject: [PATCH 5/5] Fix clang compilation --- src/libexpr/flake/lockfile.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libexpr/flake/lockfile.cc b/src/libexpr/flake/lockfile.cc index a3ed90e1f..a74e68c9c 100644 --- a/src/libexpr/flake/lockfile.cc +++ b/src/libexpr/flake/lockfile.cc @@ -219,7 +219,7 @@ std::optional LockFile::isUnlocked() const visit(root); for (auto & i : nodes) { - if (i == root) continue; + if (i == ref(root)) continue; auto node = i.dynamic_pointer_cast(); if (node && !node->lockedRef.input.isLocked()) return node->lockedRef;