diff options
-rw-r--r-- | site/docs/skylark/performance.md | 15 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java | 4 |
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" |