Skip to content

Commit ba43404

Browse files
committed
publish: Extract validate_dependency() fn
1 parent ba4e59d commit ba43404

File tree

1 file changed

+45
-39
lines changed

1 file changed

+45
-39
lines changed

src/controllers/krate/publish.rs

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -434,54 +434,60 @@ fn missing_metadata_error_message(missing: &[&str]) -> String {
434434
#[instrument(skip_all)]
435435
pub fn validate_dependencies(deps: &[EncodableCrateDependency]) -> AppResult<()> {
436436
for dep in deps {
437-
if !Crate::valid_name(&dep.name) {
437+
validate_dependency(dep)?;
438+
}
439+
440+
Ok(())
441+
}
442+
443+
pub fn validate_dependency(dep: &EncodableCrateDependency) -> AppResult<()> {
444+
if !Crate::valid_name(&dep.name) {
445+
return Err(cargo_err(&format_args!(
446+
"\"{}\" is an invalid dependency name (dependency names must \
447+
start with a letter, contain only letters, numbers, hyphens, \
448+
or underscores and have at most {MAX_NAME_LENGTH} characters)",
449+
dep.name
450+
)));
451+
}
452+
453+
for feature in &dep.features {
454+
if !Crate::valid_feature(feature) {
438455
return Err(cargo_err(&format_args!(
439-
"\"{}\" is an invalid dependency name (dependency names must \
440-
start with a letter, contain only letters, numbers, hyphens, \
441-
or underscores and have at most {MAX_NAME_LENGTH} characters)",
442-
dep.name
456+
"\"{feature}\" is an invalid feature name",
443457
)));
444458
}
459+
}
445460

446-
for feature in &dep.features {
447-
if !Crate::valid_feature(feature) {
448-
return Err(cargo_err(&format_args!(
449-
"\"{feature}\" is an invalid feature name",
450-
)));
451-
}
461+
if let Some(registry) = &dep.registry {
462+
if !registry.is_empty() {
463+
return Err(cargo_err(&format_args!("Dependency `{}` is hosted on another registry. Cross-registry dependencies are not permitted on crates.io.", dep.name)));
452464
}
465+
}
453466

454-
if let Some(registry) = &dep.registry {
455-
if !registry.is_empty() {
456-
return Err(cargo_err(&format_args!("Dependency `{}` is hosted on another registry. Cross-registry dependencies are not permitted on crates.io.", dep.name)));
457-
}
467+
match semver::VersionReq::parse(&dep.version_req) {
468+
Err(_) => {
469+
return Err(cargo_err(&format_args!(
470+
"\"{}\" is an invalid version requirement",
471+
dep.version_req
472+
)));
458473
}
459-
460-
match semver::VersionReq::parse(&dep.version_req) {
461-
Err(_) => {
462-
return Err(cargo_err(&format_args!(
463-
"\"{}\" is an invalid version requirement",
464-
dep.version_req
465-
)));
466-
}
467-
Ok(req) if req == semver::VersionReq::STAR => {
468-
return Err(cargo_err(&format_args!("wildcard (`*`) dependency constraints are not allowed \
469-
on crates.io. Crate with this problem: `{}` See https://doc.rust-lang.org/cargo/faq.html#can-\
470-
libraries-use--as-a-version-for-their-dependencies for more \
471-
information", dep.name)));
472-
}
473-
_ => {}
474+
Ok(req) if req == semver::VersionReq::STAR => {
475+
return Err(cargo_err(&format_args!("wildcard (`*`) dependency constraints are not allowed \
476+
on crates.io. Crate with this problem: `{}` See https://doc.rust-lang.org/cargo/faq.html#can-\
477+
libraries-use--as-a-version-for-their-dependencies for more \
478+
information", dep.name)));
474479
}
480+
_ => {}
481+
}
475482

476-
if let Some(toml_name) = &dep.explicit_name_in_toml {
477-
if !Crate::valid_dependency_name(toml_name) {
478-
return Err(cargo_err(&format_args!(
479-
"\"{toml_name}\" is an invalid dependency name (dependency \
480-
names must start with a letter or underscore, contain only \
481-
letters, numbers, hyphens, or underscores and have at most \
482-
{MAX_NAME_LENGTH} characters)"
483-
)));
484-
}
483+
if let Some(toml_name) = &dep.explicit_name_in_toml {
484+
if !Crate::valid_dependency_name(toml_name) {
485+
return Err(cargo_err(&format_args!(
486+
"\"{toml_name}\" is an invalid dependency name (dependency \
487+
names must start with a letter or underscore, contain only \
488+
letters, numbers, hyphens, or underscores and have at most \
489+
{MAX_NAME_LENGTH} characters)"
490+
)));
485491
}
486492
}
487493

0 commit comments

Comments
 (0)