aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/local-store.cc10
-rw-r--r--tests/local.mk1
-rw-r--r--tests/nix-copy-ssh-ng.sh18
3 files changed, 29 insertions, 0 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 40a3bc194..17b4ecc73 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1196,6 +1196,15 @@ void LocalStore::addToStore(const ValidPathInfo & info, Source & source,
if (checkSigs && pathInfoIsUntrusted(info))
throw Error("cannot add path '%s' because it lacks a signature by a trusted key", printStorePath(info.path));
+ /* In case we are not interested in reading the NAR: discard it. */
+ bool narRead = false;
+ Finally cleanup = [&]() {
+ if (!narRead) {
+ ParseSink sink;
+ parseDump(sink, source);
+ }
+ };
+
addTempRoot(info.path);
if (repair || !isValidPath(info.path)) {
@@ -1220,6 +1229,7 @@ void LocalStore::addToStore(const ValidPathInfo & info, Source & source,
TeeSource wrapperSource { source, hashSink };
+ narRead = true;
restorePath(realPath, wrapperSource);
auto hashResult = hashSink.finish();
diff --git a/tests/local.mk b/tests/local.mk
index 2afe91220..4edf31303 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -90,6 +90,7 @@ nix_tests = \
zstd.sh \
compression-levels.sh \
nix-copy-ssh.sh \
+ nix-copy-ssh-ng.sh \
post-hook.sh \
function-trace.sh \
flakes/config.sh \
diff --git a/tests/nix-copy-ssh-ng.sh b/tests/nix-copy-ssh-ng.sh
new file mode 100644
index 000000000..45e53c9c0
--- /dev/null
+++ b/tests/nix-copy-ssh-ng.sh
@@ -0,0 +1,18 @@
+source common.sh
+
+clearStore
+clearCache
+
+remoteRoot=$TEST_ROOT/store2
+chmod -R u+w "$remoteRoot" || true
+rm -rf "$remoteRoot"
+
+outPath=$(nix-build --no-out-link dependencies.nix)
+
+nix store ping --store "ssh-ng://localhost?store=$NIX_STORE_DIR&remote-store=$remoteRoot%3fstore=$NIX_STORE_DIR%26real=$remoteRoot$NIX_STORE_DIR"
+
+# Regression test for https://github.com/NixOS/nix/issues/6253
+nix copy --to "ssh-ng://localhost?store=$NIX_STORE_DIR&remote-store=$remoteRoot%3fstore=$NIX_STORE_DIR%26real=$remoteRoot$NIX_STORE_DIR" $outPath --no-check-sigs &
+nix copy --to "ssh-ng://localhost?store=$NIX_STORE_DIR&remote-store=$remoteRoot%3fstore=$NIX_STORE_DIR%26real=$remoteRoot$NIX_STORE_DIR" $outPath --no-check-sigs
+
+[ -f $remoteRoot$outPath/foobar ]