diff options
author | 2015-06-22 16:46:40 +0000 | |
---|---|---|
committer | 2015-06-23 09:02:33 +0000 | |
commit | 13891f63e84fc829cf40c63b4ede3d26002474e2 (patch) | |
tree | 0202563e556ec41f028bc005d48cafffcc6c1903 /src/main/java/com/google/devtools | |
parent | 439a73df6185140dab571bb627597e32a98e5f94 (diff) |
Allow Skylark to access information about runfiles.
This is important to build packages of bazel-built code, especially
python.
Simple example usage:
def _runfiles_test_impl(ctx):
runfiles_provider = provider(ctx.attr.src, 'analysis.RunfilesProvider')
runfiles = runfiles_provider.default_runfiles.artifacts
commands = []
for f in runfiles:
commands += [
'mkdir -p $(dirname %s/%s)' % (ctx.outputs.outdir.path, f.short_path),
'cp %s %s/%s' % (f.path, ctx.outputs.outdir.path, f.short_path),
]
ctx.action(
outputs = [ ctx.outputs.outdir ],
inputs = list(runfiles),
command = ' && '.join(commands)
)
'''A simple rule which copies all the runfiles from src into outdir.'''
runfiles_buildtest = rule(
implementation = _runfiles_test_impl,
attrs = {
'src': attr.label(allow_files=False, mandatory=True),
'outdir': attr.output(mandatory=True),
},
)
--
Change-Id: I8fbd4c6ea462685142cf199dfe3348bc4436cdcb
Reviewed-on: https://bazel-review.googlesource.com/1530
MOS_MIGRATED_REVID=96576360
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java | 11 |
1 files changed, 10 insertions, 1 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 d2da3c65e8..b4d7047394 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 @@ -25,10 +25,13 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Type; +import com.google.devtools.build.lib.syntax.SkylarkCallable; +import com.google.devtools.build.lib.syntax.SkylarkModule; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; @@ -44,7 +47,6 @@ import java.util.Map.Entry; import java.util.Set; import javax.annotation.Nullable; -import javax.annotation.concurrent.Immutable; /** * An object that encapsulates runfiles. Conceptually, the runfiles are a map of paths to files, @@ -56,6 +58,7 @@ import javax.annotation.concurrent.Immutable; * manifests" (see {@link PruningManifest}). */ @Immutable +@SkylarkModule(name = "runfiles", doc = "An interface for a set of runfiles.") public final class Runfiles { private static final Function<SymlinkEntry, Artifact> TO_ARTIFACT = new Function<SymlinkEntry, Artifact>() { @@ -254,6 +257,11 @@ public final class Runfiles { * Returns the collection of runfiles as artifacts, including both unconditional artifacts * and pruning manifest candidates. */ + @SkylarkCallable( + name = "files", + doc = "Returns the set of runfiles as artifacts", + structField = true + ) public NestedSet<Artifact> getArtifacts() { NestedSetBuilder<Artifact> allArtifacts = NestedSetBuilder.stableOrder(); allArtifacts.addAll(unconditionalArtifacts.toCollection()); @@ -274,6 +282,7 @@ public final class Runfiles { /** * Returns the symlinks. */ + @SkylarkCallable(name = "symlinks", doc = "Returns the set of symlinks", structField = true) public NestedSet<SymlinkEntry> getSymlinks() { return symlinks; } |