diff options
Diffstat (limited to 'src/python.rs')
-rw-r--r-- | src/python.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/python.rs b/src/python.rs index 4cc043e..28c0aec 100644 --- a/src/python.rs +++ b/src/python.rs @@ -2,8 +2,10 @@ use crate::errors::BumperError; use glob::glob; use log::{debug, info}; use std::path::{Path, PathBuf}; +use std::process::Command; pub struct Python { + dirname: PathBuf, version_pys: Vec<PathBuf>, } @@ -17,13 +19,31 @@ impl Python { debug!("no version.py files in {}", dirname.display()); Err(BumperError::NoVersionPy(dirname.to_path_buf())) } else { - Ok(Self { version_pys: files }) + Ok(Self { + dirname: dirname.to_path_buf(), + version_pys: files, + }) } } else { Err(BumperError::UnknownProjectKind(dirname.to_path_buf())) } } + pub fn name(&mut self) -> Result<String, BumperError> { + let output = Command::new("./setup.py") + .arg("--name") + .current_dir(&self.dirname) + .output() + .map_err(|err| BumperError::Setupnvoke(self.dirname.to_path_buf(), err))?; + if output.status.success() { + let name = String::from_utf8_lossy(&output.stdout).into_owned(); + Ok(name.trim_end().to_string()) + } else { + let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); + Err(BumperError::Setup(self.dirname.to_path_buf(), stderr)) + } + } + pub fn set_version(&mut self, version: &str) -> Result<String, BumperError> { for filename in self.version_pys.iter() { info!("writing Python version to {}", filename.display()); |