History

crude fix to avoid version related invariants to kick in during dependency resolution (#222)

Sebastian Thiel committed 5 years ago

Commit 3cdebf51 parent c03e8cb4 files · +59 −79Browse files

Unified · Split

4 files
  1. cargo-smart-release/src/command/release/manifest.rs +3 −3
  2. cargo-smart-release/src/command/release/mod.rs +48 −55
  3. cargo-smart-release/src/utils.rs +1 −1
  4. cargo-smart-release/src/version.rs +7 −20
cargo-smart-release/src/command/release/manifest.rs+3−3
@@ -48,12 +48,12 @@ pub(in crate::command::release_impl) fn edit_version_and_fixup_dependent_crates_ · 47 unmodified lines
4848
4949 let crates_with_version_change: Vec<_> = crates
5050 .iter()
51− .filter_map(|c| c.mode.version_adjustment_bump().map(|b| (c.package, b.next_release())))
51+ .filter_map(|c| c.mode.version_adjustment_bump().map(|b| (c.package, &b.next_release)))
5252 .collect();
5353 for (package, possibly_new_version) in crates
5454 .iter()
5555 .filter(|c| c.mode.manifest_will_change())
56− .map(|c| (c.package, c.mode.version_adjustment_bump().map(|b| b.next_release())))
56+ .map(|c| (c.package, c.mode.version_adjustment_bump().map(|b| &b.next_release)))
5757 {
5858 let mut entry_store;
5959 let lock = match locks_by_manifest_path.entry(&package.manifest_path) {
@@ -80,7 +80,7 @@ pub(in crate::command::release_impl) fn edit_version_and_fixup_dependent_crates_ · 20 unmodified lines
8080 && changelog_ids_probably_lacking_user_edits.is_empty());
8181 let safety_bumped_packages = crates
8282 .iter()
83− .filter_map(|c| c.mode.safety_bump().map(|b| (c.package, b.next_release())))
83+ .filter_map(|c| c.mode.safety_bump().map(|b| (c.package, &b.next_release)))
8484 .collect::<Vec<_>>();
8585 let commit_message = generate_commit_message(
8686 &crates_and_versions_to_be_published,
cargo-smart-release/src/command/release/mod.rs+48−55
@@ -205,58 +205,58 @@ fn present_dependencies( · 204 unmodified lines
205205 } => (bump, Some(causing_dependency_names)),
206206 VersionAdjustment::Changed { bump, .. } => (bump, None),
207207 };
208− match &bump.next_release {
209− Ok(next_release) => {
210− if next_release > &dep.package.version {
211− log::info!(
212− "{} {}-bump {} package '{}' from {} to {} for publishing{}{}{}",
213− will(dry_run),
214− bump_spec,
215− kind,
216− dep.package.name,
217− dep.package.version,
218− next_release,
219− bump.latest_release
220− .as_ref()
221− .and_then(|latest_release| {
222− (dep.package.version != *latest_release)
223− .then(|| format!(", {} on crates.io", latest_release))
224− })
225− .unwrap_or_default(),
226− breaking_dependencies
227− .map(|causes| format!(
228− ", for SAFETY due to breaking package{} {}",
229− if causes.len() == 1 { "" } else { "s" },
230− causes.iter().map(|n| format!("'{}'", n)).collect::<Vec<_>>().join(", ")
231− ))
232− .unwrap_or_default(),
233− (*next_release != bump.desired_release)
234− .then(|| format!(", ignoring computed version {}", bump.desired_release))
235− .unwrap_or_default(),
236− );
237− } else {
238− log::info!(
239− "Manifest version of {} package '{}' at {} is sufficient{}, ignoring computed version {}",
240− kind,
241− dep.package.name,
242− dep.package.version,
243− bump.latest_release
244− .as_ref()
245− .map(|latest_release| format!(" to succeed latest released version {}", latest_release))
246− .unwrap_or_else(|| ", creating a new release 🎉".into()),
247− bump.desired_release
248− );
249− }
250− }
251− Err(version::bump::Error::LatestReleaseMoreRecentThanDesiredOne(latest_release)) => {
252− log::warn!(
208+ if let Some(latest_release) = bump
209+ .latest_release
210+ .as_ref()
211+ .and_then(|lr| (*lr >= bump.desired_release).then(|| lr))
212+ {
213+ log::warn!(
253214 "Latest published version of '{}' is {}, the new version is {}. Consider using --bump <level> or --bump-dependencies <level> or update the index with --update-crates-index.",
254215 dep.package.name,
255216 latest_release,
256217 bump.desired_release
257218 );
258− error = true;
259− }
219+ error = true;
220+ }
221+ if bump.next_release > dep.package.version {
222+ log::info!(
223+ "{} {}-bump {} package '{}' from {} to {} for publishing{}{}{}",
224+ will(dry_run),
225+ bump_spec,
226+ kind,
227+ dep.package.name,
228+ dep.package.version,
229+ bump.next_release,
230+ bump.latest_release
231+ .as_ref()
232+ .and_then(|latest_release| {
233+ (dep.package.version != *latest_release)
234+ .then(|| format!(", {} on crates.io", latest_release))
235+ })
236+ .unwrap_or_default(),
237+ breaking_dependencies
238+ .map(|causes| format!(
239+ ", for SAFETY due to breaking package{} {}",
240+ if causes.len() == 1 { "" } else { "s" },
241+ causes.iter().map(|n| format!("'{}'", n)).collect::<Vec<_>>().join(", ")
242+ ))
243+ .unwrap_or_default(),
244+ (bump.next_release != bump.desired_release)
245+ .then(|| format!(", ignoring computed version {}", bump.desired_release))
246+ .unwrap_or_default(),
247+ );
248+ } else {
249+ log::info!(
250+ "Manifest version of {} package '{}' at {} is sufficient{}, ignoring computed version {}",
251+ kind,
252+ dep.package.name,
253+ dep.package.version,
254+ bump.latest_release
255+ .as_ref()
256+ .map(|latest_release| format!(" to succeed latest released version {}", latest_release))
257+ .unwrap_or_else(|| ", creating a new release 🎉".into()),
258+ bump.desired_release
259+ );
260260 };
261261 }
262262 dependency::Mode::NotForPublishing { .. } => {}
@@ -300,14 +300,7 @@ fn present_dependencies( · 37 unmodified lines
300300 cause,
301301 deps_and_bumps
302302 .into_iter()
303− .map(|(dep_name, bump)| format!(
304− "'{}' {} ➡ {}",
305− dep_name,
306− bump.package_version,
307− bump.next_release
308− .as_ref()
309− .expect("bailed earlier if there was an error")
310− ))
303+ .map(|(dep_name, bump)| format!("'{}' {} ➡ {}", dep_name, bump.package_version, bump.next_release))
311304 .collect::<Vec<_>>()
312305 .join(", ")
313306 );
cargo-smart-release/src/utils.rs+1−1
@@ -40,7 +40,7 @@ pub fn try_to_published_crate_and_new_version<'meta, 'a>( · 39 unmodified lines
4040 ) -> Option<(&'meta Package, &'a semver::Version)> {
4141 match &c.mode {
4242 crate::traverse::dependency::Mode::ToBePublished { adjustment } => {
43− Some((c.package, adjustment.bump().next_release()))
43+ Some((c.package, &adjustment.bump().next_release))
4444 }
4545 _ => None,
4646 }
cargo-smart-release/src/version.rs+7−20
@@ -59,31 +59,20 @@ fn bump_major_minor_patch(v: &mut semver::Version, bump_spec: BumpSpec) -> bool · 58 unmodified lines
5959 }
6060 }
6161
62−pub mod bump {
63− #[derive(Clone, Debug)]
64− pub enum Error {
65− LatestReleaseMoreRecentThanDesiredOne(semver::Version),
66− }
67−}
68−
6962 #[derive(Clone, Debug)]
7063 pub struct Bump {
71− pub next_release: Result<semver::Version, bump::Error>,
64+ pub next_release: semver::Version,
7265 pub package_version: semver::Version,
7366 pub latest_release: Option<semver::Version>,
7467 pub desired_release: semver::Version,
7568 }
7669
7770 impl Bump {
78− pub(crate) fn next_release(&self) -> &semver::Version {
79− self.next_release.as_ref().expect("only valid versions here")
80− }
81−
8271 pub(crate) fn next_release_changes_manifest(&self) -> bool {
83− self.next_release() > &self.package_version
72+ self.next_release > self.package_version
8473 }
8574 pub(crate) fn is_breaking(&self) -> bool {
86− rhs_is_breaking_bump_for_lhs(&self.package_version, self.next_release())
75+ rhs_is_breaking_bump_for_lhs(&self.package_version, &self.next_release)
8776 }
8877 }
8978
@@ -147,9 +136,7 @@ pub(crate) fn bump_package_with_spec( · 57 unmodified lines
147136 let latest_release = semver::Version::parse(published_crate.latest_version().version())
148137 .expect("valid version in crate index");
149138 let next_release = if latest_release >= desired_release {
150− Err(bump::Error::LatestReleaseMoreRecentThanDesiredOne(
151− latest_release.clone(),
152− ))
139+ desired_release.clone()
153140 } else {
154141 let mut next_release = desired_release.clone();
155142 if bump_when_needed && package.version > latest_release && desired_release != package.version {
@@ -161,17 +148,17 @@ pub(crate) fn bump_package_with_spec( · 5 unmodified lines
161148 next_release = package.version.clone();
162149 };
163150 }
164− Ok(next_release)
151+ next_release
165152 };
166153 (Some(latest_release), next_release)
167154 }
168155 None => (
169156 None,
170− Ok(if bump_when_needed {
157+ if bump_when_needed {
171158 package.version.clone()
172159 } else {
173160 desired_release.clone()
174− }),
161+ },
175162 ),
176163 };
177164 Ok(Bump {