diff --git a/core/services/hf/src/core.rs b/core/services/hf/src/core.rs index dff4d84bdc81..26ab4cdf10da 100644 --- a/core/services/hf/src/core.rs +++ b/core/services/hf/src/core.rs @@ -1057,21 +1057,15 @@ mod uri { // Match special refs: refs/(convert|pr)/ if let Some(rest) = rev_and_path.strip_prefix("refs/convert/") { - return if let Some(slash) = rest.find('/') { - ( - rev_and_path[..14 + slash].to_string(), - rest[slash + 1..].to_string(), - ) - } else { - (rev_and_path.to_string(), String::new()) + return match rest.split_once('/') { + Some((segment, path)) => (format!("refs/convert/{segment}"), path.to_string()), + None => (rev_and_path.to_string(), String::new()), }; } if let Some(rest) = rev_and_path.strip_prefix("refs/pr/") { - return if let Some(slash) = rest.find('/') { - let revision = format!("refs/pr/{}", &rest[..slash]); - (revision, rest[slash + 1..].to_string()) - } else { - (rev_and_path.to_string(), String::new()) + return match rest.split_once('/') { + Some((segment, path)) => (format!("refs/pr/{segment}"), path.to_string()), + None => (rev_and_path.to_string(), String::new()), }; } @@ -1267,6 +1261,15 @@ mod uri { assert_eq!(p.path, ""); } + #[test] + fn resolve_refs_convert_revision_with_path() { + let p = resolve("datasets/squad@refs/convert/parquet/default/train/0000.parquet"); + assert_eq!(p.repo.repo_type, HfRepoType::Dataset); + assert_eq!(p.repo.repo_id, "squad"); + assert_eq!(p.repo.revision.as_deref(), Some("refs/convert/parquet")); + assert_eq!(p.path, "default/train/0000.parquet"); + } + #[test] fn resolve_refs_pr_revision() { let p = resolve("username/my_model@refs/pr/10");