remote-helper: Fix refs advertisement for patches

Some of the old patches had missing objects and that causes problems
during the ref advertisement, as the object is not found.

In this patch, we check that the object exists and also that the patch
is still open. Otherwise a remote tracking branch is created for every
single patch ref.
This commit is contained in:
Alexis Sellier 2023-08-06 17:29:21 +02:00
parent 0974a4a164
commit 885f4999da
No known key found for this signature in database
3 changed files with 6 additions and 3 deletions

View File

@ -23,7 +23,6 @@ Your branch is up to date with 'rad/master'.
$ git pull --all --ff $ git pull --all --ff
From rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji From rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji
f2de534..f567f69 master -> rad/master f2de534..f567f69 master -> rad/master
27857ec..f567f69 patches/50e29a111972f3b7d2123c5057de5bdf09bc7b1c -> rad/patches/50e29a111972f3b7d2123c5057de5bdf09bc7b1c
From rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi From rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
f2de534..f567f69 master -> alice@z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi/master f2de534..f567f69 master -> alice@z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi/master
``` ```

View File

@ -72,7 +72,11 @@ fn patch_refs<R: ReadRepository + cob::Store>(stored: &R) -> Result<(), Error> {
let patches = radicle::cob::patch::Patches::open(stored)?; let patches = radicle::cob::patch::Patches::open(stored)?;
for patch in patches.all()? { for patch in patches.all()? {
let (id, patch) = patch?; let (id, patch) = patch?;
println!("{} {}", patch.head(), git::refs::storage::patch(&id)); let head = patch.head();
if patch.is_open() && stored.commit(*head).is_ok() {
println!("{} {}", patch.head(), git::refs::storage::patch(&id));
}
} }
Ok(()) Ok(())
} }

View File

@ -391,7 +391,7 @@ pub trait ReadRepository: Sized {
/// Get the [`git2::Commit`] found using its `oid`. /// Get the [`git2::Commit`] found using its `oid`.
/// ///
/// Returns `None` if the commit did not exist. /// Returns `Err` if the commit did not exist.
fn commit(&self, oid: Oid) -> Result<git2::Commit, git::ext::Error>; fn commit(&self, oid: Oid) -> Result<git2::Commit, git::ext::Error>;
/// Perform a revision walk of a commit history starting from the given head. /// Perform a revision walk of a commit history starting from the given head.