refactor: Centralize empty name check

This commit is contained in:
Ed Page 2023-12-13 09:36:14 -06:00
parent 2db5c9dd59
commit a383185c38
8 changed files with 6 additions and 28 deletions

View File

@ -1,6 +1,5 @@
//! Crate name parsing. //! Crate name parsing.
use anyhow::bail;
use anyhow::Context as _; use anyhow::Context as _;
use super::Dependency; use super::Dependency;
@ -29,9 +28,6 @@ impl CrateSpec {
.map(|(n, v)| (n, Some(v))) .map(|(n, v)| (n, Some(v)))
.unwrap_or((pkg_id, None)); .unwrap_or((pkg_id, None));
if name.is_empty() {
bail!("dependency name cannot be empty");
}
validate_package_name(name, "dependency name", "")?; validate_package_name(name, "dependency name", "")?;
if let Some(version) = version { if let Some(version) = version {

View File

@ -4,7 +4,7 @@ use crate::util::important_paths::find_root_manifest_for_wd;
use crate::util::toml_mut::is_sorted; use crate::util::toml_mut::is_sorted;
use crate::util::{existing_vcs_repo, FossilRepo, GitRepo, HgRepo, PijulRepo}; use crate::util::{existing_vcs_repo, FossilRepo, GitRepo, HgRepo, PijulRepo};
use crate::util::{restricted_names, Config}; use crate::util::{restricted_names, Config};
use anyhow::{anyhow, bail, Context}; use anyhow::{anyhow, Context};
use cargo_util::paths::{self, write_atomic}; use cargo_util::paths::{self, write_atomic};
use serde::de; use serde::de;
use serde::Deserialize; use serde::Deserialize;
@ -197,9 +197,6 @@ fn check_name(
} }
help help
}; };
if name.is_empty() {
bail!("package name cannot be empty");
}
restricted_names::validate_package_name(name, "package name", &bin_help())?; restricted_names::validate_package_name(name, "package name", &bin_help())?;
if restricted_names::is_keyword(name) { if restricted_names::is_keyword(name) {

View File

@ -833,9 +833,6 @@ Run `{cmd}` to see possible targets."
(None, None) => config.default_registry()?.map(RegistryOrIndex::Registry), (None, None) => config.default_registry()?.map(RegistryOrIndex::Registry),
(None, Some(i)) => Some(RegistryOrIndex::Index(i.into_url()?)), (None, Some(i)) => Some(RegistryOrIndex::Index(i.into_url()?)),
(Some(r), None) => { (Some(r), None) => {
if r.is_empty() {
bail!("registry name cannot be empty");
}
restricted_names::validate_package_name(r, "registry name", "")?; restricted_names::validate_package_name(r, "registry name", "")?;
Some(RegistryOrIndex::Registry(r.to_string())) Some(RegistryOrIndex::Registry(r.to_string()))
} }
@ -851,9 +848,6 @@ Run `{cmd}` to see possible targets."
match self._value_of("registry").map(|s| s.to_string()) { match self._value_of("registry").map(|s| s.to_string()) {
None => config.default_registry(), None => config.default_registry(),
Some(registry) => { Some(registry) => {
if registry.is_empty() {
bail!("registry name cannot be empty");
}
restricted_names::validate_package_name(&registry, "registry name", "")?; restricted_names::validate_package_name(&registry, "registry name", "")?;
Ok(Some(registry)) Ok(Some(registry))
} }

View File

@ -1551,9 +1551,6 @@ impl Config {
/// Gets the index for a registry. /// Gets the index for a registry.
pub fn get_registry_index(&self, registry: &str) -> CargoResult<Url> { pub fn get_registry_index(&self, registry: &str) -> CargoResult<Url> {
if registry.is_empty() {
bail!("registry name cannot be empty");
}
validate_package_name(registry, "registry name", "")?; validate_package_name(registry, "registry name", "")?;
if let Some(index) = self.get_string(&format!("registries.{}.index", registry))? { if let Some(index) = self.get_string(&format!("registries.{}.index", registry))? {
self.resolve_registry_index(&index).with_context(|| { self.resolve_registry_index(&index).with_context(|| {

View File

@ -43,6 +43,10 @@ pub fn is_conflicting_artifact_name(name: &str) -> bool {
/// elsewhere. `cargo new` has a few restrictions, such as checking for /// elsewhere. `cargo new` has a few restrictions, such as checking for
/// reserved names. crates.io has even more restrictions. /// reserved names. crates.io has even more restrictions.
pub fn validate_package_name(name: &str, what: &str, help: &str) -> CargoResult<()> { pub fn validate_package_name(name: &str, what: &str, help: &str) -> CargoResult<()> {
if name.is_empty() {
bail!("{what} cannot be empty");
}
let mut chars = name.chars(); let mut chars = name.chars();
if let Some(ch) = chars.next() { if let Some(ch) = chars.next() {
if ch.is_digit(10) { if ch.is_digit(10) {

View File

@ -480,10 +480,6 @@ pub fn to_real_manifest(
}; };
let package_name = package.name.trim(); let package_name = package.name.trim();
if package_name.is_empty() {
bail!("package name cannot be an empty string")
}
validate_package_name(package_name, "package name", "")?; validate_package_name(package_name, "package name", "")?;
let resolved_path = package_root.join("Cargo.toml"); let resolved_path = package_root.join("Cargo.toml");

View File

@ -97,9 +97,6 @@ impl PackageIdSpec {
Some(version) => Some(version.parse::<PartialVersion>()?), Some(version) => Some(version.parse::<PartialVersion>()?),
None => None, None => None,
}; };
if name.is_empty() {
bail!("package ID specification must have a name: `{spec}`");
}
validate_package_name(name, "pkgid", "")?; validate_package_name(name, "pkgid", "")?;
Ok(PackageIdSpec { Ok(PackageIdSpec {
name: String::from(name), name: String::from(name),
@ -185,9 +182,6 @@ impl PackageIdSpec {
None => (String::from(path_name), None), None => (String::from(path_name), None),
} }
}; };
if name.is_empty() {
bail!("package ID specification must have a name: `{url}`");
}
validate_package_name(name.as_str(), "pkgid", "")?; validate_package_name(name.as_str(), "pkgid", "")?;
Ok(PackageIdSpec { Ok(PackageIdSpec {
name, name,

View File

@ -460,7 +460,7 @@ fn cargo_compile_with_empty_package_name() {
[ERROR] failed to parse manifest at `[..]` [ERROR] failed to parse manifest at `[..]`
Caused by: Caused by:
package name cannot be an empty string package name cannot be empty
", ",
) )
.run(); .run();