use gix_commitgraph::Graph; use crate::{check_common, inspect_refs, make_readonly_repo}; #[test] fn single_parent() -> crate::Result { let repo_dir = make_readonly_repo("single_parent.sh"); let refs = inspect_refs(&repo_dir, &["parent", "child"]); let cg = Graph::from_info_dir(repo_dir.join(".git").join("objects").join("info"))?; check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["parent"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["child"].pos()).generation(), 2); Ok(()) } #[test] fn octupus_merges() -> crate::Result { let repo_dir = make_readonly_repo("octopus_merges.sh"); let refs = inspect_refs( &repo_dir, &[ "root", "parent1", "parent2", "parent3", "parent4", "three_parents", "four_parents", ], ); let cg = Graph::at(repo_dir.join(".git").join("objects").join("info"))?; check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["root"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["parent1"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["parent2"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["parent3"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["parent4"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["three_parents"].pos()).generation(), 3); assert_eq!(cg.commit_at(refs["four_parents"].pos()).generation(), 3); Ok(()) } #[test] fn single_commit() -> crate::Result { let repo_dir = make_readonly_repo("single_commit.sh"); let refs = inspect_refs(&repo_dir, &["commit"]); let cg = gix_commitgraph::at(repo_dir.join(".git").join("objects").join("info"))?; check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["commit"].pos()).generation(), 1); Ok(()) } #[test] fn two_parents() -> crate::Result { let repo_dir = make_readonly_repo("two_parents.sh"); let refs = inspect_refs(&repo_dir, &["parent1", "parent2", "child"]); let cg = Graph::from_info_dir(repo_dir.join(".git").join("objects").join("info"))?; check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["parent1"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["parent2"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["child"].pos()).generation(), 2); Ok(()) }