Skip to content

Commit 2fed360

Browse files
committed
Factor out a function for building a NewCrate.
1 parent 8e546a7 commit 2fed360

File tree

1 file changed

+51
-36
lines changed

1 file changed

+51
-36
lines changed

src/cargo/ops/registry/publish.rs

+51-36
Original file line numberDiff line numberDiff line change
@@ -319,14 +319,12 @@ fn verify_dependencies(
319319
Ok(())
320320
}
321321

322-
fn transmit(
322+
pub(crate) fn prepare_transmit(
323323
gctx: &GlobalContext,
324324
pkg: &Package,
325-
tarball: &File,
326-
registry: &mut Registry,
327325
registry_id: SourceId,
328-
dry_run: bool,
329-
) -> CargoResult<()> {
326+
require_readme_and_license: bool,
327+
) -> CargoResult<NewCrate> {
330328
let deps = pkg
331329
.dependencies()
332330
.iter()
@@ -401,19 +399,20 @@ fn transmit(
401399
paths::read(&pkg.root().join(readme))
402400
.with_context(|| format!("failed to read `readme` file for package `{}`", pkg))
403401
})
404-
.transpose()?;
402+
.transpose()
403+
.or_else(|e| {
404+
if require_readme_and_license {
405+
Err(e)
406+
} else {
407+
Ok(None)
408+
}
409+
})?;
405410
if let Some(ref file) = *license_file {
406-
if !pkg.root().join(file).exists() {
411+
if require_readme_and_license && !pkg.root().join(file).exists() {
407412
bail!("the license file `{}` does not exist", file)
408413
}
409414
}
410415

411-
// Do not upload if performing a dry run
412-
if dry_run {
413-
gctx.shell().warn("aborting upload due to dry run")?;
414-
return Ok(());
415-
}
416-
417416
let deps_set = deps
418417
.iter()
419418
.map(|dep| dep.name.clone())
@@ -445,30 +444,46 @@ fn transmit(
445444
None => BTreeMap::new(),
446445
};
447446

447+
Ok(NewCrate {
448+
name: pkg.name().to_string(),
449+
vers: pkg.version().to_string(),
450+
deps,
451+
features: string_features,
452+
authors: authors.clone(),
453+
description: description.clone(),
454+
homepage: homepage.clone(),
455+
documentation: documentation.clone(),
456+
keywords: keywords.clone(),
457+
categories: categories.clone(),
458+
readme: readme_content,
459+
readme_file: readme.clone(),
460+
repository: repository.clone(),
461+
license: license.clone(),
462+
license_file: license_file.clone(),
463+
badges: badges.clone(),
464+
links: links.clone(),
465+
rust_version,
466+
})
467+
}
468+
469+
fn transmit(
470+
gctx: &GlobalContext,
471+
pkg: &Package,
472+
tarball: &File,
473+
registry: &mut Registry,
474+
registry_id: SourceId,
475+
dry_run: bool,
476+
) -> CargoResult<()> {
477+
let new_crate = prepare_transmit(gctx, pkg, registry_id, true)?;
478+
479+
// Do not upload if performing a dry run
480+
if dry_run {
481+
gctx.shell().warn("aborting upload due to dry run")?;
482+
return Ok(());
483+
}
484+
448485
let warnings = registry
449-
.publish(
450-
&NewCrate {
451-
name: pkg.name().to_string(),
452-
vers: pkg.version().to_string(),
453-
deps,
454-
features: string_features,
455-
authors: authors.clone(),
456-
description: description.clone(),
457-
homepage: homepage.clone(),
458-
documentation: documentation.clone(),
459-
keywords: keywords.clone(),
460-
categories: categories.clone(),
461-
readme: readme_content,
462-
readme_file: readme.clone(),
463-
repository: repository.clone(),
464-
license: license.clone(),
465-
license_file: license_file.clone(),
466-
badges: badges.clone(),
467-
links: links.clone(),
468-
rust_version,
469-
},
470-
tarball,
471-
)
486+
.publish(&new_crate, tarball)
472487
.with_context(|| format!("failed to publish to registry at {}", registry.host()))?;
473488

474489
if !warnings.invalid_categories.is_empty() {

0 commit comments

Comments
 (0)