30 std::map<PersistentId, const EvaAssetEntry*>
left,
right;
31 for (
const auto& asset : before.
assets)
left.emplace(asset.asset.id(), &asset);
32 for (
const auto& asset : after.
assets)
right.emplace(asset.asset.id(), &asset);
34 for (
const auto& [
id, asset] :
left) {
38 asset->schemaVersion, asset->contentHash, {}, {}, {}});
39 }
else if (asset->type !=
found->second->type || asset->schemaVersion !=
found->second->schemaVersion ||
40 asset->contentHash !=
found->second->contentHash) {
42 asset->schemaVersion, asset->contentHash,
found->second->type,
43 found->second->schemaVersion,
found->second->contentHash});
46 for (
const auto& [
id, asset] :
right)
47 if (!
left.contains(
id))
49 asset->schemaVersion, asset->contentHash});
50 std::sort(result.assets.begin(), result.assets.end(), [](
const auto&
a,
const auto&
b) {
51 return a.assetId < b.assetId;
53 const auto leftDependencies = dependencyKeys(before);
54 if (!leftDependencies)
return Result<EvaPackageDiff>::failure(leftDependencies.status());
55 const auto rightDependencies = dependencyKeys(after);
56 if (!rightDependencies)
return Result<EvaPackageDiff>::failure(rightDependencies.status());
57 std::vector<DependencyKey> added,
removed;
58 std::set_difference(rightDependencies.value().begin(), rightDependencies.value().end(),
59 leftDependencies.value().begin(), leftDependencies.value().end(),
60 std::back_inserter(added));
61 std::set_difference(leftDependencies.value().begin(), leftDependencies.value().end(),
62 rightDependencies.value().begin(), rightDependencies.value().end(),
64 result.addedDependencies =
static_cast<std::uint32_t
>(added.size());
65 result.removedDependencies =
static_cast<std::uint32_t
>(
removed.size());
66 result.entrypointsChanged = before.entrypoints != after.entrypoints;
67 return Result<EvaPackageDiff>::success(std::move(result));
Result< EvaPackageDiff > diffEvaManifests(const EvaManifest &before, const EvaManifest &after)
Compare two admitted manifests without using paths, timestamps or archive order.