aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--site/docs/skylark/performance.md15
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java4
2 files changed, 11 insertions, 8 deletions
diff --git a/site/docs/skylark/performance.md b/site/docs/skylark/performance.md
index 9b77a01433..80937affe1 100644
--- a/site/docs/skylark/performance.md
+++ b/site/docs/skylark/performance.md
@@ -100,12 +100,12 @@ def _impl(ctx):
# Bad, has to iterate over entire depset to get length
if len(files) == 0:
args.add("--files")
- args.add(files)
+ args.add_all(files)
# Good, O(1)
if files:
args.add("--files")
- args.add(files)
+ args.add_all(files)
```
## Use `ctx.actions.args()` for command lines
@@ -154,15 +154,18 @@ def _impl(ctx):
args.add("--foo")
args.add(file)
+ # Use format if you prefer ["--foo=<file path>"] to ["--foo", <file path>]
+ args.add(format="--foo=%s", value=file)
+
# Bad, makes a giant string of a whole depset
args.add(" ".join(["-I%s" % file.short_path for file in files])
# Good, only stores a reference to the depset
- args.add(files, format="-I%s", map_fn=_to_short_path)
+ args.add_all(files, format_each="-I%s", map_each=_to_short_path)
-# Function passed to map_fn above
-def _to_short_path(files):
- return [file.short_path for file in files]
+# Function passed to map_each above
+def _to_short_path(f):
+ return f.short_path
```
## Transitive action inputs should be depsets
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index 44779236ae..bc5f24a8a8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -866,9 +866,9 @@ public class SkylarkActionFactory implements SkylarkValue {
+ "# foo_deps and bar_deps are each a large depset of artifacts\n"
+ "args = ctx.actions.args()\n"
+ "args.add(\"--foo\")\n"
- + "args.add(foo_deps)\n"
+ + "args.add_all(foo_deps)\n"
+ "args.add(\"--bar\")\n"
- + "args.add(bar_deps, join_with=\",\")\n"
+ + "args.add_joined(bar_deps, join_with=\",\")\n"
+ "ctx.actions.run(\n"
+ " arguments = [args],\n"
+ " ...\n"