If hashes do not match, print them in base-32 for SHA-1/SHA-256

Fixes #57.
This commit is contained in:
Eelco Dolstra 2012-10-23 18:05:50 +02:00
parent a28b4445a4
commit 4c34d384e6
3 changed files with 10 additions and 1 deletions

View file

@ -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. */

View file

@ -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;

View file

@ -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);