This commit is contained in:
qwjyh 2025-02-03 20:43:26 +00:00 committed by GitHub
commit ed781612ec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 69 additions and 15 deletions

View file

@ -156,7 +156,23 @@ fn add_and_commit(repo: &Repository, path: &Path, message: &str) -> Result<Oid,
index.write()?; index.write()?;
let oid = index.write_tree()?; let oid = index.write_tree()?;
let tree = repo.find_tree(oid)?; let tree = repo.find_tree(oid)?;
let config = git2::Config::open_default()?; let config = {
let mut config = git2::Config::open_default()?;
if log::log_enabled!(log::Level::Trace) {
trace!("before reading local config");
config
.entries(None)?
.for_each(|entry| trace!("{:?} = {:?}", entry.name(), entry.value()))?;
}
config.add_file(&path.join(".git/config"), git2::ConfigLevel::Local, false)?;
if log::log_enabled!(log::Level::Trace) {
trace!("after reading local config");
config
.entries(None)?
.for_each(|entry| trace!("{:?} = {:?}", entry.name(), entry.value()))?;
}
config
};
let signature = git2::Signature::now( let signature = git2::Signature::now(
config.get_entry("user.name")?.value().unwrap(), config.get_entry("user.name")?.value().unwrap(),
config.get_entry("user.email")?.value().unwrap(), config.get_entry("user.email")?.value().unwrap(),

View file

@ -1,12 +1,12 @@
mod integrated_test { mod integrated_test {
use std::{ use std::{
fs::{DirBuilder, File}, fs::{self, DirBuilder, File},
io::{self, BufWriter, Write}, io::{self, BufWriter, Write},
ops::Not,
}; };
use anyhow::{Context, Ok, Result}; use anyhow::{Context, Ok, Result};
use assert_cmd::{assert::OutputAssertExt, Command}; use assert_cmd::{assert::OutputAssertExt, Command};
use dirs::home_dir;
use git2::Repository; use git2::Repository;
use log::trace; use log::trace;
use predicates::{boolean::PredicateBooleanExt, prelude::predicate}; use predicates::{boolean::PredicateBooleanExt, prelude::predicate};
@ -16,12 +16,12 @@ mod integrated_test {
/// # Errors /// # Errors
/// ///
/// This function will return an error if it failed to get home directory. /// This function will return an error if it failed to get home directory.
fn setup_gitconfig() -> Result<()> { fn setup_gitconfig(path: &std::path::Path) -> Result<()> {
let f = match File::create_new( let git_dir = path.join(".git");
home_dir() if !git_dir.exists() {
.context("Failed to find home directory")? fs::DirBuilder::new().create(git_dir.clone())?
.join(".gitconfig"), }
) { let f = match File::create_new(git_dir.join("config")) {
io::Result::Ok(f) => f, io::Result::Ok(f) => f,
io::Result::Err(_err) => return Ok(()), io::Result::Err(_err) => return Ok(()),
}; };
@ -35,20 +35,58 @@ mod integrated_test {
.as_bytes(), .as_bytes(),
)?; )?;
eprintln!("{:?}", fs::read_dir(path)?.collect::<Vec<_>>());
eprintln!("{:?}", fs::read_dir(git_dir)?.collect::<Vec<_>>());
Ok(()) Ok(())
} }
#[test]
fn git_init() -> Result<()> {
let temp_dir = assert_fs::TempDir::new()?;
setup_gitconfig(temp_dir.path())?;
let repo = git2::Repository::init(temp_dir.path())?;
eprintln!("{:?}", repo.path());
let git_status = std::process::Command::new("git")
.args(["status"])
.current_dir(temp_dir.path())
.spawn()
.context("git status")?
.wait()
.context("didn't complete")?;
eprintln!("{}", git_status);
let git_config = std::process::Command::new("git")
.args(["config", "--list"])
.current_dir(temp_dir.path())
.spawn()
.context("git status")?
.wait()
.context("didn't complete")?;
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()
.context("didn't complete")?;
eprintln!("{}", git_config);
Err(anyhow::anyhow!("finished (error for debug)"))
}
#[test] #[test]
fn single_device() -> Result<()> { fn single_device() -> Result<()> {
let config_dir = assert_fs::TempDir::new()?; let config_dir = assert_fs::TempDir::new()?;
setup_gitconfig()?; setup_gitconfig(&config_dir)?;
// init // init
let mut cmd = Command::cargo_bin("xdbm")?; let mut cmd = Command::cargo_bin("xdbm")?;
cmd.arg("-c") cmd.arg("-c")
.arg(config_dir.path()) .arg(config_dir.path())
.arg("init") .arg("init")
.arg("testdev"); .arg("testdev")
.arg("-vvvv");
cmd.assert().success().stdout(predicate::str::contains("")); cmd.assert().success().stdout(predicate::str::contains(""));
eprintln!("{:?}", fs::read_dir(config_dir.path())?.collect::<Vec<_>>());
assert_eq!( assert_eq!(
std::fs::read_to_string(config_dir.path().join("devname"))?, std::fs::read_to_string(config_dir.path().join("devname"))?,
"testdev\n" "testdev\n"
@ -135,7 +173,7 @@ mod integrated_test {
fn two_devices_with_same_name() -> Result<()> { fn two_devices_with_same_name() -> Result<()> {
// 1st device // 1st device
let config_dir_1 = assert_fs::TempDir::new()?; let config_dir_1 = assert_fs::TempDir::new()?;
setup_gitconfig()?; setup_gitconfig(&config_dir_1)?;
let mut cmd1 = Command::cargo_bin("xdbm")?; let mut cmd1 = Command::cargo_bin("xdbm")?;
cmd1.arg("-c") cmd1.arg("-c")
.arg(config_dir_1.path()) .arg(config_dir_1.path())
@ -168,7 +206,7 @@ mod integrated_test {
// 2nd device // 2nd device
let config_dir_2 = assert_fs::TempDir::new()?; let config_dir_2 = assert_fs::TempDir::new()?;
setup_gitconfig()?; setup_gitconfig(&config_dir_2)?;
let mut cmd2 = Command::cargo_bin("xdbm")?; let mut cmd2 = Command::cargo_bin("xdbm")?;
cmd2.arg("-c") cmd2.arg("-c")
.arg(config_dir_2.path()) .arg(config_dir_2.path())
@ -184,7 +222,7 @@ mod integrated_test {
fn directory_without_parent() -> Result<()> { fn directory_without_parent() -> Result<()> {
// 1st device // 1st device
let config_dir_1 = assert_fs::TempDir::new()?; let config_dir_1 = assert_fs::TempDir::new()?;
setup_gitconfig()?; setup_gitconfig(&config_dir_1)?;
let mut cmd1 = Command::cargo_bin("xdbm")?; let mut cmd1 = Command::cargo_bin("xdbm")?;
cmd1.arg("-c") cmd1.arg("-c")
.arg(config_dir_1.path()) .arg(config_dir_1.path())
@ -219,7 +257,7 @@ mod integrated_test {
// //
// devices: first // devices: first
let config_dir_1 = assert_fs::TempDir::new()?; let config_dir_1 = assert_fs::TempDir::new()?;
setup_gitconfig()?; setup_gitconfig(&config_dir_1)?;
let mut cmd1 = Command::cargo_bin("xdbm")?; let mut cmd1 = Command::cargo_bin("xdbm")?;
cmd1.arg("-c") cmd1.arg("-c")
.arg(config_dir_1.path()) .arg(config_dir_1.path())