diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-04-13 10:46:37 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-04-13 11:30:12 +0300 |
commit | ecdbc0b100cc50adffb1262ab485837d5dd2f709 (patch) | |
tree | f24f0c74a0ba8e5b85ab2e46f009e9ff4be9a66f /src/python.rs | |
parent | a7cbaaa9be2dfc5e4fcdaf342dba98c923a99ab4 (diff) | |
download | bumper-rs-ecdbc0b100cc50adffb1262ab485837d5dd2f709.tar.gz |
feat: support Python projects
Diffstat (limited to 'src/python.rs')
-rw-r--r-- | src/python.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/python.rs b/src/python.rs new file mode 100644 index 0000000..2b851f8 --- /dev/null +++ b/src/python.rs @@ -0,0 +1,45 @@ +use crate::errors::BumperError; +use glob::glob; +use log::{debug, info}; +use std::path::{Path, PathBuf}; + +pub struct Python { + version_pys: Vec<PathBuf>, +} + +impl Python { + pub fn new(dirname: &Path) -> Result<Self, BumperError> { + debug!("considering {} as a Python project", dirname.display()); + let setup_py = dirname.join("setup.py"); + if setup_py.exists() { + let files = find_version_py_files(dirname); + if files.is_empty() { + debug!("no version.py files in {}", dirname.display()); + Err(BumperError::NoVersionPy(dirname.to_path_buf())) + } else { + info!("Looks like a Python project: {}", dirname.display()); + Ok(Self { version_pys: files }) + } + } else { + debug!("{} does not exist", setup_py.display()); + Err(BumperError::UnknownProjectKind(dirname.to_path_buf())) + } + } + + pub fn set_version(&mut self, version: &str) -> Result<(), BumperError> { + for filename in self.version_pys.iter() { + info!("writing Python version to {}", filename.display()); + std::fs::write(filename, format!("__version__ = \"{}\"\n", version)) + .map_err(|err| BumperError::PythonWrite(filename.to_path_buf(), err))?; + } + Ok(()) + } +} + +fn find_version_py_files(dirname: &Path) -> Vec<PathBuf> { + glob(&dirname.join("*/version.py").display().to_string()) + .expect("glob pattern error") + .filter(|x| x.is_ok()) + .map(|x| x.unwrap()) + .collect() +} |