Never cast FileIngestionMethod
to or from boolean
This commit is contained in:
parent
c251b011cd
commit
51afea3af2
4 changed files with 28 additions and 14 deletions
|
@ -724,9 +724,12 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
|
||||||
|
|
||||||
auto outPath = state.store->makeFixedOutputPath(outputHashRecursive, h, drvName);
|
auto outPath = state.store->makeFixedOutputPath(outputHashRecursive, h, drvName);
|
||||||
if (!jsonObject) drv.env["out"] = state.store->printStorePath(outPath);
|
if (!jsonObject) drv.env["out"] = state.store->printStorePath(outPath);
|
||||||
drv.outputs.insert_or_assign("out", DerivationOutput(std::move(outPath),
|
drv.outputs.insert_or_assign("out", DerivationOutput {
|
||||||
(static_cast<bool>(outputHashRecursive) ? "r:" : "") + printHashType(h.type),
|
std::move(outPath),
|
||||||
h.to_string(Base16, false)));
|
(outputHashRecursive == FileIngestionMethod::Recursive ? "r:" : "")
|
||||||
|
+ printHashType(h.type),
|
||||||
|
h.to_string(Base16, false),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -3650,7 +3650,7 @@ void DerivationGoal::registerOutputs()
|
||||||
FileIngestionMethod recursive; Hash h;
|
FileIngestionMethod recursive; Hash h;
|
||||||
i.second.parseHashInfo(recursive, h);
|
i.second.parseHashInfo(recursive, h);
|
||||||
|
|
||||||
if (!static_cast<bool>(recursive)) {
|
if (recursive == FileIngestionMethod::Flat) {
|
||||||
/* The output path should be a regular file without execute permission. */
|
/* The output path should be a regular file without execute permission. */
|
||||||
if (!S_ISREG(st.st_mode) || (st.st_mode & S_IXUSR) != 0)
|
if (!S_ISREG(st.st_mode) || (st.st_mode & S_IXUSR) != 0)
|
||||||
throw BuildError(
|
throw BuildError(
|
||||||
|
@ -3659,7 +3659,9 @@ void DerivationGoal::registerOutputs()
|
||||||
|
|
||||||
/* Check the hash. In hash mode, move the path produced by
|
/* Check the hash. In hash mode, move the path produced by
|
||||||
the derivation to its content-addressed location. */
|
the derivation to its content-addressed location. */
|
||||||
Hash h2 = static_cast<bool>(recursive) ? hashPath(h.type, actualPath).first : hashFile(h.type, actualPath);
|
Hash h2 = recursive == FileIngestionMethod::Recursive
|
||||||
|
? hashPath(h.type, actualPath).first
|
||||||
|
: hashFile(h.type, actualPath);
|
||||||
|
|
||||||
auto dest = worker.store.makeFixedOutputPath(recursive, h2, i.second.path.name());
|
auto dest = worker.store.makeFixedOutputPath(recursive, h2, i.second.path.name());
|
||||||
|
|
||||||
|
@ -3912,7 +3914,9 @@ void DerivationGoal::checkOutputs(const std::map<Path, ValidPathInfo> & outputs)
|
||||||
|
|
||||||
auto spec = parseReferenceSpecifiers(worker.store, *drv, *value);
|
auto spec = parseReferenceSpecifiers(worker.store, *drv, *value);
|
||||||
|
|
||||||
auto used = static_cast<bool>(recursive) ? cloneStorePathSet(getClosure(info.path).first) : cloneStorePathSet(info.references);
|
auto used = recursive
|
||||||
|
? cloneStorePathSet(getClosure(info.path).first)
|
||||||
|
: cloneStorePathSet(info.references);
|
||||||
|
|
||||||
if (recursive && checks.ignoreSelfRefs)
|
if (recursive && checks.ignoreSelfRefs)
|
||||||
used.erase(info.path);
|
used.erase(info.path);
|
||||||
|
|
|
@ -73,7 +73,7 @@ const size_t storePathHashLen = 32; // i.e. 160 bits
|
||||||
/* Extension of derivations in the Nix store. */
|
/* Extension of derivations in the Nix store. */
|
||||||
const std::string drvExtension = ".drv";
|
const std::string drvExtension = ".drv";
|
||||||
|
|
||||||
enum struct FileIngestionMethod : bool {
|
enum struct FileIngestionMethod : uint8_t {
|
||||||
Flat = false,
|
Flat = false,
|
||||||
Recursive = true
|
Recursive = true
|
||||||
};
|
};
|
||||||
|
|
|
@ -181,9 +181,12 @@ StorePath Store::makeFixedOutputPath(
|
||||||
return makeStorePath(makeType(*this, "source", references, hasSelfReference), hash, name);
|
return makeStorePath(makeType(*this, "source", references, hasSelfReference), hash, name);
|
||||||
} else {
|
} else {
|
||||||
assert(references.empty());
|
assert(references.empty());
|
||||||
return makeStorePath("output:out", hashString(htSHA256,
|
return makeStorePath("output:out",
|
||||||
"fixed:out:" + (static_cast<bool>(recursive) ? (string) "r:" : "") +
|
hashString(htSHA256,
|
||||||
hash.to_string(Base16) + ":"), name);
|
"fixed:out:"
|
||||||
|
+ (recursive == FileIngestionMethod::Recursive ? (string) "r:" : "")
|
||||||
|
+ hash.to_string(Base16) + ":"),
|
||||||
|
name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +205,9 @@ StorePath Store::makeTextPath(std::string_view name, const Hash & hash,
|
||||||
std::pair<StorePath, Hash> Store::computeStorePathForPath(std::string_view name,
|
std::pair<StorePath, Hash> Store::computeStorePathForPath(std::string_view name,
|
||||||
const Path & srcPath, FileIngestionMethod recursive, HashType hashAlgo, PathFilter & filter) const
|
const Path & srcPath, FileIngestionMethod recursive, HashType hashAlgo, PathFilter & filter) const
|
||||||
{
|
{
|
||||||
Hash h = static_cast<bool>(recursive) ? hashPath(hashAlgo, srcPath, filter).first : hashFile(hashAlgo, srcPath);
|
Hash h = recursive == FileIngestionMethod::Recursive
|
||||||
|
? hashPath(hashAlgo, srcPath, filter).first
|
||||||
|
: hashFile(hashAlgo, srcPath);
|
||||||
return std::make_pair(makeFixedOutputPath(recursive, h, name), h);
|
return std::make_pair(makeFixedOutputPath(recursive, h, name), h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -782,7 +787,7 @@ bool ValidPathInfo::isContentAddressed(const Store & store) const
|
||||||
|
|
||||||
else if (hasPrefix(ca, "fixed:")) {
|
else if (hasPrefix(ca, "fixed:")) {
|
||||||
FileIngestionMethod recursive { ca.compare(6, 2, "r:") == 0 };
|
FileIngestionMethod recursive { ca.compare(6, 2, "r:") == 0 };
|
||||||
Hash hash(std::string(ca, static_cast<bool>(recursive) ? 8 : 6));
|
Hash hash(std::string(ca, recursive == FileIngestionMethod::Recursive ? 8 : 6));
|
||||||
auto refs = cloneStorePathSet(references);
|
auto refs = cloneStorePathSet(references);
|
||||||
bool hasSelfReference = false;
|
bool hasSelfReference = false;
|
||||||
if (refs.count(path)) {
|
if (refs.count(path)) {
|
||||||
|
@ -828,7 +833,9 @@ Strings ValidPathInfo::shortRefs() const
|
||||||
|
|
||||||
std::string makeFixedOutputCA(FileIngestionMethod recursive, const Hash & hash)
|
std::string makeFixedOutputCA(FileIngestionMethod recursive, const Hash & hash)
|
||||||
{
|
{
|
||||||
return "fixed:" + (static_cast<bool>(recursive) ? (std::string) "r:" : "") + hash.to_string();
|
return "fixed:"
|
||||||
|
+ (recursive == FileIngestionMethod::Recursive ? (std::string) "r:" : "")
|
||||||
|
+ hash.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue