From 73b163c1a10f2ce675d9fc3d7ad02fad4bc6511f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 11 Jul 2003 08:41:03 +0000 Subject: [PATCH] * 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). --- src/fix.cc | 2 +- src/store.cc | 13 ++++++------- src/store.hh | 3 ++- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/fix.cc b/src/fix.cc index 5c4297bfb7..445d682837 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(, Hash(), [])", dstPath.c_str(), ((string) hash).c_str()); } diff --git a/src/store.cc b/src/store.cc index 435ac5cc69..12de50ec64 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 8b41478a24..82fb2e12a1 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);