aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
diff options
context:
space:
mode:
authorGravatar nharmata <nharmata@google.com>2018-02-23 11:37:51 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-23 11:39:16 -0800
commit3fb7d34ed00fa88f2d9d5a2aa530e3a4cf70c1d9 (patch)
treead788977eb72a3d3fc1f208f323de99dbf362306 /src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
parentd829236e9feee234fde3a4aed36e1349b7e9ee16 (diff)
A couple quality-of-life improvements for Bazel devs, in response to an email from philwo@.
(i) Only have TimestampGranularityMonitor log the first file of relevance. This reduces log spam, especially in tests, while still maintaining useful information in the logs. (ii) Don't have ExternalFilesHelper log the fact that it encountered an external file when we're in a unit test or an integration test. Tests, especially bazel tests that use external repositories, tend to involve lots of "external" files. RELNOTES: None PiperOrigin-RevId: 186799176
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
index 0f646f71ed..e68da96086 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
@@ -30,12 +30,14 @@ import java.util.logging.Logger;
/** Common utilities for dealing with paths outside the package roots. */
public class ExternalFilesHelper {
+ private static final boolean IN_INTEGRATION_TEST = System.getenv("BAZEL_SHELL_TEST") != null;
+
private static final Logger logger = Logger.getLogger(ExternalFilesHelper.class.getName());
- private static final int MAX_NUM_EXTERNAL_FILES_TO_LOG = 100;
private final AtomicReference<PathPackageLocator> pkgLocator;
private final ExternalFileAction externalFileAction;
private final BlazeDirectories directories;
+ private final int maxNumExternalFilesToLog;
private final AtomicInteger numExternalFilesLogged = new AtomicInteger(0);
// These variables are set to true from multiple threads, but only read in the main thread.
@@ -43,15 +45,43 @@ public class ExternalFilesHelper {
private boolean anyOutputFilesSeen = false;
private boolean anyNonOutputExternalFilesSeen = false;
- public ExternalFilesHelper(
+ private ExternalFilesHelper(
AtomicReference<PathPackageLocator> pkgLocator,
ExternalFileAction externalFileAction,
- BlazeDirectories directories) {
+ BlazeDirectories directories,
+ int maxNumExternalFilesToLog) {
this.pkgLocator = pkgLocator;
this.externalFileAction = externalFileAction;
this.directories = directories;
+ this.maxNumExternalFilesToLog = maxNumExternalFilesToLog;
+ }
+
+ public static ExternalFilesHelper create(
+ AtomicReference<PathPackageLocator> pkgLocator,
+ ExternalFileAction externalFileAction,
+ BlazeDirectories directories) {
+ return IN_INTEGRATION_TEST
+ ? createForTesting(pkgLocator, externalFileAction, directories)
+ : new ExternalFilesHelper(
+ pkgLocator,
+ externalFileAction,
+ directories,
+ /*maxNumExternalFilesToLog=*/ 100);
}
+ public static ExternalFilesHelper createForTesting(
+ AtomicReference<PathPackageLocator> pkgLocator,
+ ExternalFileAction externalFileAction,
+ BlazeDirectories directories) {
+ return new ExternalFilesHelper(
+ pkgLocator,
+ externalFileAction,
+ directories,
+ // These log lines are mostly spam during unit and integration tests.
+ /*maxNumExternalFilesToLog=*/ 0);
+ }
+
+
/**
* The action to take when an external path is encountered. See {@link FileType} for the
* definition of "external".
@@ -137,7 +167,8 @@ public class ExternalFilesHelper {
}
ExternalFilesHelper cloneWithFreshExternalFilesKnowledge() {
- return new ExternalFilesHelper(pkgLocator, externalFileAction, directories);
+ return new ExternalFilesHelper(
+ pkgLocator, externalFileAction, directories, maxNumExternalFilesToLog);
}
FileType getAndNoteFileType(RootedPath rootedPath) {
@@ -186,7 +217,7 @@ public class ExternalFilesHelper {
throw new NonexistentImmutableExternalFileException();
}
if (fileType == FileType.EXTERNAL
- && numExternalFilesLogged.incrementAndGet() < MAX_NUM_EXTERNAL_FILES_TO_LOG) {
+ && numExternalFilesLogged.incrementAndGet() < maxNumExternalFilesToLog) {
logger.info("Encountered an external path " + rootedPath);
}
return;