From ea9cdac5654369667bb83a108548f555898a7248 Mon Sep 17 00:00:00 2001 From: Bartosz Telenczuk Date: Fri, 6 Jun 2025 16:30:31 +0200 Subject: [PATCH 1/4] add unchanged variant --- src/bin/set-version/set_version.rs | 16 +++++++++++----- src/bin/set-version/version.rs | 9 +++++++++ src/version.rs | 3 +++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/bin/set-version/set_version.rs b/src/bin/set-version/set_version.rs index 66e74f0976..af491caf7c 100644 --- a/src/bin/set-version/set_version.rs +++ b/src/bin/set-version/set_version.rs @@ -21,6 +21,10 @@ pub struct VersionArgs { #[arg(long, group = "ver")] bump: Option, + /// Add build id + #[arg(long, group = "ver")] + build: Option, + /// Specify the version metadata field (e.g. a wrapped libraries version) #[arg(short, long)] pub metadata: Option, @@ -95,6 +99,7 @@ fn exec(args: VersionArgs) -> CargoResult<()> { let VersionArgs { target, bump, + build, metadata, manifest_path, pkgid, @@ -108,11 +113,12 @@ fn exec(args: VersionArgs) -> CargoResult<()> { unstable_features: _, } = args; - let target = match (target, bump) { - (None, None) => TargetVersion::Relative(BumpLevel::Release), - (None, Some(level)) => TargetVersion::Relative(level), - (Some(version), None) => TargetVersion::Absolute(version), - (Some(_), Some(_)) => unreachable!("clap groups should prevent this"), + let target = match (target, bump, build) { + (None, None, Some(_)) => TargetVersion::Relative(BumpLevel::Release), + (None, None, None) => TargetVersion::Unchanged, + (None, Some(level), None) => TargetVersion::Relative(level), + (Some(version), None, None) => TargetVersion::Absolute(version), + _ => unreachable!("clap groups should prevent this"), }; let ws_metadata = resolve_ws(manifest_path.as_deref(), locked, offline)?; diff --git a/src/bin/set-version/version.rs b/src/bin/set-version/version.rs index 254ade9ebc..cdebbc5de1 100644 --- a/src/bin/set-version/version.rs +++ b/src/bin/set-version/version.rs @@ -8,6 +8,7 @@ use crate::errors::*; pub enum TargetVersion { Relative(BumpLevel), Absolute(semver::Version), + Unchanged, } impl TargetVersion { @@ -17,6 +18,14 @@ impl TargetVersion { metadata: Option<&str>, ) -> CargoResult> { match self { + TargetVersion::Unchanged => { + let mut potential_version = current.to_owned(); + if let Some(metadata) = metadata { + potential_version.metadata(metadata)?; + }; + Ok(Some(potential_version)) + + } TargetVersion::Relative(bump_level) => { let mut potential_version = current.to_owned(); bump_level.bump_version(&mut potential_version, metadata)?; diff --git a/src/version.rs b/src/version.rs index 5466672544..fe9183503d 100644 --- a/src/version.rs +++ b/src/version.rs @@ -289,6 +289,9 @@ mod test { let mut v = semver::Version::parse("1.0.0").unwrap(); v.metadata("git.123456").unwrap(); assert_eq!(v, semver::Version::parse("1.0.0+git.123456").unwrap()); + let mut v = semver::Version::parse("1.0.0-dev10").unwrap(); + v.metadata("git.123456").unwrap(); + assert_eq!(v, semver::Version::parse("1.0.0-dev10+git.123456").unwrap()); } } From 78045854d2ffe1009f8d2f81f87e9f3b850b64c9 Mon Sep 17 00:00:00 2001 From: Bartosz Telenczuk Date: Sun, 8 Jun 2025 21:41:02 +0200 Subject: [PATCH 2/4] remove build arg --- src/bin/set-version/set_version.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/bin/set-version/set_version.rs b/src/bin/set-version/set_version.rs index af491caf7c..3890f3ceae 100644 --- a/src/bin/set-version/set_version.rs +++ b/src/bin/set-version/set_version.rs @@ -21,10 +21,6 @@ pub struct VersionArgs { #[arg(long, group = "ver")] bump: Option, - /// Add build id - #[arg(long, group = "ver")] - build: Option, - /// Specify the version metadata field (e.g. a wrapped libraries version) #[arg(short, long)] pub metadata: Option, @@ -99,7 +95,6 @@ fn exec(args: VersionArgs) -> CargoResult<()> { let VersionArgs { target, bump, - build, metadata, manifest_path, pkgid, @@ -113,12 +108,11 @@ fn exec(args: VersionArgs) -> CargoResult<()> { unstable_features: _, } = args; - let target = match (target, bump, build) { - (None, None, Some(_)) => TargetVersion::Relative(BumpLevel::Release), - (None, None, None) => TargetVersion::Unchanged, - (None, Some(level), None) => TargetVersion::Relative(level), - (Some(version), None, None) => TargetVersion::Absolute(version), - _ => unreachable!("clap groups should prevent this"), + let target = match (target, bump) { + (None, None) => TargetVersion::Unchanged, + (None, Some(level)) => TargetVersion::Relative(level), + (Some(version), None) => TargetVersion::Absolute(version), + (Some(_), Some(_)) => unreachable!("clap groups should prevent this"), }; let ws_metadata = resolve_ws(manifest_path.as_deref(), locked, offline)?; From d070522abccd3a866dcf01ac5b441052420ef3eb Mon Sep 17 00:00:00 2001 From: Bartosz Telenczuk Date: Sun, 8 Jun 2025 22:22:49 +0200 Subject: [PATCH 3/4] add test --- src/bin/set-version/version.rs | 1 - tests/cargo-set-version/main.rs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/set-version/version.rs b/src/bin/set-version/version.rs index cdebbc5de1..5223c11719 100644 --- a/src/bin/set-version/version.rs +++ b/src/bin/set-version/version.rs @@ -24,7 +24,6 @@ impl TargetVersion { potential_version.metadata(metadata)?; }; Ok(Some(potential_version)) - } TargetVersion::Relative(bump_level) => { let mut potential_version = current.to_owned(); diff --git a/tests/cargo-set-version/main.rs b/tests/cargo-set-version/main.rs index 490d8c1444..cfd2a915db 100644 --- a/tests/cargo-set-version/main.rs +++ b/tests/cargo-set-version/main.rs @@ -11,6 +11,7 @@ mod ignore_dependent; mod relative_absolute_conflict; mod set_absolute_version; mod set_absolute_workspace_version; +mod set_metadata; mod set_relative_version; mod set_relative_workspace_version; mod upgrade_compatible_dependency; From 5b829229798b70401f1b76a7c942bde2a2c37003 Mon Sep 17 00:00:00 2001 From: Bartosz Telenczuk Date: Sun, 8 Jun 2025 22:56:31 +0200 Subject: [PATCH 4/4] use release bump by default --- src/bin/set-version/set_version.rs | 11 ++++++----- tests/cargo-set-version/main.rs | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bin/set-version/set_version.rs b/src/bin/set-version/set_version.rs index 3890f3ceae..d5a08d83b9 100644 --- a/src/bin/set-version/set_version.rs +++ b/src/bin/set-version/set_version.rs @@ -108,11 +108,12 @@ fn exec(args: VersionArgs) -> CargoResult<()> { unstable_features: _, } = args; - let target = match (target, bump) { - (None, None) => TargetVersion::Unchanged, - (None, Some(level)) => TargetVersion::Relative(level), - (Some(version), None) => TargetVersion::Absolute(version), - (Some(_), Some(_)) => unreachable!("clap groups should prevent this"), + let target = match (target, bump, &metadata) { + (None, None, Some(_)) => TargetVersion::Unchanged, + (None, None, None) => TargetVersion::Relative(BumpLevel::Release), + (None, Some(level), _) => TargetVersion::Relative(level), + (Some(version), None, _) => TargetVersion::Absolute(version), + (Some(_), Some(_), _) => unreachable!("clap groups should prevent this"), }; let ws_metadata = resolve_ws(manifest_path.as_deref(), locked, offline)?; diff --git a/tests/cargo-set-version/main.rs b/tests/cargo-set-version/main.rs index cfd2a915db..421d1d30d0 100644 --- a/tests/cargo-set-version/main.rs +++ b/tests/cargo-set-version/main.rs @@ -12,6 +12,7 @@ mod relative_absolute_conflict; mod set_absolute_version; mod set_absolute_workspace_version; mod set_metadata; +mod set_relative_release; mod set_relative_version; mod set_relative_workspace_version; mod upgrade_compatible_dependency;