History

Collect crates for manifest updates (#222)

Sebastian Thiel committed 5 years ago

Commit 56ccdd21 parent 07372dd2 files · +37 −10Browse files

Unified · Split

2 files
  1. cargo-smart-release/src/command/release/mod.rs +11 −5
  2. cargo-smart-release/src/traverse.rs +26 −5
cargo-smart-release/src/command/release/mod.rs+11−5
@@ -133,16 +133,16 @@ fn present_dependencies( · 132 unmodified lines
133 .count();133 .count();
134 if num_skipped != 0 {134 if num_skipped != 0 {
135 log::info!(135 log::info!(
136 "Skipped {} dependent crates as they didn't change since their last release. Use --verbose/-v to see much more.",136 "Skipped {} dependent crates as they didn't change since their last release.",
137 num_skipped137 num_skipped
138 );138 );
139 }139 }
140 140
141 let mut error = false;141 let mut error = false;
142 for dep in deps {142 for dep in deps {
143 let (bump_spec, kind) = match dep.kind {143 let (bump_spec, kind) = match dep.kind {
144 Kind::UserSelection => (ctx.base.bump, "provided"),144 Kind::UserSelection => (ctx.base.bump, "provided"),
145 Kind::DependencyOfUserSelection => (ctx.base.bump_dependencies, "dependent"),145 Kind::DependencyOrDependentOfUserSelection => (ctx.base.bump_dependencies, "dependent"),
146 };146 };
147 match &dep.mode {147 match &dep.mode {
148 dependency::Mode::ToBePublished { adjustment } => {148 dependency::Mode::ToBePublished { adjustment } => {
@@ -223,7 +223,13 @@ fn present_dependencies( · 74 unmodified lines
223 direct_dependency.name223 direct_dependency.name
224 );224 );
225 }225 }
226 226 dependency::Mode::ManifestNeedsUpdate => {
227 log::info!(
228 "Manifest of {} package '{}' will be adjusted as its dependencies see a version change",
229 kind,
230 dep.package.name
231 );
232 }
227 dependency::Mode::Skipped { .. } => {}233 dependency::Mode::Skipped { .. } => {}
228 }234 }
229 }235 }
cargo-smart-release/src/traverse.rs+26−5
@@ -5,7 +5,7 @@ use cargo_metadata::{DependencyKind, Metadata, Package, PackageId}; · 4 unmodified lines
5use crate::{5use crate::{
6 git,6 git,
7 traverse::dependency::VersionAdjustment,7 traverse::dependency::VersionAdjustment,
8 utils::{is_pre_release_version, package_by_name, workspace_package_by_name},8 utils::{is_pre_release_version, package_by_id, package_by_name, workspace_package_by_name},
9 version,9 version,
10};10};
11 11
@@ -26,7 +26,7 @@ pub mod dependency { · 14 unmodified lines
26 /// Initially selected by user26 /// Initially selected by user
27 UserSelection,27 UserSelection,
28 /// A changed dependency of the user selected crate that thus needs publishing28 /// A changed dependency of the user selected crate that thus needs publishing
29 DependencyOfUserSelection,29 DependencyOrDependentOfUserSelection,
30 }30 }
31 31
32 #[derive(Clone, Debug)]32 #[derive(Clone, Debug)]
@@ -53,6 +53,8 @@ pub mod dependency { · 20 unmodified lines
53 reason: SkippedReason,53 reason: SkippedReason,
54 adjustment: Option<VersionAdjustment<'meta>>,54 adjustment: Option<VersionAdjustment<'meta>>,
55 },55 },
56 /// One of our dependencies will see a version adjustment, which we must update in our manifest
57 ManifestNeedsUpdate,
56 }58 }
57}59}
58 60
@@ -121,6 +123,25 @@ pub fn dependencies( · 62 unmodified lines
121 }123 }
122 }124 }
123 }125 }
126
127 let crates_for_manifest_update = ctx
128 .meta
129 .workspace_members
130 .iter()
131 .map(|id| package_by_id(&ctx.meta, id))
132 .filter(|wsp| crates.iter().all(|c| c.package.id != wsp.id))
133 .filter(|wsp| {
134 wsp.dependencies
135 .iter()
136 .any(|d| crates.iter().any(|c| c.package.name == d.name))
137 })
138 .map(|wsp| Dependency {
139 kind: dependency::Kind::DependencyOrDependentOfUserSelection,
140 package: wsp,
141 mode: dependency::Mode::ManifestNeedsUpdate,
142 })
143 .collect::<Vec<_>>();
144 crates.extend(crates_for_manifest_update);
124 Ok(crates)145 Ok(crates)
125}146}
126 147
@@ -154,7 +175,7 @@ fn depth_first_traversal<'meta>( · 27 unmodified lines
154 if is_pre_release_version(&workspace_dependency.version) || add_production_crates {175 if is_pre_release_version(&workspace_dependency.version) || add_production_crates {
155 crates.push(Dependency {176 crates.push(Dependency {
156 package: workspace_dependency,177 package: workspace_dependency,
157 kind: dependency::Kind::DependencyOfUserSelection,178 kind: dependency::Kind::DependencyOrDependentOfUserSelection,
158 mode: dependency::Mode::ToBePublished {179 mode: dependency::Mode::ToBePublished {
159 adjustment: VersionAdjustment::Changed {180 adjustment: VersionAdjustment::Changed {
160 change,181 change,
@@ -165,7 +186,7 @@ fn depth_first_traversal<'meta>( · 4 unmodified lines
165 } else {186 } else {
166 crates.push(Dependency {187 crates.push(Dependency {
167 package: workspace_dependency,188 package: workspace_dependency,
168 kind: dependency::Kind::DependencyOfUserSelection,189 kind: dependency::Kind::DependencyOrDependentOfUserSelection,
169 mode: dependency::Mode::Skipped {190 mode: dependency::Mode::Skipped {
170 reason: dependency::SkippedReason::DeniedAutopublishOfProductionCrate,191 reason: dependency::SkippedReason::DeniedAutopublishOfProductionCrate,
171 adjustment: None,192 adjustment: None,
@@ -175,7 +196,7 @@ fn depth_first_traversal<'meta>( · 3 unmodified lines
175 } else {196 } else {
176 skipped.push(Dependency {197 skipped.push(Dependency {
177 package: workspace_dependency,198 package: workspace_dependency,
178 kind: dependency::Kind::DependencyOfUserSelection,199 kind: dependency::Kind::DependencyOrDependentOfUserSelection,
179 mode: dependency::Mode::Skipped {200 mode: dependency::Mode::Skipped {
180 reason: dependency::SkippedReason::Unchanged,201 reason: dependency::SkippedReason::Unchanged,
181 adjustment: None,202 adjustment: None,