diff options
author | felly <felly@google.com> | 2018-07-18 15:55:59 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-18 15:57:34 -0700 |
commit | 6c399d642d3451d6cd22009118f64f50ccaefd6a (patch) | |
tree | 5588d7115dc6a55d4658e02ae477dc2433cedbf3 /src/main/java/com/google/devtools/build/lib/actions | |
parent | 64ea3cd90e1ead5ece533ee5a3cb4ee3520527fb (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.java | 8 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParamsFactory.java | 26 |
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)); } |