mirror of
https://github.com/qwjyh/xdbm
synced 2025-04-21 04:05:49 +09:00
Merge 5eee4ef117
into 90cebed15f
This commit is contained in:
commit
ed781612ec
2 changed files with 69 additions and 15 deletions
18
src/main.rs
18
src/main.rs
|
@ -156,7 +156,23 @@ fn add_and_commit(repo: &Repository, path: &Path, message: &str) -> Result<Oid,
|
|||
index.write()?;
|
||||
let oid = index.write_tree()?;
|
||||
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(
|
||||
config.get_entry("user.name")?.value().unwrap(),
|
||||
config.get_entry("user.email")?.value().unwrap(),
|
||||
|
|
66
tests/cli.rs
66
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(()),
|
||||
};
|
||||
|
@ -35,20 +35,58 @@ mod integrated_test {
|
|||
.as_bytes(),
|
||||
)?;
|
||||
|
||||
eprintln!("{:?}", fs::read_dir(path)?.collect::<Vec<_>>());
|
||||
eprintln!("{:?}", fs::read_dir(git_dir)?.collect::<Vec<_>>());
|
||||
|
||||
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]
|
||||
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")
|
||||
.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::<Vec<_>>());
|
||||
assert_eq!(
|
||||
std::fs::read_to_string(config_dir.path().join("devname"))?,
|
||||
"testdev\n"
|
||||
|
@ -135,7 +173,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 +206,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 +222,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 +257,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())
|
||||
|
|
Loading…
Add table
Reference in a new issue