diff options
author | Brian Silverman <bsilver16384@gmail.com> | 2016-04-15 12:16:04 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2016-04-15 14:08:33 +0000 |
commit | 4321b677c0846e905702ff8fd1a38c00404b675f (patch) | |
tree | 37967482aed55de37242100b26e462e7a1488501 /src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java | |
parent | 907dbbfee014a5a7b88450a93c2cef877ebda4b6 (diff) |
Expose __init__.py filenames to Skylark
This is important for packaging Python code in a way which is compatible
with the way Bazel builds its standard runfiles directory.
Refs #671
--
Change-Id: Ica2adab481cfecabb84b608cd952b0cae5a8653c
Reviewed-on: https://bazel-review.googlesource.com/#/c/2900/
MOS_MIGRATED_REVID=119945845
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java index 95efeb3f29..5c14ec2dda 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java @@ -46,6 +46,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; +import java.util.TreeSet; import javax.annotation.Nullable; @@ -77,6 +78,22 @@ public final class Runfiles { } }; + private static final Function<Artifact, PathFragment> GET_ROOT_RELATIVE_PATH = + new Function<Artifact, PathFragment>() { + @Override + public PathFragment apply(Artifact input) { + return input.getRootRelativePath(); + } + }; + + private static final Function<PathFragment, String> PATH_FRAGMENT_TO_STRING = + new Function<PathFragment, String>() { + @Override + public String apply(PathFragment input) { + return input.toString(); + } + }; + /** * An entry in the runfiles map. * @@ -319,6 +336,20 @@ public final class Runfiles { return symlinks; } + @SkylarkCallable( + name = "empty_filenames", + doc = "Returns names of empty files to create.", + structField = true + ) + public NestedSet<String> getEmptyFilenames() { + Set<PathFragment> manifest = new TreeSet(); + Iterables.addAll( + manifest, Iterables.transform(getArtifacts().toCollection(), GET_ROOT_RELATIVE_PATH)); + return NestedSetBuilder.wrap( + Order.STABLE_ORDER, + Iterables.transform(emptyFilesSupplier.getExtraPaths(manifest), PATH_FRAGMENT_TO_STRING)); + } + /** * Returns the symlinks as a map from path fragment to artifact. * |