diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2023-03-02 10:29:41 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2023-03-03 09:31:42 +0100 |
commit | 0bc5258a671684cc664284330eb168410e7b89be (patch) | |
tree | 22a2ab5e02a9877ff874e4f49d49d51d59f9becc | |
parent | 1b7d73f6104d3d691dbf0ceb2bc13e117e0dc953 (diff) |
Move find_version_string() helper fn to common module
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/command/common.rs | 37 | ||||
-rw-r--r-- | src/command/generate_command.rs | 36 |
2 files changed, 39 insertions, 34 deletions
diff --git a/src/command/common.rs b/src/command/common.rs index 4ac4788..b2a79e7 100644 --- a/src/command/common.rs +++ b/src/command/common.rs @@ -1,6 +1,9 @@ use std::path::Path; -use crate::error::VersionError; +use crate::{ + cli::VersionSpec, + error::{Error, VersionError}, +}; pub fn get_version_from_path(path: &Path) -> Result<Option<semver::Version>, VersionError> { path.components() @@ -25,3 +28,35 @@ pub fn get_version_from_path(path: &Path) -> Result<Option<semver::Version>, Ver }) .transpose() } + +pub fn find_version_string(workdir: &Path, version: &VersionSpec) -> Result<String, Error> { + use cargo_metadata::MetadataCommand; + + if let VersionSpec::Custom { custom } = version { + Ok(custom.clone()) + } else { + let metadata = MetadataCommand::new() + .manifest_path(workdir.join("./Cargo.toml")) + .exec()?; + + let workspace_member_ids = &metadata.workspace_members; + + let versions = metadata + .packages + .iter() + .filter(|pkg| workspace_member_ids.contains(&pkg.id)) + .map(|pkg| &pkg.version) + .collect::<Vec<_>>(); + + if versions.is_empty() { + return Err(Error::NoVersionInCargoToml); + } + + let first = versions[0]; + let all_versions_same = versions.iter().all(|v| *v == first); + if !all_versions_same { + return Err(Error::WorkspaceVersionsNotEqual); + } + Ok(first.to_string()) + } +} diff --git a/src/command/generate_command.rs b/src/command/generate_command.rs index c06faa6..1d33bbc 100644 --- a/src/command/generate_command.rs +++ b/src/command/generate_command.rs @@ -1,6 +1,8 @@ use std::path::{Path, PathBuf}; -use crate::{cli::VersionSpec, config::Configuration, error::Error}; +use crate::{ + cli::VersionSpec, command::common::find_version_string, config::Configuration, error::Error, +}; #[derive(Debug, typed_builder::TypedBuilder)] pub struct GenerateCommand { @@ -41,38 +43,6 @@ impl crate::command::Command for GenerateCommand { } } -fn find_version_string(workdir: &Path, version: &VersionSpec) -> Result<String, Error> { - use cargo_metadata::MetadataCommand; - - if let VersionSpec::Custom { custom } = version { - Ok(custom.clone()) - } else { - let metadata = MetadataCommand::new() - .manifest_path(workdir.join("./Cargo.toml")) - .exec()?; - - let workspace_member_ids = &metadata.workspace_members; - - let versions = metadata - .packages - .iter() - .filter(|pkg| workspace_member_ids.contains(&pkg.id)) - .map(|pkg| &pkg.version) - .collect::<Vec<_>>(); - - if versions.is_empty() { - return Err(Error::NoVersionInCargoToml); - } - - let first = versions[0]; - let all_versions_same = versions.iter().all(|v| *v == first); - if !all_versions_same { - return Err(Error::WorkspaceVersionsNotEqual); - } - Ok(first.to_string()) - } -} - fn ensure_release_dir( workdir: &Path, config: &Configuration, |