diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index c307ec5..7cee19b 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,7 +8,6 @@ on: env: CARGO_TERM_COLOR: always - XDBM_ENABLE_OVERWRITE_GITCONFIG: true jobs: build-and-lint: diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a1a66f..77119fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,5 @@ # Changelog -## [Unreleased] - -### Fixed -- Git local config is now looked up. (#20) -- Git global config will not be polluted in test by default. (#20) - ## [0.3.0] - 2024-12-02 ### Added diff --git a/tests/cli.rs b/tests/cli.rs index 06e3890..5041385 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -4,58 +4,23 @@ mod integrated_test { io::{self, BufWriter, Write}, }; - use anyhow::{anyhow, Context, Ok, Result}; + use anyhow::{Ok, Result}; use assert_cmd::{assert::OutputAssertExt, Command}; use git2::Repository; - use log::{debug, trace}; + use log::trace; use predicates::{boolean::PredicateBooleanExt, prelude::predicate}; - const IS_GIT_CONFIG_WRITABLE: &str = "XDBM_ENABLE_OVERWRITE_GITCONFIG"; - /// Setup global gitconfig if it doesn't exist. /// /// # Errors /// - /// This function will return an error if it failed to get git global config and environment - /// variable [XDBM_ENABLE_OVERWRITE_GITCONFIG](`IS_GIT_CONFIG_WRITABLE`) is not set. - fn setup_gitconfig() -> Result<()> { - let config = git2::Config::open_default().expect("failed to get default"); - if config.get_string("user.name").is_ok() && config.get_string("user.email").is_ok() { - return Ok(()); - }; - - match std::env::var_os(IS_GIT_CONFIG_WRITABLE) { - Some(_) => { - debug!( - "global git config not found & env var `{}` found", - IS_GIT_CONFIG_WRITABLE - ); - } - None => { - eprintln!("Failed to get git global config"); - eprintln!( - "Set env var `{}` to set automatically (mainly for CI)", - IS_GIT_CONFIG_WRITABLE - ); - return Err(anyhow!("failed to get git global config")); - } - }; - - let config_file = git2::Config::find_global().map_or_else( - |e| { - trace!("global git config file not found: {e:?}"); - Ok(dirs::home_dir() - .context("Failed to get home dir")? - .join(".gitconfig")) - }, - Ok, - )?; - let f = match File::options() - .create(true) - .truncate(true) - .write(true) - .open(config_file) - { + /// This function will return an error if it failed to get home directory. + fn setup_gitconfig(path: &std::path::Path) -> Result<()> { + let git_dir = path.join(".git"); + if !git_dir.exists() { + fs::DirBuilder::new().create(git_dir.clone())? + } + let f = match File::create_new(git_dir.join("config")) { io::Result::Ok(f) => f, io::Result::Err(_err) => return Ok(()), }; @@ -69,13 +34,16 @@ mod integrated_test { .as_bytes(), )?; + eprintln!("{:?}", fs::read_dir(path)?.collect::>()); + eprintln!("{:?}", fs::read_dir(git_dir)?.collect::>()); + Ok(()) } #[test] fn single_device() -> Result<()> { let config_dir = assert_fs::TempDir::new()?; - setup_gitconfig()?; + setup_gitconfig(&config_dir)?; // init let mut cmd = Command::cargo_bin("xdbm")?; cmd.arg("-c") @@ -171,7 +139,7 @@ mod integrated_test { fn two_devices_with_same_name() -> Result<()> { // 1st device let config_dir_1 = assert_fs::TempDir::new()?; - setup_gitconfig()?; + setup_gitconfig(&config_dir_1)?; let mut cmd1 = Command::cargo_bin("xdbm")?; cmd1.arg("-c") .arg(config_dir_1.path()) @@ -204,7 +172,7 @@ mod integrated_test { // 2nd device let config_dir_2 = assert_fs::TempDir::new()?; - setup_gitconfig()?; + setup_gitconfig(&config_dir_2)?; let mut cmd2 = Command::cargo_bin("xdbm")?; cmd2.arg("-c") .arg(config_dir_2.path()) @@ -220,7 +188,7 @@ mod integrated_test { fn directory_without_parent() -> Result<()> { // 1st device let config_dir_1 = assert_fs::TempDir::new()?; - setup_gitconfig()?; + setup_gitconfig(&config_dir_1)?; let mut cmd1 = Command::cargo_bin("xdbm")?; cmd1.arg("-c") .arg(config_dir_1.path()) @@ -255,7 +223,7 @@ mod integrated_test { // // devices: first let config_dir_1 = assert_fs::TempDir::new()?; - setup_gitconfig()?; + setup_gitconfig(&config_dir_1)?; let mut cmd1 = Command::cargo_bin("xdbm")?; cmd1.arg("-c") .arg(config_dir_1.path()) @@ -289,7 +257,7 @@ mod integrated_test { // // devices: first, second let config_dir_2 = assert_fs::TempDir::new()?; - setup_gitconfig()?; + setup_gitconfig(&config_dir_2)?; let mut cmd2 = Command::cargo_bin("xdbm")?; cmd2.arg("-c") .arg(config_dir_2.path())