diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-02-21 16:23:25 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-02-21 16:23:25 +0000 |
commit | dc7d59477613e88b18133208f6c8b2f646e66260 (patch) | |
tree | d0d2c6be0202a8e79c5ddd5eb955998721d45449 /src/libstore | |
parent | 43c4d18c6a4e1a8b129114439718e26c12b49ca8 (diff) |
* importPath(): set the deriver.
* exportPath(): lock the path, use a transaction.
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/local-store.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index a7c9d5811..ab1f4682c 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(); } |