From dc7d59477613e88b18133208f6c8b2f646e66260 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 21 Feb 2007 16:23:25 +0000 Subject: [PATCH] * importPath(): set the deriver. * exportPath(): lock the path, use a transaction. --- src/libstore/local-store.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index a7c9d58117..ab1f4682ca 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -723,6 +723,13 @@ void LocalStore::exportPath(const Path & path, bool sign, { assertStorePath(path); + /* Wrap all of this in a transaction to make sure that we export + consistent metadata. */ + Transaction txn(nixDB); + addTempRoot(path); + if (!isValidPath(path)) + throw Error(format("path `%1%' is not valid") % path); + HashAndWriteSink hashAndWriteSink(sink); dumpPath(path, hashAndWriteSink); @@ -732,10 +739,10 @@ void LocalStore::exportPath(const Path & path, bool sign, writeString(path, hashAndWriteSink); PathSet references; - queryReferences(path, references); + nix::queryReferences(txn, path, references); writeStringSet(references, hashAndWriteSink); - Path deriver = queryDeriver(noTxn, path); + Path deriver = queryDeriver(txn, path); writeString(deriver, hashAndWriteSink); if (sign) { @@ -762,6 +769,8 @@ void LocalStore::exportPath(const Path & path, bool sign, } else writeInt(0, hashAndWriteSink); + + txn.commit(); } @@ -862,8 +871,9 @@ Path LocalStore::importPath(bool requireSignature, Source & source) Transaction txn(nixDB); /* !!! if we were clever, we could prevent the hashPath() here. */ + if (!isValidPath(deriver)) deriver = ""; registerValidPath(txn, dstPath, - hashPath(htSHA256, dstPath), references, ""); + hashPath(htSHA256, dstPath), references, deriver); txn.commit(); }