summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2023-03-02 10:29:41 +0100
committerMatthias Beyer <mail@beyermatthias.de>2023-03-03 09:31:42 +0100
commit0bc5258a671684cc664284330eb168410e7b89be (patch)
tree22a2ab5e02a9877ff874e4f49d49d51d59f9becc
parent1b7d73f6104d3d691dbf0ceb2bc13e117e0dc953 (diff)
Move find_version_string() helper fn to common module
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/command/common.rs37
-rw-r--r--src/command/generate_command.rs36
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,