about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-23T16·05+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-23T16·05+0200
commit4c34d384e68ce7e2c949a7588d80bbe7d5a96440 (patch)
tree7a60f33812b8009e105bd43ce7cc1f19dec413b2
parenta28b4445a4eb8108dfc028083d3939d5f3a42685 (diff)
If hashes do not match, print them in base-32 for SHA-1/SHA-256
Fixes #57.
-rw-r--r--src/libstore/build.cc2
-rw-r--r--src/libutil/hash.cc6
-rw-r--r--src/libutil/hash.hh3
3 files changed, 10 insertions, 1 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 61abd2ed216f..3a06aa1fca44 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -2228,7 +2228,7 @@ void DerivationGoal::computeClosure()
             if (h != h2)
                 throw BuildError(
                     format("output path `%1%' should have %2% hash `%3%', instead has `%4%'")
-                    % path % i->second.hashAlgo % printHash(h) % printHash(h2));
+                    % path % i->second.hashAlgo % printHash16or32(h) % printHash16or32(h2));
         }
 
         /* Get rid of all weird permissions. */
diff --git a/src/libutil/hash.cc b/src/libutil/hash.cc
index 697a6b475b13..de2c1ebd724f 100644
--- a/src/libutil/hash.cc
+++ b/src/libutil/hash.cc
@@ -153,6 +153,12 @@ string printHash32(const Hash & hash)
 }
 
 
+string printHash16or32(const Hash & hash)
+{
+    return hash.type == htMD5 ? printHash(hash) : printHash32(hash);
+}
+
+
 static bool mul(unsigned char * bytes, unsigned char y, int maxSize)
 {
     unsigned char carry = 0;
diff --git a/src/libutil/hash.hh b/src/libutil/hash.hh
index 781f517428d0..2c6f176ec74c 100644
--- a/src/libutil/hash.hh
+++ b/src/libutil/hash.hh
@@ -54,6 +54,9 @@ unsigned int hashLength32(const Hash & hash);
 /* Convert a hash to a base-32 representation. */
 string printHash32(const Hash & hash);
 
+/* Print a hash in base-16 if it's MD5, or base-32 otherwise. */
+string printHash16or32(const Hash & hash);
+
 /* Parse a base-32 representation of a hash code. */
 Hash parseHash32(HashType ht, const string & s);