Skip to content

Commit 935a746

Browse files
committed
feat(task): Completed generation of tasks then runs all tasks
1 parent b33e507 commit 935a746

File tree

18 files changed

+376
-366
lines changed

18 files changed

+376
-366
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
{
2-
}
2+
"rust-analyzer.cargo.features": []
3+
}

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "cargo-uv"
33
authors = ["Zack Hankin <[email protected]>"]
4-
version = "0.7.0"
4+
version = "1.0.0-rc.1"
55
edition = "2024"
66
readme = "./README.md"
77
description = "A simple Cargo tool for updating the version in your project."
@@ -28,7 +28,6 @@ thiserror = { version = "2" }
2828
indexmap = "2.10.0"
2929

3030
[features]
31-
default = []
3231
unstable = []
3332

3433

src/bin/cargo_uv.rs

Lines changed: 4 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -10,204 +10,11 @@ fn main() -> Result<()> {
1010
setup_tracing(&cli_args)?;
1111

1212
let packages = Packages::from(cli_args.get_metadata()?);
13-
let _tasks = Tasks::generate_tasks(&mut cli_args, packages)?;
13+
let mut tasks = Tasks::generate_tasks(&mut cli_args, packages)?;
1414

15-
// Exit early if display tasks
16-
if cli_args.display_tasks() {
17-
return Ok(());
18-
}
15+
tasks = tasks.run_all(&cli_args)?.join_all()?;
16+
tracing::info!("Completed run, starting cleanup");
17+
tasks.run_cleanup_tasks(&cli_args)?;
1918

2019
exit!();
2120
}
22-
23-
// let root_dir = args.root_dir()?;
24-
// let git = GitBuilder::new().root_directory(root_dir).build();
25-
26-
// let starting_branch = if args.git_branch().is_other() {
27-
// Some(git.checkout(&args, args.git_branch(), Stash::Unstashed)?)
28-
// } else {
29-
// None
30-
// };
31-
// args.try_allow_dirty()?;
32-
33-
// let meta = args.get_metadata()?;
34-
// let mut packages = Packages::from(meta);
35-
36-
// match args.action() {
37-
// Action::Print => {
38-
// let root_package = args.get_metadata()?.root_package().ok_or(miette::miette!(
39-
// help = "Use the tree action if in a workspace without a root package.",
40-
// "When printing, expected a root package."
41-
// ))?;
42-
// println!("{} {}", root_package.name, root_package.version);
43-
// return Ok(());
44-
// }
45-
// Action::Tree => {
46-
// println!("{}", packages.display_tree());
47-
// return Ok(());
48-
// }
49-
// _ => (),
50-
// }
51-
52-
// let (included, excluded) = args.workspace.partition_packages(&packages)?;
53-
54-
// ensure!(
55-
// !included.is_empty(),
56-
// help = "Check you are not excluding your root package without including others.",
57-
// "No packages to modify. Excluded are: {:?}",
58-
// excluded
59-
// .iter()
60-
// .map(|p| p.name().to_string())
61-
// .collect::<Vec<_>>()
62-
// );
63-
// drop(excluded);
64-
65-
// let mut change_workspace_package_version = args.workspace_package(); // #40
66-
// let mut tasks = Tasks::new();
67-
68-
// for package in included {
69-
// if package.version_type() == VersionType::SetByWorkspace {
70-
// change_workspace_package_version = true;
71-
// tracing::info!(
72-
// "Changing Workspace Package Version due to: {}",
73-
// package.name()
74-
// );
75-
// } else {
76-
// // TODO: Move to refs over cloning.
77-
// let task = Task::from_action(
78-
// args.action(),
79-
// package.clone(),
80-
// args.pre.clone(),
81-
// args.build.clone(),
82-
// args.set_version.clone(),
83-
// args.force_version,
84-
// )?;
85-
86-
// tasks.insert(task, None);
87-
// }
88-
// }
89-
90-
// if change_workspace_package_version {
91-
// let task = match args.action() {
92-
// Action::Pre | Action::Patch | Action::Minor | Action::Major => {
93-
// Some(Task::BumpWorkspace {
94-
// bump: args.action(),
95-
// pre: args.pre.clone(),
96-
// build: args.build.clone(),
97-
// force: args.force_version,
98-
// })
99-
// }
100-
// Action::Set => Some(Task::SetWorkspace {
101-
// version: args.set_version.clone().ok_or(miette::miette!(
102-
// "Expected a new version for Task::from_action when action is Set"
103-
// ))?,
104-
// }),
105-
// Action::Print | Action::Tree => None,
106-
// };
107-
// if let Some(t) = task {
108-
// tasks.insert(t, None);
109-
// }
110-
// }
111-
// // BUG: #43 Need to undo tasks on failure e.g. checkout, stash ...
112-
113-
// for mut task in tasks.version_change_tasks() {
114-
// match &mut task {
115-
// Task::Set {
116-
// version: new_version,
117-
// package,
118-
// } => {
119-
// package.set_version(new_version.clone())?;
120-
// if !args.dry_run() {
121-
// package.write_cargo_file()?;
122-
// }
123-
// }
124-
// Task::Bump {
125-
// package,
126-
// bump,
127-
// pre,
128-
// build,
129-
// force,
130-
// } => {
131-
// package.bump_version(*bump, pre.clone(), build.clone(), *force)?;
132-
// if !args.dry_run() {
133-
// package.write_cargo_file()?;
134-
// }
135-
// }
136-
// Task::BumpWorkspace {
137-
// bump,
138-
// pre,
139-
// build,
140-
// force,
141-
// } => {
142-
// let workspace_package = packages.workspace_package().ok_or(miette!(
143-
// "1 or more packages are expecting there to be a workspace.package"
144-
// ))?;
145-
// Some(workspace_package.bump_version(*bump, pre.clone(), build.clone(), *force)?);
146-
// if !args.dry_run() {
147-
// workspace_package.write_cargo_file()?;
148-
// }
149-
// }
150-
// Task::SetWorkspace { version } => {
151-
// let workspace_package = packages.workspace_package().ok_or(miette!(
152-
// "1 or more packages are expecting there to be a workspace.package"
153-
// ))?;
154-
// Some(workspace_package.set_version(version.clone())?);
155-
// if !args.dry_run() {
156-
// workspace_package.write_cargo_file()?;
157-
// }
158-
// }
159-
// _ => unreachable!(),
160-
// }
161-
// tracing::info!("Complete: {task}");
162-
// tasks.complete_task(&task);
163-
// }
164-
165-
// let cargo = args.cargo()?;
166-
// cargo.generate_lockfile(&args)?;
167-
168-
// if args.git_tag() {
169-
// tracing::info!("Generating git tag");
170-
171-
// let new_version = packages.root_version()?;
172-
173-
// git.add_cargo_files()?;
174-
// git.commit(&args, &new_version)?; // BUG: #26 Not handling the case when the message is set.
175-
// git.tag(&args, &new_version, None)?;
176-
// if args.git_push() {
177-
// let gpjh = git.push(&args, &new_version).context("git push")?;
178-
// tasks.append(gpjh);
179-
// }
180-
// // BUG: #2 Deletes tag before push so push fails.
181-
// if args.dry_run() {
182-
// let task = Task::DeleteGitTag(new_version);
183-
// tasks.insert(task, None);
184-
// }
185-
// }
186-
187-
// if args.cargo_publish() {
188-
// tasks.insert(
189-
// cargo_uv::Task::Publish,
190-
// Some(cargo.publish(&args).context("Cargo Publish")?),
191-
// );
192-
// }
193-
194-
// let tasks = match tasks.join_all() {
195-
// Ok(ts) => ts,
196-
// Err(e) => {
197-
// tracing::warn!("Tasks errored, Completed tasks: {:?}", e.completed_tasks);
198-
// tracing::warn!("Tasks with unknown status: {:?}", e.incomplete_tasks);
199-
// return Err(e.into());
200-
// }
201-
// };
202-
203-
// if let Some(Task::DeleteGitTag(version)) = tasks.get_delete_tag() {
204-
// let root_dir = args.root_dir()?;
205-
// let git = GitBuilder::new().root_directory(root_dir).build();
206-
// git.tag(&args, version, Some(vec!["--delete"]))?;
207-
// };
208-
209-
// if let Some((branch, stash)) = starting_branch {
210-
// git.checkout(&args, branch, stash)?;
211-
// }
212-
// Ok(())
213-
// }

src/cargo.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::{
66
use miette::IntoDiagnostic;
77
use tracing::{debug, instrument};
88

9-
use crate::{GitBuilder, cli::Cli};
9+
use crate::{Process, cli::Suppress};
1010

1111
#[derive(Debug, Default)]
1212
pub struct Cargo {
@@ -34,33 +34,36 @@ impl Cargo {
3434
cargo
3535
}
3636

37-
pub fn publish(&self, cli_args: &Cli) -> miette::Result<Child> {
38-
let mut cargo = self.command(cli_args.suppress.includes_cargo());
37+
pub fn publish(
38+
&self,
39+
suppress: Suppress,
40+
dry_run: bool,
41+
no_verify: bool,
42+
allow_dirty: bool,
43+
) -> miette::Result<Child> {
44+
let mut cargo = self.command(suppress.includes_cargo());
3945
cargo.arg("publish");
40-
if cli_args.dry_run() {
46+
if dry_run {
4147
cargo.arg("--dry-run");
4248
}
43-
let git = GitBuilder::new()
44-
.root_directory(cli_args.root_dir()?)
45-
.build();
46-
git.dirty_files()?;
4749

48-
if cli_args.no_verify() {
50+
if no_verify {
4951
cargo.arg("--no-verify");
5052
}
5153

5254
// BUG: Be able to remove --allow-dirty #1
53-
cargo.args(["--allow-dirty"]);
54-
tracing::debug!("Running: {:?}", cargo);
55-
cargo.spawn().into_diagnostic()
55+
// cargo.args(["--allow-dirty"]);
56+
if allow_dirty {
57+
cargo.args(["--allow-dirty"]);
58+
}
59+
Process::Spawn.run(cargo)?.try_into_child()
5660
}
5761

58-
pub fn generate_lockfile(&self, _cli_args: &Cli) -> miette::Result<()> {
62+
pub fn generate_lockfile(&self) -> miette::Result<()> {
5963
let mut cargo = self.command(true);
6064
cargo.arg("generate-lockfile");
6165

62-
tracing::debug!("Running: {:?}", cargo);
63-
let output = cargo.output().into_diagnostic()?;
66+
let output = Process::Output.run(cargo)?.try_into_output()?;
6467
if !output.status.success() {
6568
Err(
6669
miette::miette!("{}", String::from_utf8(output.stderr).into_diagnostic()?)

src/cli/cli.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,10 @@ impl Cli {
270270
self.set_version.clone()
271271
}
272272

273+
pub fn suppress(&self) -> Suppress {
274+
self.suppress
275+
}
276+
273277
// /// Partition workspace members into those selected and those excluded.
274278
// ///
275279
// /// Notes:

src/git/branch.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,23 @@ impl Branch {
2929
matches!(self, Self::Current)
3030
}
3131

32-
/// Returns `true` if the branch is [`Other`].
32+
/// Returns `true` if the branch is [`Named`].
3333
///
34-
/// [`Other`]: Branch::Other
34+
/// [`Named`]: Branch::Named
3535
#[must_use]
36-
pub fn is_other(&self) -> bool {
36+
pub fn is_named(&self) -> bool {
3737
matches!(self, Self::Named { .. })
3838
}
3939

40-
pub fn as_other(&self) -> Option<&String> {
40+
pub fn as_named(&self) -> Option<&String> {
4141
if let Self::Named { local } = self {
4242
Some(local)
4343
} else {
4444
None
4545
}
4646
}
4747

48-
pub fn try_into_other(self) -> Result<String, Self> {
48+
pub fn try_into_named(self) -> Result<String, Self> {
4949
if let Self::Named { local } = self {
5050
Ok(local)
5151
} else {

0 commit comments

Comments
 (0)