Skip to content

Commit 1469cd7

Browse files
authored
Fix labels to work with canonical label literals. (#1700)
For more details, see https://docs.google.com/document/d/1N81qfCa8oskCk5LqTW-LNthy6EBrDot7bdUsjz6JFC4/edit#heading=h.5mcn15i0e1ch. This allows us to use crate_universe on a repo with bzlmod enabled.
1 parent 5826a50 commit 1469cd7

File tree

1 file changed

+12
-3
lines changed
  • crate_universe/src/utils/starlark

1 file changed

+12
-3
lines changed

crate_universe/src/utils/starlark/label.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl FromStr for Label {
2020
type Err = anyhow::Error;
2121

2222
fn from_str(s: &str) -> Result<Self, Self::Err> {
23-
let re = Regex::new(r"^(@[\w\d\-_\.]*)?/{0,2}([\w\d\-_\./+]+)?(:([\+\w\d\-_\./]+))?$")?;
23+
let re = Regex::new(r"^(@@?[\w\d\-_\.]*)?/{0,2}([\w\d\-_\./+]+)?(:([\+\w\d\-_\./]+))?$")?;
2424
let cap = re
2525
.captures(s)
2626
.with_context(|| format!("Failed to parse label from string: {}", s))?;
@@ -192,6 +192,15 @@ mod test {
192192
use std::fs::{create_dir_all, File};
193193
use tempfile::tempdir;
194194

195+
#[test]
196+
fn full_label_bzlmod() {
197+
let label = Label::from_str("@@repo//package/sub_package:target").unwrap();
198+
assert_eq!(label.to_string(), "@repo//package/sub_package:target");
199+
assert_eq!(label.repository.unwrap(), "repo");
200+
assert_eq!(label.package.unwrap(), "package/sub_package");
201+
assert_eq!(label.target, "target");
202+
}
203+
195204
#[test]
196205
fn full_label() {
197206
let label = Label::from_str("@repo//package/sub_package:target").unwrap();
@@ -276,8 +285,8 @@ mod test {
276285
}
277286

278287
#[test]
279-
fn invalid_double_at() {
280-
assert!(Label::from_str("@@repo//pkg:target").is_err());
288+
fn invalid_triple_at() {
289+
assert!(Label::from_str("@@@repo//pkg:target").is_err());
281290
}
282291

283292
#[test]

0 commit comments

Comments
 (0)