use git_index::{verify::extensions::no_find, State};use git_repository as git;use git_repository::prelude::FindExt;use git_testtools::scripted_fixture_repo_read_only; #[test]fn tree_to_state() -> crate::Result { let fixtures = [ "make_index/v2.sh", "make_index/v2_more_files.sh", "make_index/v2_all_file_kinds.sh", "make_index/v4_more_files_IEOT.sh", ]; for fixture in fixtures { let repo_dir = scripted_fixture_repo_read_only(fixture)?; let repo = git::open(&repo_dir)?; let tree_id = repo.head_commit()?.tree_id()?; let expected_state = repo.index()?; let actual_state = State::from_tree(&tree_id, |oid, buf| repo.objects.find_tree_iter(oid, buf).ok())?; compare_states(&actual_state, &expected_state, fixture) } Ok(())} fn compare_states(actual: &State, expected: &State, fixture: &str) { actual.verify_entries().expect("valid"); actual.verify_extensions(false, no_find).expect("valid"); assert_eq!( actual.entries().len(), expected.entries().len(), "entry count mismatch in {:?}", fixture ); for (a, e) in actual.entries().iter().zip(expected.entries()) { assert_eq!(a.id, e.id, "entry id mismatch in {:?}", fixture); assert_eq!(a.flags, e.flags, "entry flags mismatch in {:?}", fixture); assert_eq!(a.mode, e.mode, "entry mode mismatch in {:?}", fixture); assert_eq!(a.path(actual), e.path(expected), "entry path mismatch in {:?}", fixture); }}
use git_index::{verify::extensions::no_find, State};
use git_repository as git;
use git_repository::prelude::FindExt;
use git_testtools::scripted_fixture_repo_read_only;
#[test]
fn tree_to_state() -> crate::Result {
let fixtures = [
"make_index/v2.sh",
"make_index/v2_more_files.sh",
"make_index/v2_all_file_kinds.sh",
"make_index/v4_more_files_IEOT.sh",
];
for fixture in fixtures {
let repo_dir = scripted_fixture_repo_read_only(fixture)?;
let repo = git::open(&repo_dir)?;
let tree_id = repo.head_commit()?.tree_id()?;
let expected_state = repo.index()?;
let actual_state = State::from_tree(&tree_id, |oid, buf| repo.objects.find_tree_iter(oid, buf).ok())?;
compare_states(&actual_state, &expected_state, fixture)
}
Ok(())
}
fn compare_states(actual: &State, expected: &State, fixture: &str) {
actual.verify_entries().expect("valid");
actual.verify_extensions(false, no_find).expect("valid");
assert_eq!(
actual.entries().len(),
expected.entries().len(),
"entry count mismatch in {:?}",
fixture
);
for (a, e) in actual.entries().iter().zip(expected.entries()) {
assert_eq!(a.id, e.id, "entry id mismatch in {:?}", fixture);
assert_eq!(a.flags, e.flags, "entry flags mismatch in {:?}", fixture);
assert_eq!(a.mode, e.mode, "entry mode mismatch in {:?}", fixture);
assert_eq!(a.path(actual), e.path(expected), "entry path mismatch in {:?}", fixture);
}
}