Fix 'nix verify --all' on a binary cache (cached case)
This commit is contained in:
parent
9502c0e2eb
commit
43b8e96d30
|
@ -351,6 +351,14 @@ ref<const ValidPathInfo> Store::queryPathInfo(const StorePath & storePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool goodStorePath(const StorePath & expected, const StorePath & actual)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
expected.hashPart() == actual.hashPart()
|
||||||
|
&& (expected.name() == Store::MissingName || expected.name() == actual.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Store::queryPathInfo(const StorePath & storePath,
|
void Store::queryPathInfo(const StorePath & storePath,
|
||||||
Callback<ref<const ValidPathInfo>> callback) noexcept
|
Callback<ref<const ValidPathInfo>> callback) noexcept
|
||||||
{
|
{
|
||||||
|
@ -378,7 +386,7 @@ void Store::queryPathInfo(const StorePath & storePath,
|
||||||
state_->pathInfoCache.upsert(hashPart,
|
state_->pathInfoCache.upsert(hashPart,
|
||||||
res.first == NarInfoDiskCache::oInvalid ? PathInfoCacheValue{} : PathInfoCacheValue{ .value = res.second });
|
res.first == NarInfoDiskCache::oInvalid ? PathInfoCacheValue{} : PathInfoCacheValue{ .value = res.second });
|
||||||
if (res.first == NarInfoDiskCache::oInvalid ||
|
if (res.first == NarInfoDiskCache::oInvalid ||
|
||||||
res.second->path != storePath)
|
!goodStorePath(storePath, res.second->path))
|
||||||
throw InvalidPath("path '%s' is not valid", printStorePath(storePath));
|
throw InvalidPath("path '%s' is not valid", printStorePath(storePath));
|
||||||
}
|
}
|
||||||
return callback(ref<const ValidPathInfo>(res.second));
|
return callback(ref<const ValidPathInfo>(res.second));
|
||||||
|
@ -405,11 +413,7 @@ void Store::queryPathInfo(const StorePath & storePath,
|
||||||
|
|
||||||
auto storePath = parseStorePath(storePathS);
|
auto storePath = parseStorePath(storePathS);
|
||||||
|
|
||||||
if (!info
|
if (!info || !goodStorePath(storePath, info->path)); {
|
||||||
|| info->path.hashPart() != storePath.hashPart()
|
|
||||||
|| (storePath.name() != MissingName && info->path.name() != storePath.name())
|
|
||||||
)
|
|
||||||
{
|
|
||||||
stats.narInfoMissing++;
|
stats.narInfoMissing++;
|
||||||
throw InvalidPath("path '%s' is not valid", storePathS);
|
throw InvalidPath("path '%s' is not valid", storePathS);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue