From dc0f531545a255fb4543e0d0697e318efc9cf791 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Tue, 30 Mar 2021 09:20:29 +0300 Subject: fix: report project name and location when setting version for Rust --- src/errors.rs | 3 +++ src/rust.rs | 47 +++++++++++++++++++++++++++++++---------------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/errors.rs b/src/errors.rs index 282b5c5..0652adf 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -26,6 +26,9 @@ pub enum BumperError { #[error("'project' in Cargo.toml is not a table")] ProjectNotTable, + #[error("Cargo.toml doesn't specify a package name")] + UnnamedProject, + #[error("Failed to run git: {0}")] GitInvoke(#[source] std::io::Error), diff --git a/src/rust.rs b/src/rust.rs index 192c387..848422c 100644 --- a/src/rust.rs +++ b/src/rust.rs @@ -29,8 +29,8 @@ impl Rust { info!( "Rust project {}, in {}, version set to {}", + self.cargo_toml.name()?, self.dirname.display(), - "xxx", version ); Ok(()) @@ -53,6 +53,36 @@ impl CargoToml { }) } + fn get_package_table(&mut self) -> Result<&mut toml_edit::Table, BumperError> { + let package = self + .manifest + .get_table(&["package".to_string()]) + .map_err(BumperError::NoPackage)?; + if let Some(table) = package.as_table_mut() { + Ok(table) + } else { + Err(BumperError::ProjectNotTable) + } + } + + fn name(&mut self) -> Result { + let package = self.get_package_table()?; + let v = package.entry("name"); + if let Some(name) = v.as_str() { + Ok(name.to_string()) + } else { + Err(BumperError::UnnamedProject) + } + } + + fn set_version(&mut self, version: &str) -> Result<(), BumperError> { + let package = self.get_package_table()?; + debug!("setting Cargo.toml set version to {} in memory", version); + let v = package.entry("version"); + *v = Item::Value(Value::from(version)); + Ok(()) + } + fn write(&self) -> Result<(), BumperError> { debug!("saving Cargo.toml to {}", self.dirname.display()); let mut file = Manifest::find_file(&Some(self.dirname.to_path_buf())) @@ -62,19 +92,4 @@ impl CargoToml { .map_err(|err| BumperError::WriteToml(self.dirname.to_path_buf(), err))?; Ok(()) } - - fn set_version(&mut self, version: &str) -> Result<(), BumperError> { - let package = self - .manifest - .get_table(&["package".to_string()]) - .map_err(BumperError::NoPackage)?; - if let Some(package) = package.as_table_mut() { - debug!("setting Cargo.toml set version to {} in memory", version); - let v = package.entry("version"); - *v = Item::Value(Value::from(version)); - } else { - return Err(BumperError::ProjectNotTable); - } - Ok(()) - } } -- cgit v1.2.1