| @@ -5,7 +5,7 @@ use cargo_metadata::{DependencyKind, Metadata, Package, PackageId}; · 4 unmodified lines |
| 5 | 5 | use crate::{ |
| 6 | 6 | git, |
| 7 | 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 | 9 | version, |
| 10 | 10 | }; |
| 11 | 11 | |
| @@ -26,7 +26,7 @@ pub mod dependency { · 14 unmodified lines |
| 26 | 26 | /// Initially selected by user |
| 27 | 27 | UserSelection, |
| 28 | 28 | /// A changed dependency of the user selected crate that thus needs publishing |
| 29 | | − DependencyOfUserSelection, |
| 29 | + DependencyOrDependentOfUserSelection, |
| 30 | 30 | } |
| 31 | 31 | |
| 32 | 32 | #[derive(Clone, Debug)] |
| @@ -53,6 +53,8 @@ pub mod dependency { · 20 unmodified lines |
| 53 | 53 | reason: SkippedReason, |
| 54 | 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 | 145 | Ok(crates) |
| 125 | 146 | } |
| 126 | 147 | |
| @@ -154,7 +175,7 @@ fn depth_first_traversal<'meta>( · 27 unmodified lines |
| 154 | 175 | if is_pre_release_version(&workspace_dependency.version) || add_production_crates { |
| 155 | 176 | crates.push(Dependency { |
| 156 | 177 | package: workspace_dependency, |
| 157 | | − kind: dependency::Kind::DependencyOfUserSelection, |
| 178 | + kind: dependency::Kind::DependencyOrDependentOfUserSelection, |
| 158 | 179 | mode: dependency::Mode::ToBePublished { |
| 159 | 180 | adjustment: VersionAdjustment::Changed { |
| 160 | 181 | change, |
| @@ -165,7 +186,7 @@ fn depth_first_traversal<'meta>( · 4 unmodified lines |
| 165 | 186 | } else { |
| 166 | 187 | crates.push(Dependency { |
| 167 | 188 | package: workspace_dependency, |
| 168 | | − kind: dependency::Kind::DependencyOfUserSelection, |
| 189 | + kind: dependency::Kind::DependencyOrDependentOfUserSelection, |
| 169 | 190 | mode: dependency::Mode::Skipped { |
| 170 | 191 | reason: dependency::SkippedReason::DeniedAutopublishOfProductionCrate, |
| 171 | 192 | adjustment: None, |
| @@ -175,7 +196,7 @@ fn depth_first_traversal<'meta>( · 3 unmodified lines |
| 175 | 196 | } else { |
| 176 | 197 | skipped.push(Dependency { |
| 177 | 198 | package: workspace_dependency, |
| 178 | | − kind: dependency::Kind::DependencyOfUserSelection, |
| 199 | + kind: dependency::Kind::DependencyOrDependentOfUserSelection, |
| 179 | 200 | mode: dependency::Mode::Skipped { |
| 180 | 201 | reason: dependency::SkippedReason::Unchanged, |
| 181 | 202 | adjustment: None, |