Don't take into account symlinks when computing intrabuild file modifications. While there could be bogus targets that modify symlinks, Bazel has output symlinks that point to source code. -- MOS_MIGRATED_REVID=90827597
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java index d159214..a4524d1 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java
@@ -216,7 +216,8 @@ try { FileValue newData = ActionMetadataHandler.fileValueFromArtifact(artifact, stat, tsgm); if (!newData.equals(lastKnownData)) { - updateIntraBuildModifiedCounter(stat != null ? stat.getLastChangeTime() : -1); + updateIntraBuildModifiedCounter(stat != null ? stat.getLastChangeTime() : -1, + lastKnownData.isSymlink(), newData.isSymlink()); modifiedOutputFilesCounter.getAndIncrement(); dirtyKeys.add(key); } @@ -230,8 +231,11 @@ }; } - private void updateIntraBuildModifiedCounter(long time) throws IOException { - if (lastExecutionTimeRange != null && lastExecutionTimeRange.contains(time)) { + private void updateIntraBuildModifiedCounter(long time, boolean oldWasSymlink, + boolean newIsSymlink) throws IOException { + if (lastExecutionTimeRange != null + && lastExecutionTimeRange.contains(time) + && !(oldWasSymlink && newIsSymlink)) { modifiedOutputFilesIntraBuildCounter.incrementAndGet(); } } @@ -276,7 +280,7 @@ if (!fileValue.equals(lastKnownData)) { updateIntraBuildModifiedCounter(fileValue.exists() ? fileValue.realRootedPath().asPath().getLastModifiedTime() - : -1); + : -1, lastKnownData.isSymlink(), fileValue.isSymlink()); modifiedOutputFilesCounter.getAndIncrement(); isDirty = true; }