diff --git a/src/interactive.rs b/src/interactive.rs index 19f06a9..c80d885 100644 --- a/src/interactive.rs +++ b/src/interactive.rs @@ -1,6 +1,7 @@ use crate::config::Config; +use crate::update_version; use crate::{WorkflowMode, config::BumpMode, defaults::Defaults}; -use anyhow::{Result, anyhow}; +use anyhow::{Context, Result, anyhow}; use dialoguer::theme::ColorfulTheme; use dialoguer::{FuzzySelect, Select}; use log::debug; @@ -26,11 +27,7 @@ pub fn select_mode(config: &Config) -> Result { "Init" => Ok(interactive_init()?), "Display" => Ok(WorkflowMode::Display), "Sync" => { - let version = if let Some(version) = &config.version { - semver::Version::parse(version.as_str())? - } else { - prompt_version()? - }; + let version = new_version(config, &BumpMode::Version("0.0.0".to_string()))?; Ok(WorkflowMode::Bump { mode: BumpMode::Version(version.to_string()), version, @@ -38,11 +35,7 @@ pub fn select_mode(config: &Config) -> Result { } "Bump" => { let bump_mode = select_bump_mode()?; - let version = if let Some(version) = &config.version { - semver::Version::parse(version)? - } else { - prompt_version()? - }; + let version = new_version(config, &bump_mode)?; Ok(WorkflowMode::Bump { mode: bump_mode, version, @@ -159,10 +152,22 @@ fn prompt_version() -> Result { let version = dialoguer::Input::::new() .with_prompt("Enter Version") .default("0.1.0".to_string()) - .interact()?; + .interact() + .context("Failed to read version")?; semver::Version::parse(&version).map_err(|e| anyhow!("Invalid version: {}", e)) } +/// Prompt for a new version based on the current version and bump mode +pub fn new_version(config: &Config, bump_mode: &BumpMode) -> Result { + let mut version = if let Some(version) = &config.version { + semver::Version::parse(version).context(format!("Failed to parse version: {version}"))? + } else { + prompt_version()? + }; + update_version(&mut version, bump_mode); + Ok(version) +} + fn find_project_name() -> Result { let current_dir = std::env::current_dir()?; let project_name = current_dir diff --git a/src/main.rs b/src/main.rs index 5bcc75b..dc6791f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,12 +3,9 @@ #![deny(unsafe_code)] use anyhow::Result; -use anyhow::anyhow; use console::style; use defaults::Defaults; -use log::debug; -use log::info; -use log::warn; +use log::{debug, info, warn}; mod cli; mod config; @@ -99,13 +96,7 @@ async fn main() -> Result<()> { }; debug!("CLI Mode: {:?}", bump_mode); - let version = if let Some(version) = &config.version { - let mut version = semver::Version::parse(version.as_str())?; - update_version(&mut version, &bump_mode); - version - } else { - return Err(anyhow!("Version not found in config")); - }; + let version = new_version(&config, &bump_mode)?; WorkflowMode::Bump { mode: bump_mode,