This commit is contained in:
2026-10-13 09:05:51 +07:00
parent 7878feb236
commit 4a57a01f4a
7 changed files with 394 additions and 465 deletions
+2
View File
@@ -1192,11 +1192,13 @@ impl Repo {
],
..Default::default()
};
self.inner
.find_remote("origin")?
.connect(gix::remote::Direction::Fetch)?
.prepare_fetch(Discard, options)?
.receive(Discard, &IS_INTERRUPTED)?;
Ok(())
}
+58
View File
@@ -55,6 +55,64 @@ fn push_all_mirrors_branches_and_tags() {
assert!(refs.contains("refs/tags/v1.0"));
}
#[test]
fn ref_state_matches_the_git_cli_ref_listing() {
let (dir, repo) = fixture(&[("a.txt", b"one")]);
commit_all(&repo, "initial");
let dir = dir.path();
git_run(dir, &["branch", "browse-group"]);
git_run(dir, &["checkout", "-q", "-b", "new-search"]);
std::fs::write(dir.join("b.txt"), b"two").expect("write");
commit_all(&repo, "search work");
git_run(dir, &["checkout", "-q", "-"]);
git_run(dir, &["tag", "v1"]);
let listing = |repo: &Repo| {
let mut refs = repo.ref_state().expect("ref state").refs;
refs.sort();
refs
};
// Loose refs.
let loose = listing(&Repo::open(dir).expect("open"));
// Packed refs.
git_run(dir, &["pack-refs", "--all"]);
let packed = listing(&Repo::open(dir).expect("open"));
let output = git_run(
dir,
&[
"for-each-ref",
"--format=%(refname) %(objectname)",
"refs/heads",
"refs/tags",
],
);
let mut cli = String::from_utf8_lossy(&output.stdout)
.lines()
.map(|line| {
let (name, oid) = line.split_once(' ').expect("for-each-ref format");
(name.to_owned(), oid.to_owned())
})
.collect::<Vec<_>>();
cli.sort();
assert_eq!(loose, cli);
assert_eq!(packed, cli);
assert!(
loose
.iter()
.any(|(name, _)| name == "refs/heads/new-search")
);
assert!(
loose
.iter()
.any(|(name, _)| name == "refs/heads/browse-group")
);
}
#[test]
fn remote_has_refs_reports_whether_pushed_refs_landed() {
let server = tempfile::tempdir().unwrap();