Skip to content

Commit ad42c06

Browse files
committed
bazel: use top level dependencies only
When consuming the lock file make sure we only make use of the top level dependencies ignoring transitive ones.
1 parent c4e30db commit ad42c06

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

bazeldnf/extensions.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def _handle_lock_file(config, module_ctx, registered_rpms = {}):
211211
dependencies = []
212212
else:
213213
dependencies = [x.replace("+", "plus") for x in dependencies]
214-
dependencies = ["@{}{}//rpm".format(config.rpm_repository_prefix, x) for x in dependencies]
214+
dependencies = ["@{}{}//rpm:rpm-file".format(config.rpm_repository_prefix, x) for x in dependencies]
215215

216216
rpm_name = rpm.pop("name", None)
217217
if not rpm_name:

internal/rpm.bzl

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ RpmInfo = provider(
2424
other rules like rpmtree
2525
""",
2626
fields = {
27-
"deps": "depset of other dependencies",
27+
"deps": "label of the RPM dependencies",
2828
"file": "label of the RPM file",
2929
},
3030
)
@@ -34,36 +34,38 @@ def _rpm_rule_impl(ctx):
3434
Implementation for the rpm rule
3535
3636
Allows to pass information about an RPM file to other rules
37-
like rpmtree, keeping track of the dependency tree
37+
like rpmtree, keeping track of target rpm plus it's entire
38+
dependency list
3839
"""
39-
deps_list = []
40-
41-
for dep in ctx.attr.deps:
42-
deps_list.append(dep[RpmInfo].deps)
43-
4440
rpm_info = RpmInfo(
4541
file = ctx.file.file,
46-
deps = depset(direct = [ctx.file.file], transitive = deps_list),
42+
deps = ctx.files.deps,
4743
)
4844

4945
return [
5046
rpm_info,
5147
DefaultInfo(
52-
files = depset(direct = [ctx.file.file], transitive = deps_list),
48+
files = depset(direct = [ctx.file.file] + ctx.files.deps),
5349
),
5450
]
5551

5652
rpm_rule = rule(
5753
implementation = _rpm_rule_impl,
5854
attrs = {
5955
"file": attr.label(allow_single_file = True, mandatory = True),
60-
"deps": attr.label_list(providers = [RpmInfo]),
56+
"deps": attr.label_list(allow_files = True, mandatory = False),
6157
},
6258
)
6359

6460
_HTTP_FILE_BUILD = """
6561
load("@bazeldnf//internal:rpm.bzl", "rpm_rule")
6662
package(default_visibility = ["//visibility:public"])
63+
64+
filegroup(
65+
name = "rpm-file",
66+
srcs = ["{downloaded_file_path}"],
67+
)
68+
6769
rpm_rule(
6870
name = "rpm",
6971
file = "{downloaded_file_path}",
@@ -102,7 +104,6 @@ _rpm_attrs = {
102104
"integrity": attr.string(),
103105
"dependencies": attr.label_list(
104106
mandatory = False,
105-
providers = [RpmInfo],
106107
),
107108
}
108109

@@ -115,7 +116,7 @@ def _null_rpm_rule_impl(_):
115116
return [
116117
RpmInfo(
117118
file = "",
118-
deps = depset(),
119+
deps = [],
119120
),
120121
DefaultInfo(files = depset()),
121122
]

internal/rpmtree.bzl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ def _rpm2tar_impl(ctx):
4949
all_rpms = []
5050

5151
for target in ctx.attr.rpms:
52-
for rpm in target[RpmInfo].deps.to_list():
52+
if target[RpmInfo].file not in all_rpms:
53+
all_rpms.append(target[RpmInfo].file)
54+
55+
for rpm in target[RpmInfo].deps:
5356
if rpm not in all_rpms:
5457
all_rpms.append(rpm)
5558

0 commit comments

Comments
 (0)