aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2011-12-02 11:47:06 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2011-12-02 11:47:06 +0000
commit49f59dceca37636353cf2f5f60135d7705ea154e (patch)
treeb6b26acd615b96ed0f53089941391d6a5cad864b /src
parentb12b21825c949ef9b9327c6a0c9e2d5601aaf0b2 (diff)
* Move parseHash16or32 into libutil, and use in nix-hash.
Diffstat (limited to 'src')
-rw-r--r--src/libexpr/primops.cc12
-rw-r--r--src/libutil/hash.cc16
-rw-r--r--src/libutil/hash.hh3
-rw-r--r--src/nix-hash/nix-hash.cc6
-rw-r--r--src/nix-store/nix-store.cc8
5 files changed, 23 insertions, 22 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 0e81f7b72..66173cdaf 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -401,17 +401,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
HashType ht = parseHashType(outputHashAlgo);
if (ht == htUnknown)
throw EvalError(format("unknown hash algorithm `%1%'") % outputHashAlgo);
- Hash h(ht);
- if (outputHash.size() == h.hashSize * 2)
- /* hexadecimal representation */
- h = parseHash(ht, outputHash);
- else if (outputHash.size() == hashLength32(h))
- /* base-32 representation */
- h = parseHash32(ht, outputHash);
- else
- throw Error(format("hash `%1%' has wrong length for hash type `%2%'")
- % outputHash % outputHashAlgo);
- string s = outputHash;
+ Hash h = parseHash16or32(ht, outputHash);
outputHash = printHash(h);
if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
diff --git a/src/libutil/hash.cc b/src/libutil/hash.cc
index b9e784699..533423441 100644
--- a/src/libutil/hash.cc
+++ b/src/libutil/hash.cc
@@ -204,6 +204,22 @@ Hash parseHash32(HashType ht, const string & s)
}
+Hash parseHash16or32(HashType ht, const string & s)
+{
+ Hash hash(ht);
+ if (s.size() == hash.hashSize * 2)
+ /* hexadecimal representation */
+ hash = parseHash(ht, s);
+ else if (s.size() == hashLength32(hash))
+ /* base-32 representation */
+ hash = parseHash32(ht, s);
+ else
+ throw Error(format("hash `%1%' has wrong length for hash type `%2%'")
+ % s % printHashType(ht));
+ return hash;
+}
+
+
bool isHash(const string & s)
{
if (s.length() != 32) return false;
diff --git a/src/libutil/hash.hh b/src/libutil/hash.hh
index 13740954d..cbdcf4c8d 100644
--- a/src/libutil/hash.hh
+++ b/src/libutil/hash.hh
@@ -58,6 +58,9 @@ string printHash32(const Hash & hash);
/* Parse a base-32 representation of a hash code. */
Hash parseHash32(HashType ht, const string & s);
+/* Parse a base-16 or base-32 representation of a hash code. */
+Hash parseHash16or32(HashType ht, const string & s);
+
/* Verify that the given string is a valid hash code. */
bool isHash(const string & s);
diff --git a/src/nix-hash/nix-hash.cc b/src/nix-hash/nix-hash.cc
index 4867234bf..5b35ccd9d 100644
--- a/src/nix-hash/nix-hash.cc
+++ b/src/nix-hash/nix-hash.cc
@@ -43,7 +43,7 @@ void run(Strings args)
}
if (op == opHash) {
- for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) {
+ foreach (Strings::iterator, i, ss) {
Hash h = flat ? hashFile(ht, *i) : hashPath(ht, *i).first;
if (truncate && h.hashSize > 20) h = compressHash(h, 20);
std::cout << format("%1%\n") %
@@ -52,8 +52,8 @@ void run(Strings args)
}
else {
- for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) {
- Hash h = op == opTo16 ? parseHash32(ht, *i) : parseHash(ht, *i);
+ foreach (Strings::iterator, i, ss) {
+ Hash h = parseHash16or32(ht, *i);
std::cout << format("%1%\n") %
(op == opTo16 ? printHash(h) : printHash32(h));
}
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index 84d3da032..740033b45 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -133,14 +133,6 @@ static void opAddFixed(Strings opFlags, Strings opArgs)
}
-static Hash parseHash16or32(HashType ht, const string & s)
-{
- return s.size() == Hash(ht).hashSize * 2
- ? parseHash(ht, s)
- : parseHash32(ht, s);
-}
-
-
/* Hack to support caching in `nix-prefetch-url'. */
static void opPrintFixedPath(Strings opFlags, Strings opArgs)
{