* importPath(): set the deriver.

* exportPath(): lock the path, use a transaction.
This commit is contained in:
Eelco Dolstra 2007-02-21 16:23:25 +00:00
parent 43c4d18c6a
commit dc7d594776

View file

@ -723,6 +723,13 @@ void LocalStore::exportPath(const Path & path, bool sign,
{ {
assertStorePath(path); 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); HashAndWriteSink hashAndWriteSink(sink);
dumpPath(path, hashAndWriteSink); dumpPath(path, hashAndWriteSink);
@ -732,10 +739,10 @@ void LocalStore::exportPath(const Path & path, bool sign,
writeString(path, hashAndWriteSink); writeString(path, hashAndWriteSink);
PathSet references; PathSet references;
queryReferences(path, references); nix::queryReferences(txn, path, references);
writeStringSet(references, hashAndWriteSink); writeStringSet(references, hashAndWriteSink);
Path deriver = queryDeriver(noTxn, path); Path deriver = queryDeriver(txn, path);
writeString(deriver, hashAndWriteSink); writeString(deriver, hashAndWriteSink);
if (sign) { if (sign) {
@ -762,6 +769,8 @@ void LocalStore::exportPath(const Path & path, bool sign,
} else } else
writeInt(0, hashAndWriteSink); writeInt(0, hashAndWriteSink);
txn.commit();
} }
@ -862,8 +871,9 @@ Path LocalStore::importPath(bool requireSignature, Source & source)
Transaction txn(nixDB); Transaction txn(nixDB);
/* !!! if we were clever, we could prevent the hashPath() /* !!! if we were clever, we could prevent the hashPath()
here. */ here. */
if (!isValidPath(deriver)) deriver = "";
registerValidPath(txn, dstPath, registerValidPath(txn, dstPath,
hashPath(htSHA256, dstPath), references, ""); hashPath(htSHA256, dstPath), references, deriver);
txn.commit(); txn.commit();
} }