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
48 48
49 let crates_with_version_change: Vec<_> = crates49 let crates_with_version_change: Vec<_> = crates
50 .iter()50 .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)))
52 .collect();52 .collect();
53 for (package, possibly_new_version) in crates53 for (package, possibly_new_version) in crates
54 .iter()54 .iter()
55 .filter(|c| c.mode.manifest_will_change())55 .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)))
57 {57 {
58 let mut entry_store;58 let mut entry_store;
59 let lock = match locks_by_manifest_path.entry(&package.manifest_path) {59 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
80 && changelog_ids_probably_lacking_user_edits.is_empty());80 && changelog_ids_probably_lacking_user_edits.is_empty());
81 let safety_bumped_packages = crates81 let safety_bumped_packages = crates
82 .iter()82 .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)))
84 .collect::<Vec<_>>();84 .collect::<Vec<_>>();
85 let commit_message = generate_commit_message(85 let commit_message = generate_commit_message(
86 &crates_and_versions_to_be_published,86 &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
205 } => (bump, Some(causing_dependency_names)),205 } => (bump, Some(causing_dependency_names)),
206 VersionAdjustment::Changed { bump, .. } => (bump, None),206 VersionAdjustment::Changed { bump, .. } => (bump, None),
207 };207 };
208 match &bump.next_release {208 if let Some(latest_release) = bump
209 Ok(next_release) => {209 .latest_release
210 if next_release > &dep.package.version {210 .as_ref()
211 log::info!(211 .and_then(|lr| (*lr >= bump.desired_release).then(|| lr))
212 "{} {}-bump {} package '{}' from {} to {} for publishing{}{}{}",212 {
213 will(dry_run),213 log::warn!(
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!(
253 "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.",214 "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.",
254 dep.package.name,215 dep.package.name,
255 latest_release,216 latest_release,
256 bump.desired_release217 bump.desired_release
257 );218 );
258 error = true;219 error = true;
259 }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 );
260 };260 };
261 }261 }
262 dependency::Mode::NotForPublishing { .. } => {}262 dependency::Mode::NotForPublishing { .. } => {}
@@ -300,14 +300,7 @@ fn present_dependencies( · 37 unmodified lines
300 cause,300 cause,
301 deps_and_bumps301 deps_and_bumps
302 .into_iter()302 .into_iter()
303 .map(|(dep_name, bump)| format!(303 .map(|(dep_name, bump)| format!("'{}' {} ➡ {}", dep_name, bump.package_version, bump.next_release))
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 ))
311 .collect::<Vec<_>>()304 .collect::<Vec<_>>()
312 .join(", ")305 .join(", ")
313 );306 );
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
40) -> Option<(&'meta Package, &'a semver::Version)> {40) -> Option<(&'meta Package, &'a semver::Version)> {
41 match &c.mode {41 match &c.mode {
42 crate::traverse::dependency::Mode::ToBePublished { adjustment } => {42 crate::traverse::dependency::Mode::ToBePublished { adjustment } => {
43 Some((c.package, adjustment.bump().next_release()))43 Some((c.package, &adjustment.bump().next_release))
44 }44 }
45 _ => None,45 _ => None,
46 }46 }
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
59 }59 }
60}60}
61 61
62pub mod bump {
63 #[derive(Clone, Debug)]
64 pub enum Error {
65 LatestReleaseMoreRecentThanDesiredOne(semver::Version),
66 }
67}
68
69#[derive(Clone, Debug)]62#[derive(Clone, Debug)]
70pub struct Bump {63pub struct Bump {
71 pub next_release: Result<semver::Version, bump::Error>,64 pub next_release: semver::Version,
72 pub package_version: semver::Version,65 pub package_version: semver::Version,
73 pub latest_release: Option<semver::Version>,66 pub latest_release: Option<semver::Version>,
74 pub desired_release: semver::Version,67 pub desired_release: semver::Version,
75}68}
76 69
77impl Bump {70impl Bump {
78 pub(crate) fn next_release(&self) -> &semver::Version {
79 self.next_release.as_ref().expect("only valid versions here")
80 }
81
82 pub(crate) fn next_release_changes_manifest(&self) -> bool {71 pub(crate) fn next_release_changes_manifest(&self) -> bool {
83 self.next_release() > &self.package_version72 self.next_release > self.package_version
84 }73 }
85 pub(crate) fn is_breaking(&self) -> bool {74 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)
87 }76 }
88}77}
89 78
@@ -147,9 +136,7 @@ pub(crate) fn bump_package_with_spec( · 57 unmodified lines
147 let latest_release = semver::Version::parse(published_crate.latest_version().version())136 let latest_release = semver::Version::parse(published_crate.latest_version().version())
148 .expect("valid version in crate index");137 .expect("valid version in crate index");
149 let next_release = if latest_release >= desired_release {138 let next_release = if latest_release >= desired_release {
150 Err(bump::Error::LatestReleaseMoreRecentThanDesiredOne(139 desired_release.clone()
151 latest_release.clone(),
152 ))
153 } else {140 } else {
154 let mut next_release = desired_release.clone();141 let mut next_release = desired_release.clone();
155 if bump_when_needed && package.version > latest_release && desired_release != package.version {142 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
161 next_release = package.version.clone();148 next_release = package.version.clone();
162 };149 };
163 }150 }
164 Ok(next_release)151 next_release
165 };152 };
166 (Some(latest_release), next_release)153 (Some(latest_release), next_release)
167 }154 }
168 None => (155 None => (
169 None,156 None,
170 Ok(if bump_when_needed {157 if bump_when_needed {
171 package.version.clone()158 package.version.clone()
172 } else {159 } else {
173 desired_release.clone()160 desired_release.clone()
174 }),161 },
175 ),162 ),
176 };163 };
177 Ok(Bump {164 Ok(Bump {