* Pass HashType values instead of strings.
This commit is contained in:
parent
1307b22223
commit
ff762fb499
11 changed files with 36 additions and 23 deletions
|
@ -400,7 +400,7 @@ static Expr prim_derivationStrict(EvalState & state, const ATermVector & args)
|
||||||
% outputHash % outputHashAlgo);
|
% outputHash % outputHashAlgo);
|
||||||
string s = outputHash;
|
string s = outputHash;
|
||||||
outputHash = printHash(h);
|
outputHash = printHash(h);
|
||||||
outPath = makeFixedOutputPath(outputHashRecursive, outputHashAlgo, h, drvName);
|
outPath = makeFixedOutputPath(outputHashRecursive, ht, h, drvName);
|
||||||
if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
|
if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,8 +634,8 @@ static Expr prim_filterSource(EvalState & state, const ATermVector & args)
|
||||||
FilterFromExpr filter(state, args[0]);
|
FilterFromExpr filter(state, args[0]);
|
||||||
|
|
||||||
Path dstPath = readOnlyMode
|
Path dstPath = readOnlyMode
|
||||||
? computeStorePathForPath(path, true, "sha256", filter).first
|
? computeStorePathForPath(path, true, htSHA256, filter).first
|
||||||
: store->addToStore(path, true, "sha256", filter);
|
: store->addToStore(path, true, htSHA256, filter);
|
||||||
|
|
||||||
return makeStr(dstPath, singleton<PathSet>(dstPath));
|
return makeStr(dstPath, singleton<PathSet>(dstPath));
|
||||||
}
|
}
|
||||||
|
|
|
@ -656,7 +656,7 @@ void LocalStore::invalidatePath(const Path & path)
|
||||||
|
|
||||||
|
|
||||||
Path LocalStore::addToStore(const Path & _srcPath,
|
Path LocalStore::addToStore(const Path & _srcPath,
|
||||||
bool recursive, string hashAlgo, PathFilter & filter)
|
bool recursive, HashType hashAlgo, PathFilter & filter)
|
||||||
{
|
{
|
||||||
Path srcPath(absPath(_srcPath));
|
Path srcPath(absPath(_srcPath));
|
||||||
debug(format("adding `%1%' to the store") % srcPath);
|
debug(format("adding `%1%' to the store") % srcPath);
|
||||||
|
@ -670,7 +670,7 @@ Path LocalStore::addToStore(const Path & _srcPath,
|
||||||
else
|
else
|
||||||
sink.s = readFile(srcPath);
|
sink.s = readFile(srcPath);
|
||||||
|
|
||||||
Hash h = hashString(parseHashType(hashAlgo), sink.s);
|
Hash h = hashString(hashAlgo, sink.s);
|
||||||
|
|
||||||
Path dstPath = makeFixedOutputPath(recursive, hashAlgo, h, baseNameOf(srcPath));
|
Path dstPath = makeFixedOutputPath(recursive, hashAlgo, h, baseNameOf(srcPath));
|
||||||
|
|
||||||
|
@ -700,7 +700,7 @@ Path LocalStore::addToStore(const Path & _srcPath,
|
||||||
above (if called with recursive == true and hashAlgo ==
|
above (if called with recursive == true and hashAlgo ==
|
||||||
sha256); otherwise, compute it here. */
|
sha256); otherwise, compute it here. */
|
||||||
registerValidPath(dstPath,
|
registerValidPath(dstPath,
|
||||||
(recursive && hashAlgo == "sha256") ? h :
|
(recursive && hashAlgo == htSHA256) ? h :
|
||||||
(recursive ? hashString(htSHA256, sink.s) : hashPath(htSHA256, dstPath)),
|
(recursive ? hashString(htSHA256, sink.s) : hashPath(htSHA256, dstPath)),
|
||||||
PathSet(), "");
|
PathSet(), "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ public:
|
||||||
const Path & path, SubstitutablePathInfo & info);
|
const Path & path, SubstitutablePathInfo & info);
|
||||||
|
|
||||||
Path addToStore(const Path & srcPath,
|
Path addToStore(const Path & srcPath,
|
||||||
bool recursive = true, string hashAlgo = "sha256",
|
bool recursive = true, HashType hashAlgo = htSHA256,
|
||||||
PathFilter & filter = defaultPathFilter);
|
PathFilter & filter = defaultPathFilter);
|
||||||
|
|
||||||
Path addTextToStore(const string & name, const string & s,
|
Path addTextToStore(const string & name, const string & s,
|
||||||
|
|
|
@ -279,16 +279,16 @@ Path RemoteStore::queryDeriver(const Path & path)
|
||||||
|
|
||||||
|
|
||||||
Path RemoteStore::addToStore(const Path & _srcPath,
|
Path RemoteStore::addToStore(const Path & _srcPath,
|
||||||
bool recursive, string hashAlgo, PathFilter & filter)
|
bool recursive, HashType hashAlgo, PathFilter & filter)
|
||||||
{
|
{
|
||||||
Path srcPath(absPath(_srcPath));
|
Path srcPath(absPath(_srcPath));
|
||||||
|
|
||||||
writeInt(wopAddToStore, to);
|
writeInt(wopAddToStore, to);
|
||||||
writeString(baseNameOf(srcPath), to);
|
writeString(baseNameOf(srcPath), to);
|
||||||
/* backwards compatibility hack */
|
/* backwards compatibility hack */
|
||||||
writeInt((hashAlgo == "sha256" && recursive) ? 0 : 1, to);
|
writeInt((hashAlgo == htSHA256 && recursive) ? 0 : 1, to);
|
||||||
writeInt(recursive ? 1 : 0, to);
|
writeInt(recursive ? 1 : 0, to);
|
||||||
writeString(hashAlgo, to);
|
writeString(printHashType(hashAlgo), to);
|
||||||
dumpPath(srcPath, to, filter);
|
dumpPath(srcPath, to, filter);
|
||||||
processStderr();
|
processStderr();
|
||||||
return readStorePath(from);
|
return readStorePath(from);
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
SubstitutablePathInfo & info);
|
SubstitutablePathInfo & info);
|
||||||
|
|
||||||
Path addToStore(const Path & srcPath,
|
Path addToStore(const Path & srcPath,
|
||||||
bool recursive = true, string hashAlgo = "sha256",
|
bool recursive = true, HashType hashAlgo = htSHA256,
|
||||||
PathFilter & filter = defaultPathFilter);
|
PathFilter & filter = defaultPathFilter);
|
||||||
|
|
||||||
Path addTextToStore(const string & name, const string & s,
|
Path addTextToStore(const string & name, const string & s,
|
||||||
|
|
|
@ -183,20 +183,21 @@ Path makeStorePath(const string & type,
|
||||||
|
|
||||||
|
|
||||||
Path makeFixedOutputPath(bool recursive,
|
Path makeFixedOutputPath(bool recursive,
|
||||||
string hashAlgo, Hash hash, string name)
|
HashType hashAlgo, Hash hash, string name)
|
||||||
{
|
{
|
||||||
return hashAlgo == "sha256" && recursive
|
return hashAlgo == htSHA256 && recursive
|
||||||
? makeStorePath("source", hash, name)
|
? makeStorePath("source", hash, name)
|
||||||
: makeStorePath("output:out", hashString(htSHA256,
|
: makeStorePath("output:out", hashString(htSHA256,
|
||||||
"fixed:out:" + (recursive ? (string) "r:" : "") + hashAlgo + ":" + printHash(hash) + ":"),
|
"fixed:out:" + (recursive ? (string) "r:" : "") +
|
||||||
|
printHashType(hashAlgo) + ":" + printHash(hash) + ":"),
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
|
std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
|
||||||
bool recursive, string hashAlgo, PathFilter & filter)
|
bool recursive, HashType hashAlgo, PathFilter & filter)
|
||||||
{
|
{
|
||||||
HashType ht(parseHashType(hashAlgo));
|
HashType ht(hashAlgo);
|
||||||
Hash h = recursive ? hashPath(ht, srcPath, filter) : hashFile(ht, srcPath);
|
Hash h = recursive ? hashPath(ht, srcPath, filter) : hashFile(ht, srcPath);
|
||||||
string name = baseNameOf(srcPath);
|
string name = baseNameOf(srcPath);
|
||||||
Path dstPath = makeFixedOutputPath(recursive, hashAlgo, h, name);
|
Path dstPath = makeFixedOutputPath(recursive, hashAlgo, h, name);
|
||||||
|
|
|
@ -174,7 +174,7 @@ public:
|
||||||
object `filter' can be used to exclude files (see
|
object `filter' can be used to exclude files (see
|
||||||
libutil/archive.hh). */
|
libutil/archive.hh). */
|
||||||
virtual Path addToStore(const Path & srcPath,
|
virtual Path addToStore(const Path & srcPath,
|
||||||
bool recursive = true, string hashAlgo = "sha256",
|
bool recursive = true, HashType hashAlgo = htSHA256,
|
||||||
PathFilter & filter = defaultPathFilter) = 0;
|
PathFilter & filter = defaultPathFilter) = 0;
|
||||||
|
|
||||||
/* Like addToStore, but the contents written to the output path is
|
/* Like addToStore, but the contents written to the output path is
|
||||||
|
@ -277,7 +277,7 @@ Path makeStorePath(const string & type,
|
||||||
const Hash & hash, const string & name);
|
const Hash & hash, const string & name);
|
||||||
|
|
||||||
Path makeFixedOutputPath(bool recursive,
|
Path makeFixedOutputPath(bool recursive,
|
||||||
string hashAlgo, Hash hash, string name);
|
HashType hashAlgo, Hash hash, string name);
|
||||||
|
|
||||||
|
|
||||||
/* This is the preparatory part of addToStore() and addToStoreFixed();
|
/* This is the preparatory part of addToStore() and addToStoreFixed();
|
||||||
|
@ -285,7 +285,7 @@ Path makeFixedOutputPath(bool recursive,
|
||||||
Returns the store path and the cryptographic hash of the
|
Returns the store path and the cryptographic hash of the
|
||||||
contents of srcPath. */
|
contents of srcPath. */
|
||||||
std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
|
std::pair<Path, Hash> computeStorePathForPath(const Path & srcPath,
|
||||||
bool recursive = true, string hashAlgo = "sha256",
|
bool recursive = true, HashType hashAlgo = htSHA256,
|
||||||
PathFilter & filter = defaultPathFilter);
|
PathFilter & filter = defaultPathFilter);
|
||||||
|
|
||||||
/* Preparatory part of addTextToStore().
|
/* Preparatory part of addTextToStore().
|
||||||
|
|
|
@ -335,4 +335,13 @@ HashType parseHashType(const string & s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string printHashType(HashType ht)
|
||||||
|
{
|
||||||
|
if (ht == htMD5) return "md5";
|
||||||
|
else if (ht == htSHA1) return "sha1";
|
||||||
|
else if (ht == htSHA256) return "sha256";
|
||||||
|
else throw Error("cannot print unknown hash type");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,9 @@ Hash compressHash(const Hash & hash, unsigned int newSize);
|
||||||
/* Parse a string representing a hash type. */
|
/* Parse a string representing a hash type. */
|
||||||
HashType parseHashType(const string & s);
|
HashType parseHashType(const string & s);
|
||||||
|
|
||||||
|
/* And the reverse. */
|
||||||
|
string printHashType(HashType ht);
|
||||||
|
|
||||||
|
|
||||||
union Ctx;
|
union Ctx;
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,7 @@ static void opAddFixed(Strings opFlags, Strings opArgs)
|
||||||
if (opArgs.empty())
|
if (opArgs.empty())
|
||||||
throw UsageError("first argument must be hash algorithm");
|
throw UsageError("first argument must be hash algorithm");
|
||||||
|
|
||||||
string hashAlgo = opArgs.front();
|
HashType hashAlgo = parseHashType(opArgs.front());
|
||||||
opArgs.pop_front();
|
opArgs.pop_front();
|
||||||
|
|
||||||
for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); ++i)
|
for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); ++i)
|
||||||
|
@ -155,13 +155,13 @@ static void opPrintFixedPath(Strings opFlags, Strings opArgs)
|
||||||
throw UsageError(format("`--print-fixed-path' requires three arguments"));
|
throw UsageError(format("`--print-fixed-path' requires three arguments"));
|
||||||
|
|
||||||
Strings::iterator i = opArgs.begin();
|
Strings::iterator i = opArgs.begin();
|
||||||
string hashAlgo = *i++;
|
HashType hashAlgo = parseHashType(*i++);
|
||||||
string hash = *i++;
|
string hash = *i++;
|
||||||
string name = *i++;
|
string name = *i++;
|
||||||
|
|
||||||
cout << format("%1%\n") %
|
cout << format("%1%\n") %
|
||||||
makeFixedOutputPath(recursive, hashAlgo,
|
makeFixedOutputPath(recursive, hashAlgo,
|
||||||
parseHash16or32(parseHashType(hashAlgo), hash), name);
|
parseHash16or32(hashAlgo, hash), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -292,7 +292,7 @@ static void performOp(unsigned int clientVersion,
|
||||||
string baseName = readString(from);
|
string baseName = readString(from);
|
||||||
readInt(from); /* obsolete; was `fixed' flag */
|
readInt(from); /* obsolete; was `fixed' flag */
|
||||||
bool recursive = readInt(from) == 1;
|
bool recursive = readInt(from) == 1;
|
||||||
string hashAlgo = readString(from);
|
HashType hashAlgo = parseHashType(readString(from));
|
||||||
|
|
||||||
Path tmp = createTempDir();
|
Path tmp = createTempDir();
|
||||||
AutoDelete delTmp(tmp);
|
AutoDelete delTmp(tmp);
|
||||||
|
|
Loading…
Reference in a new issue