aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-07-11 08:41:03 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-07-11 08:41:03 +0000
commit73b163c1a10f2ce675d9fc3d7ad02fad4bc6511f (patch)
treeb792dbda63b1ebefb1d71b0d50c0fc8c6af759d0
parentc834a5c5975b9a62413b4aa9446f73d1c573c909 (diff)
* Fix a bug that caused Fix not to be deterministic (due to addToStore
returning different paths if the hash of the path to be added was already available in the store under a different name).
-rw-r--r--src/fix.cc2
-rw-r--r--src/store.cc13
-rw-r--r--src/store.hh3
3 files changed, 9 insertions, 9 deletions
diff --git a/src/fix.cc b/src/fix.cc
index 5c4297bfb..445d68283 100644
--- a/src/fix.cc
+++ b/src/fix.cc
@@ -131,7 +131,7 @@ static Expr evalExpr(Expr e)
string srcPath = searchPath(s1);
string dstPath;
Hash hash;
- addToStore(srcPath, dstPath, hash);
+ addToStore(srcPath, dstPath, hash, true);
return ATmake("Path(<str>, Hash(<str>), [])",
dstPath.c_str(), ((string) hash).c_str());
}
diff --git a/src/store.cc b/src/store.cc
index 435ac5cc6..12de50ec6 100644
--- a/src/store.cc
+++ b/src/store.cc
@@ -224,24 +224,23 @@ string expandHash(const Hash & hash, const string & target,
}
-void addToStore(string srcPath, string & dstPath, Hash & hash)
+void addToStore(string srcPath, string & dstPath, Hash & hash,
+ bool deterministicName)
{
srcPath = absPath(srcPath);
-
hash = hashPath(srcPath);
+ string baseName = baseNameOf(srcPath);
+ dstPath = canonPath(nixStore + "/" + (string) hash + "-" + baseName);
+
try {
/* !!! should not use the substitutes! */
- dstPath = expandHash(hash, "", nixStore);
+ dstPath = expandHash(hash, deterministicName ? dstPath : "", nixStore);
return;
} catch (...) {
}
- string baseName = baseNameOf(srcPath);
- dstPath = canonPath(nixStore + "/" + (string) hash + "-" + baseName);
-
copyPath(srcPath, dstPath);
-
registerPath(dstPath, hash);
}
diff --git a/src/store.hh b/src/store.hh
index 8b41478a2..82fb2e12a 100644
--- a/src/store.hh
+++ b/src/store.hh
@@ -30,7 +30,8 @@ string expandHash(const Hash & hash, const string & target = "",
/* Copy a file to the nixStore directory and register it in dbRefs.
Return the hash code of the value. */
-void addToStore(string srcPath, string & dstPath, Hash & hash);
+void addToStore(string srcPath, string & dstPath, Hash & hash,
+ bool deterministicName = false);
/* Delete a value from the nixStore directory. */
void deleteFromStore(const string & path);