aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Brian Silverman <bsilver16384@gmail.com>2015-06-22 16:46:40 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2015-06-23 09:02:33 +0000
commit13891f63e84fc829cf40c63b4ede3d26002474e2 (patch)
tree0202563e556ec41f028bc005d48cafffcc6c1903 /src/main/java/com/google/devtools
parent439a73df6185140dab571bb627597e32a98e5f94 (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.java11
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;
}