diff --git a/.bumpversion.toml b/.bumpversion.toml index b9a9e7f..0971522 100644 --- a/.bumpversion.toml +++ b/.bumpversion.toml @@ -1,4 +1,4 @@ -current_version = "1.0.2" +current_version = "1.1.1" commit = true tag = true message = "chore: bump {current_version} → {new_version}" @@ -11,8 +11,8 @@ type = "string" values = ["alpha", "beta", "stable"] [file."Cargo.toml"] -format = 'version = "{version}"' +formats = ['version = "{version}"'] [file."Cargo.lock"] -format = """name = "bump2version" -version = "{version}"""" +formats = ["""name = "bump2version" +version = "{version}""""] diff --git a/Cargo.lock b/Cargo.lock index 59f7f97..63177c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -61,7 +61,7 @@ dependencies = [ [[package]] name = "bump2version" -version = "1.0.2" +version = "1.1.1" dependencies = [ "clap", "regex", diff --git a/Cargo.toml b/Cargo.toml index dcff0e0..5a74359 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bump2version" -version = "1.0.2" +version = "1.1.1" edition = "2021" description = "⬆️ Easily manage version numbers in your projects." license = "MIT" diff --git a/src/cli.rs b/src/cli.rs index cf8a99c..f07903f 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -24,6 +24,10 @@ pub(crate) struct Cli { #[arg(short = 'n', long = "dry-run", default_value_t = false)] pub(crate) dry_run: bool, + /// Current version + #[arg(long = "current-version", value_name = "VERSION")] + pub(crate) current_version: Option, + /// New version that should be in the files. #[arg(long = "new-version", value_name = "VERSION")] pub(crate) new_version: Option, diff --git a/src/config.rs b/src/config.rs index 1384979..a2e0e1d 100644 --- a/src/config.rs +++ b/src/config.rs @@ -4,7 +4,7 @@ use serde_derive::Deserialize; #[derive(Debug, Clone, Deserialize)] pub(crate) struct Config { - pub(crate) current_version: String, + pub(crate) current_version: Option, pub(crate) message: Option, pub(crate) commit: bool, pub(crate) tag: bool, @@ -35,8 +35,8 @@ pub(crate) struct Part { #[derive(Debug, Clone, Deserialize)] pub(crate) struct File { - /// Format to replace, eg. `current_version = "{version}"` - pub(crate) format: String, + /// Formats to replace, eg. `current_version = "{version}"` + pub(crate) formats: Vec, } fn default_parse() -> String { diff --git a/src/main.rs b/src/main.rs index 5b54806..45903fd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,12 +38,23 @@ fn main() -> Result<(), Box> { } }; - let current_version = config.current_version.clone(); - - let attempted_new_version = args - .new_version + let current_version = args + .current_version .clone() - .or(attempt_version_bump(args.clone(), config.clone())); + .or(config.current_version.clone()); + + if current_version.is_none() { + error!("No current version could be determined, either set in config or pass as arg"); + exit(1); + } + + let current_version = current_version.unwrap(); + + let attempted_new_version = args.new_version.clone().or(attempt_version_bump( + args.clone(), + config.clone(), + current_version.clone(), + )); if attempted_new_version.is_some() { let new_version = attempted_new_version.clone().unwrap(); @@ -84,22 +95,24 @@ fn main() -> Result<(), Box> { // Update version in specified files info!(amount = &files.len(), "Updating version in files"); for path in files.clone() { - let content = fs::read_to_string(path)?; - let format = &config_files.get(path).unwrap().format.clone(); + let mut content = fs::read_to_string(path)?; + let formats = &config_files.get(path).unwrap().formats.clone(); - let old_line = format.replace("{version}", ¤t_version); - if !content.contains(&old_line) { - warn!( - current_version, - path, "Did not find current version in file" - ); + for format in formats { + let old_line = format.replace("{version}", ¤t_version); + if !content.contains(&old_line) { + warn!( + current_version, + path, "Did not find current version in file" + ); + } + + let new_line = format.replace("{version}", &new_version); + content = content.replace(&old_line, &new_line); } - let new_line = format.replace("{version}", &new_version); - let updated_content = content.replace(&old_line, &new_line); - if !dry_run { - fs::write(path, updated_content)?; + fs::write(path, content)?; } } diff --git a/src/utils.rs b/src/utils.rs index ddd68fb..15d0606 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -6,7 +6,11 @@ use std::collections::HashMap; use std::ops::Index; use tracing::{error, trace}; -pub(crate) fn attempt_version_bump(args: Cli, config: Config) -> Option { +pub(crate) fn attempt_version_bump( + args: Cli, + config: Config, + current_version: String, +) -> Option { let parse_regex = config.parse; let regex = match Regex::new(&parse_regex) { Ok(r) => r, @@ -16,7 +20,6 @@ pub(crate) fn attempt_version_bump(args: Cli, config: Config) -> Option } }; - let current_version = config.current_version; let mut parsed: HashMap = HashMap::new(); if let Some(captures) = regex.captures(¤t_version) {