about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2008-12-03T16·10+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2008-12-03T16·10+0000
commitff762fb499be220ccd680f3bf68dca44a902a5ff (patch)
tree02f738ec60517e3eadd5b0a2bc2fe5c19c3d954c
parent1307b222239da8e503d22ad9316789e30b4e2431 (diff)
* Pass HashType values instead of strings.
-rw-r--r--src/libexpr/primops.cc6
-rw-r--r--src/libstore/local-store.cc6
-rw-r--r--src/libstore/local-store.hh2
-rw-r--r--src/libstore/remote-store.cc6
-rw-r--r--src/libstore/remote-store.hh2
-rw-r--r--src/libstore/store-api.cc11
-rw-r--r--src/libstore/store-api.hh6
-rw-r--r--src/libutil/hash.cc9
-rw-r--r--src/libutil/hash.hh3
-rw-r--r--src/nix-store/nix-store.cc6
-rw-r--r--src/nix-worker/nix-worker.cc2
11 files changed, 36 insertions, 23 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 657c3bf71b..7d179da8ec 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -400,7 +400,7 @@ static Expr prim_derivationStrict(EvalState & state, const ATermVector & args)
                 % outputHash % outputHashAlgo);
         string s = outputHash;
         outputHash = printHash(h);
-        outPath = makeFixedOutputPath(outputHashRecursive, outputHashAlgo, h, drvName);
+        outPath = makeFixedOutputPath(outputHashRecursive, ht, h, drvName);
         if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
     }
 
@@ -634,8 +634,8 @@ static Expr prim_filterSource(EvalState & state, const ATermVector & args)
     FilterFromExpr filter(state, args[0]);
 
     Path dstPath = readOnlyMode
-        ? computeStorePathForPath(path, true, "sha256", filter).first
-        : store->addToStore(path, true, "sha256", filter);
+        ? computeStorePathForPath(path, true, htSHA256, filter).first
+        : store->addToStore(path, true, htSHA256, filter);
 
     return makeStr(dstPath, singleton<PathSet>(dstPath));
 }
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index fc62a99930..bb53caacc5 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -656,7 +656,7 @@ void LocalStore::invalidatePath(const Path & path)
 
 
 Path LocalStore::addToStore(const Path & _srcPath,
-    bool recursive, string hashAlgo, PathFilter & filter)
+    bool recursive, HashType hashAlgo, PathFilter & filter)
 {
     Path srcPath(absPath(_srcPath));
     debug(format("adding `%1%' to the store") % srcPath);
@@ -670,7 +670,7 @@ Path LocalStore::addToStore(const Path & _srcPath,
     else
         sink.s = readFile(srcPath);
 
-    Hash h = hashString(parseHashType(hashAlgo), sink.s);
+    Hash h = hashString(hashAlgo, sink.s);
 
     Path dstPath = makeFixedOutputPath(recursive, hashAlgo, h, baseNameOf(srcPath));
 
@@ -700,7 +700,7 @@ Path LocalStore::addToStore(const Path & _srcPath,
                above (if called with recursive == true and hashAlgo ==
                sha256); otherwise, compute it here. */
             registerValidPath(dstPath,
-                (recursive && hashAlgo == "sha256") ? h :
+                (recursive && hashAlgo == htSHA256) ? h :
                 (recursive ? hashString(htSHA256, sink.s) : hashPath(htSHA256, dstPath)),
                 PathSet(), "");
         }
diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh
index 3d47446f6e..77e46fc3cc 100644
--- a/src/libstore/local-store.hh
+++ b/src/libstore/local-store.hh
@@ -90,7 +90,7 @@ public:
         const Path & path, SubstitutablePathInfo & info);
     
     Path addToStore(const Path & srcPath,
-        bool recursive = true, string hashAlgo = "sha256",
+        bool recursive = true, HashType hashAlgo = htSHA256,
         PathFilter & filter = defaultPathFilter);
 
     Path addTextToStore(const string & name, const string & s,
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index f79b22310b..d83d501ee2 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -279,16 +279,16 @@ Path RemoteStore::queryDeriver(const Path & path)
 
 
 Path RemoteStore::addToStore(const Path & _srcPath,
-    bool recursive, string hashAlgo, PathFilter & filter)
+    bool recursive, HashType hashAlgo, PathFilter & filter)
 {
     Path srcPath(absPath(_srcPath));
     
     writeInt(wopAddToStore, to);
     writeString(baseNameOf(srcPath), to);
     /* backwards compatibility hack */
-    writeInt((hashAlgo == "sha256" && recursive) ? 0 : 1, to);
+    writeInt((hashAlgo == htSHA256 && recursive) ? 0 : 1, to);
     writeInt(recursive ? 1 : 0, to);
-    writeString(hashAlgo, to);
+    writeString(printHashType(hashAlgo), to);
     dumpPath(srcPath, to, filter);
     processStderr();
     return readStorePath(from);
diff --git a/src/libstore/remote-store.hh b/src/libstore/remote-store.hh
index cb9124a4cd..717da73772 100644
--- a/src/libstore/remote-store.hh
+++ b/src/libstore/remote-store.hh
@@ -43,7 +43,7 @@ public:
         SubstitutablePathInfo & info);
     
     Path addToStore(const Path & srcPath,
-        bool recursive = true, string hashAlgo = "sha256",
+        bool recursive = true, HashType hashAlgo = htSHA256,
         PathFilter & filter = defaultPathFilter);
 
     Path addTextToStore(const string & name, const string & s,
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index fe4ecfad54..bd330a6da9 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -183,20 +183,21 @@ Path makeStorePath(const string & type,
 
 
 Path makeFixedOutputPath(bool recursive,
-    string hashAlgo, Hash hash, string name)
+    HashType hashAlgo, Hash hash, string name)
 {
-    return hashAlgo == "sha256" && recursive
+    return hashAlgo == htSHA256 && recursive
         ? makeStorePath("source", hash, name)
         : makeStorePath("output:out", hashString(htSHA256,
-                "fixed:out:" + (recursive ? (string) "r:" : "") + hashAlgo + ":" + printHash(hash) + ":"),
+                "fixed:out:" + (recursive ? (string) "r:" : "") +
+                printHashType(hashAlgo) + ":" + printHash(hash) + ":"),
             name);
 }
 
 
 std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
-    bool recursive, string hashAlgo, PathFilter & filter)
+    bool recursive, HashType hashAlgo, PathFilter & filter)
 {
-    HashType ht(parseHashType(hashAlgo));
+    HashType ht(hashAlgo);
     Hash h = recursive ? hashPath(ht, srcPath, filter) : hashFile(ht, srcPath);
     string name = baseNameOf(srcPath);
     Path dstPath = makeFixedOutputPath(recursive, hashAlgo, h, name);
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index adfd40a919..1c6f737285 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -174,7 +174,7 @@ public:
        object `filter' can be used to exclude files (see
        libutil/archive.hh). */
     virtual Path addToStore(const Path & srcPath,
-        bool recursive = true, string hashAlgo = "sha256",
+        bool recursive = true, HashType hashAlgo = htSHA256,
         PathFilter & filter = defaultPathFilter) = 0;
 
     /* Like addToStore, but the contents written to the output path is
@@ -277,7 +277,7 @@ Path makeStorePath(const string & type,
     const Hash & hash, const string & name);
     
 Path makeFixedOutputPath(bool recursive,
-    string hashAlgo, Hash hash, string name);
+    HashType hashAlgo, Hash hash, string name);
 
 
 /* This is the preparatory part of addToStore() and addToStoreFixed();
@@ -285,7 +285,7 @@ Path makeFixedOutputPath(bool recursive,
    Returns the store path and the cryptographic hash of the
    contents of srcPath. */
 std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
-    bool recursive = true, string hashAlgo = "sha256",
+    bool recursive = true, HashType hashAlgo = htSHA256,
     PathFilter & filter = defaultPathFilter);
 
 /* Preparatory part of addTextToStore().
diff --git a/src/libutil/hash.cc b/src/libutil/hash.cc
index 70604a50a3..eef01fe4d6 100644
--- a/src/libutil/hash.cc
+++ b/src/libutil/hash.cc
@@ -335,4 +335,13 @@ HashType parseHashType(const string & s)
 }
 
  
+string printHashType(HashType ht)
+{
+    if (ht == htMD5) return "md5";
+    else if (ht == htSHA1) return "sha1";
+    else if (ht == htSHA256) return "sha256";
+    else throw Error("cannot print unknown hash type");
+}
+
+ 
 }
diff --git a/src/libutil/hash.hh b/src/libutil/hash.hh
index c3932b11b1..062d97254b 100644
--- a/src/libutil/hash.hh
+++ b/src/libutil/hash.hh
@@ -82,6 +82,9 @@ Hash compressHash(const Hash & hash, unsigned int newSize);
 /* Parse a string representing a hash type. */
 HashType parseHashType(const string & s);
 
+/* And the reverse. */
+string printHashType(HashType ht);
+
 
 union Ctx;
 
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index e03e822212..065d7d4c01 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -125,7 +125,7 @@ static void opAddFixed(Strings opFlags, Strings opArgs)
     if (opArgs.empty())
         throw UsageError("first argument must be hash algorithm");
     
-    string hashAlgo = opArgs.front();
+    HashType hashAlgo = parseHashType(opArgs.front());
     opArgs.pop_front();
 
     for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); ++i)
@@ -155,13 +155,13 @@ static void opPrintFixedPath(Strings opFlags, Strings opArgs)
         throw UsageError(format("`--print-fixed-path' requires three arguments"));
     
     Strings::iterator i = opArgs.begin();
-    string hashAlgo = *i++;
+    HashType hashAlgo = parseHashType(*i++);
     string hash = *i++;
     string name = *i++;
 
     cout << format("%1%\n") %
         makeFixedOutputPath(recursive, hashAlgo,
-            parseHash16or32(parseHashType(hashAlgo), hash), name);
+            parseHash16or32(hashAlgo, hash), name);
 }
 
 
diff --git a/src/nix-worker/nix-worker.cc b/src/nix-worker/nix-worker.cc
index e4fe94926b..c956f839ec 100644
--- a/src/nix-worker/nix-worker.cc
+++ b/src/nix-worker/nix-worker.cc
@@ -292,7 +292,7 @@ static void performOp(unsigned int clientVersion,
         string baseName = readString(from);
         readInt(from); /* obsolete; was `fixed' flag */
         bool recursive = readInt(from) == 1;
-        string hashAlgo = readString(from);
+        HashType hashAlgo = parseHashType(readString(from));
         
         Path tmp = createTempDir();
         AutoDelete delTmp(tmp);