workspacer_cli/
bump_crate_downstreams.rs1crate::ix!();
3
4#[derive(Debug, StructOpt, Getters, Setters)]
7#[getset(get="pub")]
8pub struct BumpCrateDownstreamsCommand {
9 #[structopt(long = "crate")]
11 crate_name: String,
12
13 #[structopt(long = "workspace")]
15 workspace_path: Option<PathBuf>,
16
17 #[structopt(long = "skip-git-check")]
19 skip_git_check: bool,
20
21 #[structopt(long = "release", default_value = "patch")]
23 release_arg: ReleaseArg,
24}
25
26impl BumpCrateDownstreamsCommand {
27 pub async fn run(&self) -> Result<(), WorkspaceError> {
28 let crate_name_owned = self.crate_name().clone();
29 let ReleaseArg(release_type) = self.release_arg().clone();
30
31 run_with_workspace_and_crate_name(
34 self.workspace_path().clone(),
35 *self.skip_git_check(),
36 crate_name_owned,
37 move |ws, found_crate_name| {
38 Box::pin(async move {
39 let arc_crate = ws.find_crate_by_name(found_crate_name).await.ok_or_else(|| {
41 error!("No crate named '{}' found in workspace", found_crate_name);
42 CrateError::CrateNotFoundInWorkspace {
43 crate_name: found_crate_name.to_owned(),
44 }
45 })?;
46
47 let mut handle = arc_crate.lock().await.clone();
49
50 ws.bump_crate_and_downstreams(&mut handle, release_type.clone())
51 .await
52 .map_err(|err| {
53 error!(
54 "Failed to bump crate='{}' + downstreams with release={:?}: {:?}",
55 found_crate_name, release_type, err
56 );
57 err
58 })?;
59
60 info!(
61 "Successfully bumped crate='{}' + downstreams => release={:?}",
62 found_crate_name, release_type
63 );
64 Ok(())
65 })
66 },
67 )
68 .await
69 }
70}