Skip to content

Commit 8461b75

Browse files
committed
Allow ~ in repository names
Fixes bazelbuild#2426
1 parent cd3f80b commit 8461b75

File tree

1 file changed

+14
-1
lines changed
  • crate_universe/src/utils/starlark

1 file changed

+14
-1
lines changed

crate_universe/src/utils/starlark/label.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ impl FromStr for Label {
6363
type Err = anyhow::Error;
6464

6565
fn from_str(s: &str) -> Result<Self, Self::Err> {
66-
let re = Regex::new(r"^(@@?[\w\d\-_\.]*)?(//)?([\w\d\-_\./+]+)?(:([\+\w\d\-_\./]+))?$")?;
66+
let re = Regex::new(r"^(@@?[\w\d\-_\.~]*)?(//)?([\w\d\-_\./+]+)?(:([\+\w\d\-_\./]+))?$")?;
6767
let cap = re
6868
.captures(s)
6969
.with_context(|| format!("Failed to parse label from string: {s}"))?;
@@ -449,6 +449,19 @@ mod test {
449449
assert_eq!(label.target(), "target");
450450
}
451451

452+
#[test]
453+
fn full_label_bzlmod_with_tilde() {
454+
let label = Label::from_str("@@repo~name//package/sub_package:target").unwrap();
455+
assert_eq!(label.to_string(), "@@repo~name//package/sub_package:target");
456+
assert!(label.is_absolute());
457+
assert_eq!(
458+
label.repository(),
459+
Some(&Repository::Canonical(String::from("repo~name")))
460+
);
461+
assert_eq!(label.package(), Some("package/sub_package"));
462+
assert_eq!(label.target(), "target");
463+
}
464+
452465
#[test]
453466
fn full_label_with_slash_after_colon() {
454467
let label = Label::from_str("@repo//package/sub_package:subdir/target").unwrap();

0 commit comments

Comments
 (0)