forked from lix-project/lix
Support empty hash in fetchers
fetchTarball, fetchTree, and fetchGit all have *optional* hash attrs. This means that we need to be careful with what we allow to avoid accidentally making these defaults. When ‘hash = ""’ we assume the empty hash is wanted.
This commit is contained in:
parent
762273f1fd
commit
19aa892f20
|
@ -1131,9 +1131,14 @@ static void prim_path(EvalState & state, const Pos & pos, Value * * args, Value
|
||||||
filterFun = attr.value;
|
filterFun = attr.value;
|
||||||
} else if (n == "recursive")
|
} else if (n == "recursive")
|
||||||
method = FileIngestionMethod { state.forceBool(*attr.value, *attr.pos) };
|
method = FileIngestionMethod { state.forceBool(*attr.value, *attr.pos) };
|
||||||
else if (n == "sha256")
|
else if (n == "sha256") {
|
||||||
expectedHash = Hash(state.forceStringNoCtx(*attr.value, *attr.pos), htSHA256);
|
auto hashStr = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||||
else
|
if (hashStr == "") {
|
||||||
|
expectedHash = Hash(htSHA256);
|
||||||
|
printError("warning: found empty hash, assuming you wanted '%s'", expectedHash.to_string());
|
||||||
|
} else
|
||||||
|
expectedHash = Hash(hashStr, htSHA256);
|
||||||
|
} else
|
||||||
throw EvalError(format("unsupported argument '%1%' to 'addPath', at %2%") % attr.name % *attr.pos);
|
throw EvalError(format("unsupported argument '%1%' to 'addPath', at %2%") % attr.name % *attr.pos);
|
||||||
}
|
}
|
||||||
if (path.empty())
|
if (path.empty())
|
||||||
|
|
|
@ -102,9 +102,14 @@ static void fetch(EvalState & state, const Pos & pos, Value * * args, Value & v,
|
||||||
string n(attr.name);
|
string n(attr.name);
|
||||||
if (n == "url")
|
if (n == "url")
|
||||||
url = state.forceStringNoCtx(*attr.value, *attr.pos);
|
url = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||||
else if (n == "sha256")
|
else if (n == "sha256") {
|
||||||
expectedHash = Hash(state.forceStringNoCtx(*attr.value, *attr.pos), htSHA256);
|
auto hashStr = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||||
else if (n == "name")
|
if (hashStr == "") {
|
||||||
|
expectedHash = Hash(htSHA256);
|
||||||
|
printError("warning: found empty hash, assuming you wanted '%s'", expectedHash->to_string());
|
||||||
|
} else
|
||||||
|
expectedHash = Hash(hashStr, htSHA256);
|
||||||
|
} else if (n == "name")
|
||||||
name = state.forceStringNoCtx(*attr.value, *attr.pos);
|
name = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||||
else
|
else
|
||||||
throw EvalError("unsupported argument '%s' to '%s', at %s",
|
throw EvalError("unsupported argument '%s' to '%s', at %s",
|
||||||
|
|
|
@ -34,9 +34,14 @@ std::unique_ptr<Input> inputFromAttrs(const Attrs & attrs)
|
||||||
for (auto & inputScheme : *inputSchemes) {
|
for (auto & inputScheme : *inputSchemes) {
|
||||||
auto res = inputScheme->inputFromAttrs(attrs2);
|
auto res = inputScheme->inputFromAttrs(attrs2);
|
||||||
if (res) {
|
if (res) {
|
||||||
if (auto narHash = maybeGetStrAttr(attrs, "narHash"))
|
if (auto narHash = maybeGetStrAttr(attrs, "narHash")) {
|
||||||
// FIXME: require SRI hash.
|
if (narHash->empty()) {
|
||||||
res->narHash = Hash(*narHash);
|
res->narHash = Hash(htUnknown);
|
||||||
|
printError("warning: found empty hash, assuming you wanted '%s'", res->narHash->to_string());
|
||||||
|
} else
|
||||||
|
// FIXME: require SRI hash.
|
||||||
|
res->narHash = Hash(*narHash);
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,9 +263,14 @@ struct TarballInputScheme : InputScheme
|
||||||
throw Error("unsupported tarball input attribute '%s'", name);
|
throw Error("unsupported tarball input attribute '%s'", name);
|
||||||
|
|
||||||
auto input = std::make_unique<TarballInput>(parseURL(getStrAttr(attrs, "url")));
|
auto input = std::make_unique<TarballInput>(parseURL(getStrAttr(attrs, "url")));
|
||||||
if (auto hash = maybeGetStrAttr(attrs, "hash"))
|
if (auto hash = maybeGetStrAttr(attrs, "hash")) {
|
||||||
// FIXME: require SRI hash.
|
if (hash->empty()) {
|
||||||
input->hash = Hash(*hash);
|
input->hash = Hash(htUnknown);
|
||||||
|
printError("warning: found empty hash, assuming you wanted '%s'", input->hash->to_string());
|
||||||
|
} else
|
||||||
|
// FIXME: require SRI hash.
|
||||||
|
input->hash = Hash(*hash);
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue