aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/actions
diff options
context:
space:
mode:
authorGravatar felly <felly@google.com>2018-07-18 15:55:59 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-18 15:57:34 -0700
commit6c399d642d3451d6cd22009118f64f50ccaefd6a (patch)
tree5588d7115dc6a55d4658e02ae477dc2433cedbf3 /src/main/java/com/google/devtools/build/lib/actions
parent64ea3cd90e1ead5ece533ee5a3cb4ee3520527fb (diff)
Introduce --strict_fileset_output which treats all output Artifacts encountered in a Fileset as a regular file.
PiperOrigin-RevId: 205152271
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java26
2 files changed, 22 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
index 703611fd27..7740a05b51 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
@@ -220,6 +220,9 @@ public interface FilesetTraversalParams {
/** Returns the desired behavior when the traversal hits a subpackage. */
public abstract PackageBoundaryMode getPackageBoundaryMode();
+ /** Returns whether Filesets treat outputs in a strict manner, assuming regular files. */
+ public abstract boolean isStrictFilesetOutput();
+
@Memoized
@Override
public abstract int hashCode();
@@ -232,6 +235,7 @@ public interface FilesetTraversalParams {
fp.addBoolean(isFollowingSymlinks());
fp.addBoolean(isRecursive());
fp.addBoolean(isGenerated());
+ fp.addBoolean(isStrictFilesetOutput());
getPackageBoundaryMode().fingerprint(fp);
return fp.digestAndReset();
}
@@ -242,6 +246,7 @@ public interface FilesetTraversalParams {
boolean isPackage,
boolean followingSymlinks,
PackageBoundaryMode packageBoundaryMode,
+ boolean isStrictFilesetOutput,
boolean isRecursive,
boolean isGenerated) {
return new AutoValue_FilesetTraversalParams_DirectTraversal(
@@ -250,7 +255,8 @@ public interface FilesetTraversalParams {
isRecursive,
isGenerated,
followingSymlinks,
- packageBoundaryMode);
+ packageBoundaryMode,
+ isStrictFilesetOutput);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java
index 93941a7bd7..d1f94f072a 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java
@@ -48,15 +48,16 @@ public final class FilesetTraversalParamsFactory {
* files in subdirectories cannot be excluded
* @param symlinkBehaviorMode what to do with symlinks
* @param pkgBoundaryMode what to do when the traversal hits a subdirectory that is also a
- * subpackage (contains a BUILD file)
+ * @param strictFilesetOutput whether Fileset assumes that output Artifacts are regular files.
*/
public static FilesetTraversalParams recursiveTraversalOfPackage(Label ownerLabel,
Artifact buildFile, PathFragment destPath, @Nullable Set<String> excludes,
- SymlinkBehavior symlinkBehaviorMode, PackageBoundaryMode pkgBoundaryMode) {
+ SymlinkBehavior symlinkBehaviorMode, PackageBoundaryMode pkgBoundaryMode,
+ boolean strictFilesetOutput) {
Preconditions.checkState(buildFile.isSourceArtifact(), "%s", buildFile);
return DirectoryTraversalParams.getDirectoryTraversalParams(ownerLabel,
DirectTraversalRoot.forPackage(buildFile), true, destPath, excludes,
- symlinkBehaviorMode, pkgBoundaryMode, true, false);
+ symlinkBehaviorMode, pkgBoundaryMode, strictFilesetOutput, true, false);
}
/**
@@ -73,14 +74,15 @@ public final class FilesetTraversalParamsFactory {
* subdirectories cannot be excluded
* @param symlinkBehaviorMode what to do with symlinks
* @param pkgBoundaryMode what to do when the traversal hits a subdirectory that is also a
- * subpackage (contains a BUILD file)
+ * @param strictFilesetOutput whether Fileset assumes that output Artifacts are regular files.
*/
public static FilesetTraversalParams recursiveTraversalOfDirectory(Label ownerLabel,
Artifact directoryToTraverse, PathFragment destPath, @Nullable Set<String> excludes,
- SymlinkBehavior symlinkBehaviorMode, PackageBoundaryMode pkgBoundaryMode) {
+ SymlinkBehavior symlinkBehaviorMode, PackageBoundaryMode pkgBoundaryMode,
+ boolean strictFilesetOutput) {
return DirectoryTraversalParams.getDirectoryTraversalParams(ownerLabel,
DirectTraversalRoot.forFileOrDirectory(directoryToTraverse), false, destPath,
- excludes, symlinkBehaviorMode, pkgBoundaryMode, true,
+ excludes, symlinkBehaviorMode, pkgBoundaryMode, strictFilesetOutput, true,
!directoryToTraverse.isSourceArtifact());
}
@@ -96,14 +98,15 @@ public final class FilesetTraversalParamsFactory {
* respective symlink there, or the root of files found (in case this is a directory)
* @param symlinkBehaviorMode what to do with symlinks
* @param pkgBoundaryMode what to do when the traversal hits a subdirectory that is also a
- * subpackage (contains a BUILD file)
+ * @param strictFilesetOutput whether Fileset assumes that output Artifacts are regular files.
*/
public static FilesetTraversalParams fileTraversal(Label ownerLabel, Artifact fileToTraverse,
PathFragment destPath, SymlinkBehavior symlinkBehaviorMode,
- PackageBoundaryMode pkgBoundaryMode) {
+ PackageBoundaryMode pkgBoundaryMode, boolean strictFilesetOutput) {
return DirectoryTraversalParams.getDirectoryTraversalParams(ownerLabel,
DirectTraversalRoot.forFileOrDirectory(fileToTraverse), false, destPath, null,
- symlinkBehaviorMode, pkgBoundaryMode, false, !fileToTraverse.isSourceArtifact());
+ symlinkBehaviorMode, pkgBoundaryMode, strictFilesetOutput, false,
+ !fileToTraverse.isSourceArtifact());
}
/**
@@ -175,11 +178,12 @@ public final class FilesetTraversalParamsFactory {
@Nullable Set<String> excludes,
SymlinkBehavior symlinkBehaviorMode,
PackageBoundaryMode pkgBoundaryMode,
+ boolean strictFilesetOutput,
boolean isRecursive,
boolean isGenerated) {
DirectTraversal traversal = DirectTraversal.getDirectTraversal(root, isPackage,
- symlinkBehaviorMode == SymlinkBehavior.DEREFERENCE, pkgBoundaryMode, isRecursive,
- isGenerated);
+ symlinkBehaviorMode == SymlinkBehavior.DEREFERENCE, pkgBoundaryMode, strictFilesetOutput,
+ isRecursive, isGenerated);
return create(ownerLabel, destPath, getOrderedExcludes(excludes), Optional.of(traversal));
}