Add a repeatable string list flag rule to skylib

This commit is contained in:
Nick Reid 2024-10-25 18:51:24 +00:00
parent 505e1bc3aa
commit 74a0a527b4
3 changed files with 37 additions and 1 deletions

View File

@ -126,6 +126,24 @@ A string list-typed build setting that can be set on the command line
| <a id="string_list_flag-scope"></a>scope | The scope indicates where a flag can propagate to | String | optional | `"universal"` |
<a id="#string_list_repeatable_flag"></a>
## string_list_repeatable_flag
<pre>
string_list_repeatable_flag(<a href="#string_list_repeatable_flag-name">name</a>)
</pre>
A string list-typed build setting that can be accumulated on the command line
**ATTRIBUTES**
| Name | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| <a id="string_list_repeatable_flag-name"></a>name | A unique name for this target. | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required | |
<a id="string_list_setting"></a>
## string_list_setting

View File

@ -123,6 +123,12 @@ string_list_flag = rule(
doc = "A string list-typed build setting that can be set on the command line",
)
string_list_repeatable_flag = rule(
implementation = _impl,
build_setting = config.string_list(flag = True, repeatable = True),
doc = "A string list-typed build setting that can be accumulated on the command line",
)
string_list_setting = rule(
implementation = _impl,
build_setting = config.string_list(),

View File

@ -66,7 +66,8 @@ def _volcano_impl(ctx):
height = ctx.attr.height[BuildSettingInfo].value,
active = ctx.attr.active[BuildSettingInfo].value,
namer = ctx.attr.namer[BuildSettingInfo].value,
nicknames = ctx.attr.nicknames[BuildSettingInfo].value
nicknames = ctx.attr.nicknames[BuildSettingInfo].value,
hazards = ctx.attr.hazards[BuildSettingInfo].value
)
print(description)
@ -77,6 +78,7 @@ volcano = rule(
"active" : attr.label(),
"namer": attr.label(),
"nicknames": attr.label(),
"hazards": attr.label(),
}
)
EOF
@ -89,6 +91,7 @@ load(
"bool_flag",
"string_flag",
"string_list_flag",
"string_list_repeatable_flag",
)
load("//volcano:rules.bzl", "volcano")
@ -113,6 +116,11 @@ string_list_flag(
build_setting_default = ["loowit", "loowitiatkla", "lavelatla"]
)
string_list_repeatable_flag(
name = "hazards-flag",
build_setting_default = ["lava", "pyroclastic-flow", "ash"]
)
int_setting(
name = "height-setting",
build_setting_default = 9677
@ -124,6 +132,7 @@ volcano(
active = ":active-flag",
namer = ":namer-flag",
nicknames = ":nicknames-flag",
hazards = ":hazards-flag",
)
EOF
@ -136,12 +145,15 @@ function test_can_set_flags() {
bazel build volcano:mt-st-helens --//volcano:height-flag=8366 \
--//volcano:active-flag=False --//volcano:namer-flag=puyallup-tribe \
--//volcano:nicknames-flag=volcano-mc-volcanoface \
--//volcano:hazards-flag=lava \
--//volcano:hazards-flag=hydrogen-sulfide \
>"$TEST_log" 2>&1 || fail "Expected test to pass"
expect_log "active = False"
expect_log "height = 8366"
expect_log "namer = \"puyallup-tribe\""
expect_log "nicknames = \[\"volcano-mc-volcanoface\"\]"
expect_log "hazards = \[\"lava\"\, \"hydrogen-sulfide\"]"
}
function test_cannot_set_settings() {