aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-23 18:05:50 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-23 18:05:50 +0200
commit4c34d384e68ce7e2c949a7588d80bbe7d5a96440 (patch)
tree7a60f33812b8009e105bd43ce7cc1f19dec413b2 /src
parenta28b4445a4eb8108dfc028083d3939d5f3a42685 (diff)
If hashes do not match, print them in base-32 for SHA-1/SHA-256
Fixes #57.
Diffstat (limited to 'src')
-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 61abd2ed2..3a06aa1fc 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 697a6b475..de2c1ebd7 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 781f51742..2c6f176ec 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);