* Move parseHash16or32 into libutil, and use in nix-hash.
This commit is contained in:
parent
b12b21825c
commit
49f59dceca
5 changed files with 23 additions and 22 deletions
|
@ -401,17 +401,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
|
||||||
HashType ht = parseHashType(outputHashAlgo);
|
HashType ht = parseHashType(outputHashAlgo);
|
||||||
if (ht == htUnknown)
|
if (ht == htUnknown)
|
||||||
throw EvalError(format("unknown hash algorithm `%1%'") % outputHashAlgo);
|
throw EvalError(format("unknown hash algorithm `%1%'") % outputHashAlgo);
|
||||||
Hash h(ht);
|
Hash h = parseHash16or32(ht, outputHash);
|
||||||
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;
|
|
||||||
outputHash = printHash(h);
|
outputHash = printHash(h);
|
||||||
if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
|
if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
|
||||||
|
|
||||||
|
|
|
@ -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)
|
bool isHash(const string & s)
|
||||||
{
|
{
|
||||||
if (s.length() != 32) return false;
|
if (s.length() != 32) return false;
|
||||||
|
|
|
@ -58,6 +58,9 @@ string printHash32(const Hash & hash);
|
||||||
/* Parse a base-32 representation of a hash code. */
|
/* Parse a base-32 representation of a hash code. */
|
||||||
Hash parseHash32(HashType ht, const string & s);
|
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. */
|
/* Verify that the given string is a valid hash code. */
|
||||||
bool isHash(const string & s);
|
bool isHash(const string & s);
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ void run(Strings args)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (op == opHash) {
|
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;
|
Hash h = flat ? hashFile(ht, *i) : hashPath(ht, *i).first;
|
||||||
if (truncate && h.hashSize > 20) h = compressHash(h, 20);
|
if (truncate && h.hashSize > 20) h = compressHash(h, 20);
|
||||||
std::cout << format("%1%\n") %
|
std::cout << format("%1%\n") %
|
||||||
|
@ -52,8 +52,8 @@ void run(Strings args)
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
for (Strings::iterator i = ss.begin(); i != ss.end(); ++i) {
|
foreach (Strings::iterator, i, ss) {
|
||||||
Hash h = op == opTo16 ? parseHash32(ht, *i) : parseHash(ht, *i);
|
Hash h = parseHash16or32(ht, *i);
|
||||||
std::cout << format("%1%\n") %
|
std::cout << format("%1%\n") %
|
||||||
(op == opTo16 ? printHash(h) : printHash32(h));
|
(op == opTo16 ? printHash(h) : printHash32(h));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'. */
|
/* Hack to support caching in `nix-prefetch-url'. */
|
||||||
static void opPrintFixedPath(Strings opFlags, Strings opArgs)
|
static void opPrintFixedPath(Strings opFlags, Strings opArgs)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue