about summary refs log tree commit diff
path: root/src/store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-07-11T08·41+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-07-11T08·41+0000
commit73b163c1a10f2ce675d9fc3d7ad02fad4bc6511f (patch)
treeb792dbda63b1ebefb1d71b0d50c0fc8c6af759d0 /src/store.cc
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).

Diffstat (limited to 'src/store.cc')
-rw-r--r--src/store.cc13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/store.cc b/src/store.cc
index 435ac5cc69ce..12de50ec6424 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);
 }