Skip to content

Commit f386322

Browse files
jbedardalexeagle
authored andcommitted
perf: avoid unnecessary nested depset() (#1435)
* perf(builtin): avoid unnecessary nested depset()
1 parent f19245b commit f386322

2 files changed

Lines changed: 24 additions & 13 deletions

File tree

internal/node/node.bzl

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -142,26 +142,31 @@ def _to_execroot_path(ctx, file):
142142

143143
def _nodejs_binary_impl(ctx):
144144
node_modules_manifest = write_node_modules_manifest(ctx)
145-
node_modules = depset(ctx.files.node_modules)
145+
node_modules_depsets = []
146+
node_modules_depsets.append(depset(ctx.files.node_modules))
146147

147148
# Also include files from npm fine grained deps as inputs.
148149
# These deps are identified by the NpmPackageInfo provider.
149150
for d in ctx.attr.data:
150151
if NpmPackageInfo in d:
151-
node_modules = depset(transitive = [node_modules, d[NpmPackageInfo].sources])
152+
node_modules_depsets.append(d[NpmPackageInfo].sources)
152153

153-
# Using a depset will allow us to avoid flattening files and sources
154+
node_modules = depset(transitive = node_modules_depsets)
155+
156+
# Using an array of depsets will allow us to avoid flattening files and sources
154157
# inside this loop. This should reduce the performances hits,
155158
# since we don't need to call .to_list()
156-
sources_sets = []
159+
# Also avoid deap transitive depset()s by creating single array of
160+
# transitive depset()s
161+
sources_depsets = []
157162

158163
for d in ctx.attr.data:
159164
# TODO: switch to JSModuleInfo when it is available
160165
if JSNamedModuleInfo in d:
161-
sources_sets.append(d[JSNamedModuleInfo].sources)
166+
sources_depsets.append(d[JSNamedModuleInfo].sources)
162167
if hasattr(d, "files"):
163-
sources_sets.append(d.files)
164-
sources = depset(transitive = sources_sets)
168+
sources_depsets.append(d.files)
169+
sources = depset(transitive = sources_depsets)
165170

166171
_write_loader_script(ctx)
167172

@@ -248,23 +253,27 @@ def _nodejs_binary_impl(ctx):
248253
is_executable = True,
249254
)
250255

251-
runfiles = depset(node_tool_files + ctx.files._bash_runfile_helpers + [ctx.outputs.loader, ctx.file._repository_args], transitive = [sources, node_modules])
256+
runfiles = []
257+
runfiles.extend(node_tool_files)
258+
runfiles.extend(ctx.files._bash_runfile_helpers)
259+
runfiles.append(ctx.outputs.loader)
260+
runfiles.append(ctx.file._repository_args)
252261

253262
if is_windows(ctx):
254-
runfiles = depset([ctx.outputs.script], transitive = [runfiles])
263+
runfiles.append(ctx.outputs.script)
255264
executable = create_windows_native_launcher_script(ctx, ctx.outputs.script)
256265
else:
257266
executable = ctx.outputs.script
258267

259268
# entry point is only needed in runfiles if it is a .js file
260269
if ctx.file.entry_point.extension == "js":
261-
runfiles = depset([ctx.file.entry_point], transitive = [runfiles])
270+
runfiles.append(ctx.file.entry_point)
262271

263272
return [
264273
DefaultInfo(
265274
executable = executable,
266275
runfiles = ctx.runfiles(
267-
transitive_files = runfiles,
276+
transitive_files = depset(runfiles),
268277
files = node_tool_files + [
269278
ctx.outputs.loader,
270279
] + ctx.files._source_map_support_files +

packages/labs/src/protobufjs/ts_proto_library.bzl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def _run_pbts(actions, executable, js_file):
7070
return ts_file
7171

7272
def _ts_proto_library(ctx):
73-
sources = depset()
73+
sources_depsets = []
7474
for dep in ctx.attr.deps:
7575
if ProtoInfo not in dep:
7676
fail("ts_proto_library dep %s must be a proto_library rule" % dep.label)
@@ -79,7 +79,9 @@ def _ts_proto_library(ctx):
7979
# > should not parse .proto files. Instead, they should use the descriptor
8080
# > set output from proto_library
8181
# but protobuf.js doesn't seem to accept that bin format
82-
sources = depset(transitive = [sources, dep[ProtoInfo].transitive_sources])
82+
sources_depsets.append(dep[ProtoInfo].transitive_sources)
83+
84+
sources = depset(transitive = sources_depsets)
8385

8486
output_name = ctx.attr.output_name or ctx.label.name
8587

0 commit comments

Comments
 (0)