From 45ec219433beed991f779328f9a2915318e01d52 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 03:16:38 +0900 Subject: [PATCH 01/12] fix: polluting gitconfig in integrated test --- tests/cli.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/cli.rs b/tests/cli.rs index 929a74e..33ab4b3 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -1,12 +1,12 @@ mod integrated_test { use std::{ - fs::{DirBuilder, File}, + fs::{self, DirBuilder, File}, io::{self, BufWriter, Write}, + ops::Not, }; use anyhow::{Context, Ok, Result}; use assert_cmd::{assert::OutputAssertExt, Command}; - use dirs::home_dir; use git2::Repository; use log::trace; use predicates::{boolean::PredicateBooleanExt, prelude::predicate}; @@ -16,12 +16,12 @@ mod integrated_test { /// # Errors /// /// This function will return an error if it failed to get home directory. - fn setup_gitconfig() -> Result<()> { - let f = match File::create_new( - home_dir() - .context("Failed to find home directory")? - .join(".gitconfig"), - ) { + 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(()), }; @@ -41,7 +41,7 @@ mod integrated_test { #[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") @@ -135,7 +135,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()) @@ -168,7 +168,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()) @@ -184,7 +184,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()) @@ -219,7 +219,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()) From 434d4ca95287357a5cb77a90b9c97b640ff239ec Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 03:36:33 +0900 Subject: [PATCH 02/12] debug(CI): add eprintln --- tests/cli.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/cli.rs b/tests/cli.rs index 33ab4b3..e973cba 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -35,6 +35,9 @@ mod integrated_test { .as_bytes(), )?; + eprintln!("{:?}", fs::read_dir(path)?.collect::>()); + eprintln!("{:?}", fs::read_dir(git_dir)?.collect::>()); + Ok(()) } From 15da3a1c8a9b66dc9ee409c51cf5e7840a7727a5 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 03:43:59 +0900 Subject: [PATCH 03/12] debug(CI): git config --- tests/cli.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/cli.rs b/tests/cli.rs index e973cba..e307225 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -41,6 +41,18 @@ mod integrated_test { Ok(()) } + #[test] + fn git_config() -> Result<()> { + let p = std::process::Command::new("git") + .spawn() + .context("git spawn")? + .wait() + .context("running git failed")? + .to_string(); + eprintln!("{}", p); + Ok(()) + } + #[test] fn single_device() -> Result<()> { let config_dir = assert_fs::TempDir::new()?; @@ -52,6 +64,7 @@ mod integrated_test { .arg("init") .arg("testdev"); cmd.assert().success().stdout(predicate::str::contains("")); + eprintln!("{:?}", fs::read_dir(config_dir.path())?.collect::>()); assert_eq!( std::fs::read_to_string(config_dir.path().join("devname"))?, "testdev\n" From 8c38448337afe55e5cd938136cc402713ac26a62 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 03:48:47 +0900 Subject: [PATCH 04/12] debug(CI): git init test --- tests/cli.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tests/cli.rs b/tests/cli.rs index e307225..15f06af 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -42,8 +42,24 @@ mod integrated_test { } #[test] - fn git_config() -> Result<()> { - let p = std::process::Command::new("git") + fn git_init() -> Result<()> { + let p = std::process::Command::new("git init") + .spawn() + .context("git spawn")? + .wait() + .context("running git failed")? + .to_string(); + eprintln!("{}", p); + + let p = std::process::Command::new("git config --list") + .spawn() + .context("git spawn")? + .wait() + .context("running git failed")? + .to_string(); + eprintln!("{}", p); + + let p = std::process::Command::new("git config --list --local") .spawn() .context("git spawn")? .wait() From abba046c2b09aebefd2c592f91d874dbae1a80e4 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 03:53:03 +0900 Subject: [PATCH 05/12] fix(CI): command construction --- tests/cli.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/cli.rs b/tests/cli.rs index 15f06af..15794f1 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -43,7 +43,8 @@ mod integrated_test { #[test] fn git_init() -> Result<()> { - let p = std::process::Command::new("git init") + let p = std::process::Command::new("git") + .args(["init"]) .spawn() .context("git spawn")? .wait() @@ -51,7 +52,8 @@ mod integrated_test { .to_string(); eprintln!("{}", p); - let p = std::process::Command::new("git config --list") + let p = std::process::Command::new("git") + .args(["config", "--list"]) .spawn() .context("git spawn")? .wait() @@ -59,7 +61,8 @@ mod integrated_test { .to_string(); eprintln!("{}", p); - let p = std::process::Command::new("git config --list --local") + let p = std::process::Command::new("git") + .args(["config", "--list", "--local"]) .spawn() .context("git spawn")? .wait() From 3595834b535bec29ff6c484f5c637e221f5ec99a Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 03:57:46 +0900 Subject: [PATCH 06/12] debug(CI): change workdir & add same config setup --- tests/cli.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/cli.rs b/tests/cli.rs index 15794f1..18829c5 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -43,32 +43,37 @@ mod integrated_test { #[test] fn git_init() -> Result<()> { + let temp_dir = assert_fs::TempDir::new()?; + setup_gitconfig(temp_dir.path())?; let p = std::process::Command::new("git") .args(["init"]) + .current_dir(temp_dir.path()) .spawn() .context("git spawn")? .wait() .context("running git failed")? .to_string(); - eprintln!("{}", p); + eprintln!("git init\n{}", p); let p = std::process::Command::new("git") .args(["config", "--list"]) + .current_dir(temp_dir.path()) .spawn() .context("git spawn")? .wait() .context("running git failed")? .to_string(); - eprintln!("{}", p); + eprintln!("git config\n{}", p); let p = std::process::Command::new("git") .args(["config", "--list", "--local"]) + .current_dir(temp_dir.path()) .spawn() .context("git spawn")? .wait() .context("running git failed")? .to_string(); - eprintln!("{}", p); + eprintln!("git config --local\n{}", p); Ok(()) } From 22817d13540905f3aedf807c5b3d4eab2890ddb9 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 04:29:37 +0900 Subject: [PATCH 07/12] debug(CI): use libgit2 --- tests/cli.rs | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/tests/cli.rs b/tests/cli.rs index 18829c5..e499e3a 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -45,35 +45,15 @@ mod integrated_test { fn git_init() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; setup_gitconfig(temp_dir.path())?; - let p = std::process::Command::new("git") - .args(["init"]) - .current_dir(temp_dir.path()) + let repo = git2::Repository::init(temp_dir.path())?; + eprintln!("{:?}", repo.path()); + let git_status = std::process::Command::new("git") + .args(["status"]) .spawn() - .context("git spawn")? + .context("git status")? .wait() - .context("running git failed")? - .to_string(); - eprintln!("git init\n{}", p); - - let p = std::process::Command::new("git") - .args(["config", "--list"]) - .current_dir(temp_dir.path()) - .spawn() - .context("git spawn")? - .wait() - .context("running git failed")? - .to_string(); - eprintln!("git config\n{}", p); - - let p = std::process::Command::new("git") - .args(["config", "--list", "--local"]) - .current_dir(temp_dir.path()) - .spawn() - .context("git spawn")? - .wait() - .context("running git failed")? - .to_string(); - eprintln!("git config --local\n{}", p); + .context("didn't complete")?; + eprintln!("{}", git_status); Ok(()) } From 3922d634b672897c79a30042155a0ec87ec89355 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 04:33:29 +0900 Subject: [PATCH 08/12] debug(CI): return err at the end of test using libgit2 --- tests/cli.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/cli.rs b/tests/cli.rs index e499e3a..58b4b0c 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -54,7 +54,21 @@ mod integrated_test { .wait() .context("didn't complete")?; eprintln!("{}", git_status); - Ok(()) + let git_config = std::process::Command::new("git") + .args(["config", "--list"]) + .spawn() + .context("git status")? + .wait() + .context("didn't complete")?; + eprintln!("{}", git_config); + let git_config = std::process::Command::new("git") + .args(["config", "--list", "--local"]) + .spawn() + .context("git status")? + .wait() + .context("didn't complete")?; + eprintln!("{}", git_config); + Err(anyhow::anyhow!("finished (error for debug)")) } #[test] From 9285f449759d317b7624829deeb9809934706355 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 04:36:40 +0900 Subject: [PATCH 09/12] debug(CI): change current_dir in git config --- tests/cli.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/cli.rs b/tests/cli.rs index 58b4b0c..a4875d2 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -49,6 +49,7 @@ mod integrated_test { eprintln!("{:?}", repo.path()); let git_status = std::process::Command::new("git") .args(["status"]) + .current_dir(temp_dir.path()) .spawn() .context("git status")? .wait() @@ -56,6 +57,7 @@ mod integrated_test { eprintln!("{}", git_status); let git_config = std::process::Command::new("git") .args(["config", "--list"]) + .current_dir(temp_dir.path()) .spawn() .context("git status")? .wait() @@ -63,6 +65,7 @@ mod integrated_test { eprintln!("{}", git_config); let git_config = std::process::Command::new("git") .args(["config", "--list", "--local"]) + .current_dir(temp_dir.path()) .spawn() .context("git status")? .wait() From 0fcb2475b4c432fe02c4482893e93d639cfa3520 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Tue, 4 Feb 2025 05:19:33 +0900 Subject: [PATCH 10/12] fix(git): git config now gets local config CI was failing since xdbm init didn't get local git config. --- src/main.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 23dadcd..7186c21 100644 --- a/src/main.rs +++ b/src/main.rs @@ -156,7 +156,11 @@ fn add_and_commit(repo: &Repository, path: &Path, message: &str) -> Result Date: Tue, 4 Feb 2025 05:38:09 +0900 Subject: [PATCH 11/12] debug: add trace log --- .github/workflows/rust.yml | 1 + src/main.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7cee19b..ad5a52d 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,6 +8,7 @@ on: env: CARGO_TERM_COLOR: always + RUST_LOG: trace jobs: build-and-lint: diff --git a/src/main.rs b/src/main.rs index 7186c21..fd2a846 100644 --- a/src/main.rs +++ b/src/main.rs @@ -158,7 +158,19 @@ fn add_and_commit(repo: &Repository, path: &Path, message: &str) -> Result Date: Tue, 4 Feb 2025 05:43:10 +0900 Subject: [PATCH 12/12] debug: increase log level in CI --- .github/workflows/rust.yml | 1 - tests/cli.rs | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index ad5a52d..7cee19b 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -8,7 +8,6 @@ on: env: CARGO_TERM_COLOR: always - RUST_LOG: trace jobs: build-and-lint: diff --git a/tests/cli.rs b/tests/cli.rs index a4875d2..658bc03 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -83,7 +83,8 @@ mod integrated_test { cmd.arg("-c") .arg(config_dir.path()) .arg("init") - .arg("testdev"); + .arg("testdev") + .arg("-vvvv"); cmd.assert().success().stdout(predicate::str::contains("")); eprintln!("{:?}", fs::read_dir(config_dir.path())?.collect::>()); assert_eq!(