diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RepoMappingManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/RepoMappingManifestAction.java index 8946bc358e0760..e2af7d78fba4f0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RepoMappingManifestAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RepoMappingManifestAction.java @@ -15,6 +15,7 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.collect.ImmutableSortedMap.toImmutableSortedMap; +import static com.google.devtools.build.lib.actions.ActionKeyContext.describeNestedSetFingerprint; import static java.nio.charset.StandardCharsets.ISO_8859_1; import static java.util.Comparator.comparing; @@ -31,7 +32,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactExpander; import com.google.devtools.build.lib.actions.CommandLineExpansionException; -import com.google.devtools.build.lib.actions.CommandLineItem.MapFn; +import com.google.devtools.build.lib.actions.CommandLineItem; import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction; import com.google.devtools.build.lib.analysis.actions.DeterministicWriter; import com.google.devtools.build.lib.cmdline.Label; @@ -77,19 +78,20 @@ public final class RepoMappingManifestAction extends AbstractFileWriteAction // Uses MapFn's args parameter just like Fingerprint#addString to compute a cacheable fingerprint // of just the repo name and mapping of a given Package. - private static final MapFn REPO_AND_MAPPING_DIGEST_FN = - (pkg, args) -> { - args.accept(pkg.getPackageIdentifier().getRepository().getName()); - args.accept(repoMappingFingerprintCache.get(pkg.getRepositoryMapping().entries())); - }; + private static final CommandLineItem.ExceptionlessMapFn + REPO_AND_MAPPING_DIGEST_FN = + (pkg, args) -> { + args.accept(pkg.getPackageIdentifier().getRepository().getName()); + args.accept(repoMappingFingerprintCache.get(pkg.getRepositoryMapping().entries())); + }; - private static final MapFn OWNER_REPO_FN = + private static final CommandLineItem.ExceptionlessMapFn OWNER_REPO_FN = (artifact, args) -> { args.accept( artifact.getOwner() != null ? artifact.getOwner().getRepository().getName() : ""); }; - private static final MapFn FIRST_SEGMENT_FN = + private static final CommandLineItem.ExceptionlessMapFn FIRST_SEGMENT_FN = (symlink, args) -> args.accept(symlink.getPath().getSegment(0)); private final NestedSet transitivePackages; @@ -142,6 +144,27 @@ protected void computeKey( fp.addBoolean(emitCompactRepoMapping); } + @Override + public String describeKey() { + return """ + GUID: %s + transitivePackages: %s + runfilesArtifacts: %s + hasRunfilesSymlinks: %s + runfilesRootSymlinks: %s + workspaceName: %s + emitCompactRepoMapping: %s\ + """ + .formatted( + MY_UUID, + describeNestedSetFingerprint(REPO_AND_MAPPING_DIGEST_FN, transitivePackages), + describeNestedSetFingerprint(OWNER_REPO_FN, runfilesArtifacts), + hasRunfilesSymlinks, + describeNestedSetFingerprint(FIRST_SEGMENT_FN, runfilesRootSymlinks), + workspaceName, + emitCompactRepoMapping); + } + /** * Get the contents of a file internally using an in memory output stream. *