From afc842c9025e33f2e25716d80ecac07117766457 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Wed, 21 Apr 2021 08:20:43 +0300 Subject: refactor: make logging and messages more consistent Also, report the Debian package version correctly, not just the upstream part. --- bumper.md | 6 +++++- src/bin/bumper.rs | 21 ++++++++++++++++----- src/debian.rs | 12 ++++-------- src/git.rs | 4 ++-- src/project.rs | 19 ++++++++++++++++--- src/python.rs | 8 +++----- src/rust.rs | 9 +++++++-- 7 files changed, 53 insertions(+), 26 deletions(-) diff --git a/bumper.md b/bumper.md index 1082997..1fc4336 100644 --- a/bumper.md +++ b/bumper.md @@ -9,7 +9,11 @@ The tool is used like this: ~~~{.numberLines} $ cd ~/my-project -$ bumper 1.2.0 +$ bumper 1.2.3 +Setting version for project in /home/liw/tmp/toy +Rust project set to 1.2.3 +Debian package project set to 1.2.3-1 +Python project set to 1.2.3 $ git push --tags ... $ diff --git a/src/bin/bumper.rs b/src/bin/bumper.rs index b2e9f68..59443e5 100644 --- a/src/bin/bumper.rs +++ b/src/bin/bumper.rs @@ -1,7 +1,8 @@ use bumper::errors::BumperError; use bumper::git; use bumper::project::ProjectKind; -use log::{error, info}; +use log::{debug, error}; +use std::path::{Path, PathBuf}; use std::process::exit; use structopt::StructOpt; @@ -14,20 +15,30 @@ fn main() { fn bumper() -> Result<(), BumperError> { pretty_env_logger::init_custom_env("BUMPER_LOG"); - info!("Bumper starts"); + debug!("Bumper starts"); let opt = Opt::from_args(); - for mut kind in ProjectKind::detect(".")? { - kind.set_version(&opt.version)?; + let cwd = abspath(".")?; + println!("Setting version for project in {}", cwd.display()); + for mut kind in ProjectKind::detect(&cwd)? { + let version = kind.set_version(&opt.version)?; + println!("{} project set to {}", kind.desc(), version); } let msg = format!("Set version to {}", opt.version); git::commit(".", &msg)?; git::tag(".", &opt.version)?; - info!("Bumper ends OK"); + debug!("Bumper ends OK"); Ok(()) } +fn abspath>(path: P) -> Result { + let path = path.as_ref(); + path.to_path_buf() + .canonicalize() + .map_err(|err| BumperError::AbsPath(path.to_path_buf(), err)) +} + #[derive(Debug, StructOpt)] struct Opt { #[structopt(help = "version number of new release")] diff --git a/src/debian.rs b/src/debian.rs index d82a14a..3f9e01b 100644 --- a/src/debian.rs +++ b/src/debian.rs @@ -1,5 +1,5 @@ use crate::errors::BumperError; -use log::{debug, info}; +use log::debug; use std::path::{Path, PathBuf}; use std::process::Command; @@ -10,24 +10,20 @@ pub struct Debian { impl Debian { pub fn new(dirname: &Path) -> Result { let changelog = dirname.join("debian/changelog"); + debug!("does {} exist? {}", changelog.display(), changelog.exists()); if changelog.exists() { - info!("directory {} contains Debian packaging", dirname.display()); return Ok(Self { dirname: dirname.to_path_buf(), }); } - debug!( - "directory {} doesn't contains Debian packaging", - dirname.display() - ); Err(BumperError::UnknownProjectKind(dirname.to_path_buf())) } - pub fn set_version(&mut self, version: &str) -> Result<(), BumperError> { + pub fn set_version(&mut self, version: &str) -> Result { let version = format!("{}-1", version); self.dch(&["-v", &version, ""])?; self.dch(&["-r", ""])?; - Ok(()) + Ok(version) } fn dch(&self, args: &[&str]) -> Result<(), BumperError> { diff --git a/src/git.rs b/src/git.rs index 563afa1..ea640d6 100644 --- a/src/git.rs +++ b/src/git.rs @@ -1,5 +1,5 @@ use crate::errors::BumperError; -use log::{debug, info}; +use log::debug; use std::path::Path; use std::process::Command; @@ -16,7 +16,7 @@ pub fn commit>(dirname: P, msg: &str) -> Result<(), BumperError> } fn git(dirname: &Path, args: &[&str]) -> Result<(), BumperError> { - info!("git {:?} in {}", args, dirname.display()); + debug!("git {:?} in {}", args, dirname.display()); let output = Command::new("git") .args(args) .current_dir(dirname) diff --git a/src/project.rs b/src/project.rs index e67fefc..655fb23 100644 --- a/src/project.rs +++ b/src/project.rs @@ -2,6 +2,7 @@ use crate::debian::Debian; use crate::errors::BumperError; use crate::python::Python; use crate::rust::Rust; +use log::{debug, info}; use std::path::Path; pub enum ProjectKind { @@ -15,6 +16,8 @@ impl ProjectKind { let dirname = dirname.as_ref(); let mut kinds = vec![]; + debug!("detecting kinds of project in {}", dirname.display()); + if let Ok(p) = Rust::new(dirname) { kinds.push(ProjectKind::Rust(p)); } @@ -30,16 +33,26 @@ impl ProjectKind { if kinds.is_empty() { Err(BumperError::UnknownProjectKind(dirname.to_path_buf())) } else { + for kind in kinds.iter() { + info!("{} project in {}", kind.desc(), dirname.display()); + } Ok(kinds) } } - pub fn set_version(&mut self, version: &str) -> Result<(), BumperError> { + pub fn desc(&self) -> &'static str { match self { + Self::Debian(_) => "Debian package", + Self::Python(_) => "Python", + Self::Rust(_) => "Rust", + } + } + + pub fn set_version(&mut self, version: &str) -> Result { + Ok(match self { Self::Rust(ref mut rust) => rust.set_version(version)?, Self::Debian(ref mut debian) => debian.set_version(version)?, Self::Python(ref mut python) => python.set_version(version)?, - } - Ok(()) + }) } } diff --git a/src/python.rs b/src/python.rs index 2b851f8..4cc043e 100644 --- a/src/python.rs +++ b/src/python.rs @@ -9,30 +9,28 @@ pub struct Python { impl Python { pub fn new(dirname: &Path) -> Result { - debug!("considering {} as a Python project", dirname.display()); let setup_py = dirname.join("setup.py"); + debug!("does {} exist? {}", setup_py.display(), setup_py.exists()); 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> { + pub fn set_version(&mut self, version: &str) -> Result { 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(()) + Ok(version.to_string()) } } diff --git a/src/rust.rs b/src/rust.rs index 10dc1a1..0ffe8c0 100644 --- a/src/rust.rs +++ b/src/rust.rs @@ -13,6 +13,11 @@ pub struct Rust { impl Rust { pub fn new(dirname: &Path) -> Result { let cargo_toml = dirname.join("Cargo.toml"); + debug!( + "does {} exist? {}", + cargo_toml.display(), + cargo_toml.exists() + ); if cargo_toml.exists() { return Ok(Self { dirname: dirname.to_path_buf(), @@ -22,7 +27,7 @@ impl Rust { Err(BumperError::UnknownProjectKind(dirname.to_path_buf())) } - pub fn set_version(&mut self, version: &str) -> Result<(), BumperError> { + pub fn set_version(&mut self, version: &str) -> Result { debug!("parsing Cargo.toml from {}", self.dirname.display()); // debug!("Cargo.toml:\n{:#?}", self.cargo_toml); self.cargo_toml.set_version(version)?; @@ -40,7 +45,7 @@ impl Rust { dirname.display(), version ); - Ok(()) + Ok(version.to_string()) } fn update_cargo_lock(&self) -> Result<(), BumperError> { -- cgit v1.2.1