Skip to content

Commit 866d51d

Browse files
committed
refactor(package): Make prepare for publish a higher level operation
1 parent 3c3a8cf commit 866d51d

File tree

2 files changed

+27
-26
lines changed

2 files changed

+27
-26
lines changed

src/cargo/ops/cargo_package.rs

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use std::sync::Arc;
77
use std::task::Poll;
88

99
use crate::core::compiler::{BuildConfig, CompileMode, DefaultExecutor, Executor};
10-
use crate::core::manifest;
1110
use crate::core::manifest::Target;
1211
use crate::core::resolver::CliFeatures;
1312
use crate::core::{registry::PackageRegistry, resolver::HasDevUnits};
@@ -17,7 +16,7 @@ use crate::sources::PathSource;
1716
use crate::util::cache_lock::CacheLockMode;
1817
use crate::util::context::JobsConfig;
1918
use crate::util::errors::CargoResult;
20-
use crate::util::toml::{prepare_for_publish, to_real_manifest};
19+
use crate::util::toml::prepare_for_publish;
2120
use crate::util::{self, human_readable_bytes, restricted_names, FileLock, GlobalContext};
2221
use crate::{drop_println, ops};
2322
use anyhow::Context as _;
@@ -453,24 +452,7 @@ fn build_lock(ws: &Workspace<'_>, orig_pkg: &Package) -> CargoResult<String> {
453452
let gctx = ws.gctx();
454453
let orig_resolve = ops::load_pkg_lockfile(ws)?;
455454

456-
// Convert Package -> TomlManifest -> Manifest -> Package
457-
let contents = orig_pkg.manifest().contents();
458-
let document = orig_pkg.manifest().document();
459-
let toml_manifest =
460-
prepare_for_publish(orig_pkg.manifest().resolved_toml(), ws, orig_pkg.root())?;
461-
let source_id = orig_pkg.package_id().source_id();
462-
let mut warnings = Default::default();
463-
let mut errors = Default::default();
464-
let manifest = to_real_manifest(
465-
contents.to_owned(),
466-
document.clone(),
467-
toml_manifest,
468-
source_id,
469-
orig_pkg.manifest_path(),
470-
gctx,
471-
&mut warnings,
472-
&mut errors,
473-
)?;
455+
let manifest = prepare_for_publish(orig_pkg, ws)?;
474456
let new_pkg = Package::new(manifest, orig_pkg.manifest_path());
475457

476458
// Regenerate Cargo.lock using the old one as a guide.
@@ -736,10 +718,8 @@ fn tar(
736718
FileContents::Generated(generated_kind) => {
737719
let contents = match generated_kind {
738720
GeneratedFile::Manifest => {
739-
let manifest =
740-
prepare_for_publish(pkg.manifest().resolved_toml(), ws, pkg.root())?;
741-
let toml = toml::to_string_pretty(&manifest)?;
742-
format!("{}\n{}", manifest::MANIFEST_PREAMBLE, toml)
721+
let manifest = prepare_for_publish(pkg, ws)?;
722+
manifest.to_resolved_contents()?
743723
}
744724
GeneratedFile::Lockfile => build_lock(ws, pkg)?,
745725
GeneratedFile::VcsInfo(ref s) => serde_json::to_string_pretty(s)?,

src/cargo/util/toml/mod.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::core::dependency::{Artifact, ArtifactTarget, DepKind};
2121
use crate::core::manifest::{ManifestMetadata, TargetSourcePath};
2222
use crate::core::resolver::ResolveBehavior;
2323
use crate::core::{find_workspace_root, resolve_relative_path, CliUnstable, FeatureValue};
24-
use crate::core::{Dependency, Manifest, PackageId, Summary, Target};
24+
use crate::core::{Dependency, Manifest, Package, PackageId, Summary, Target};
2525
use crate::core::{Edition, EitherManifest, Feature, Features, VirtualManifest, Workspace};
2626
use crate::core::{GitReference, PackageIdSpec, SourceId, WorkspaceConfig, WorkspaceRootConfig};
2727
use crate::sources::{CRATES_IO_INDEX, CRATES_IO_REGISTRY};
@@ -218,10 +218,31 @@ fn warn_on_unused(unused: &BTreeSet<String>, warnings: &mut Vec<String>) {
218218
}
219219
}
220220

221+
pub fn prepare_for_publish(me: &Package, ws: &Workspace<'_>) -> CargoResult<Manifest> {
222+
let contents = me.manifest().contents();
223+
let document = me.manifest().document();
224+
let toml_manifest = prepare_toml_for_publish(me.manifest().resolved_toml(), ws, me.root())?;
225+
let source_id = me.package_id().source_id();
226+
let mut warnings = Default::default();
227+
let mut errors = Default::default();
228+
let gctx = ws.gctx();
229+
let manifest = to_real_manifest(
230+
contents.to_owned(),
231+
document.clone(),
232+
toml_manifest,
233+
source_id,
234+
me.manifest_path(),
235+
gctx,
236+
&mut warnings,
237+
&mut errors,
238+
)?;
239+
Ok(manifest)
240+
}
241+
221242
/// Prepares the manifest for publishing.
222243
// - Path and git components of dependency specifications are removed.
223244
// - License path is updated to point within the package.
224-
pub fn prepare_for_publish(
245+
fn prepare_toml_for_publish(
225246
me: &manifest::TomlManifest,
226247
ws: &Workspace<'_>,
227248
package_root: &Path,

0 commit comments

Comments
 (0)