From 09f796234d76f4a25807371bb709c18678ac7bc9 Mon Sep 17 00:00:00 2001 From: cloudhead Date: Thu, 31 Oct 2024 17:34:03 +0100 Subject: [PATCH] radicle: Compute root OID for older remotes For older clients, `refs/rad/root` won't be set. In that case, compute it locally based on `refs/rad/id`. --- radicle/src/storage/git.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/radicle/src/storage/git.rs b/radicle/src/storage/git.rs index d4732104..b0e3aae1 100644 --- a/radicle/src/storage/git.rs +++ b/radicle/src/storage/git.rs @@ -781,8 +781,18 @@ impl ReadRepository for Repository { } fn identity_root_of(&self, remote: &RemoteId) -> Result { - self.reference_oid(remote, &git::refs::storage::IDENTITY_ROOT) - .map_err(RepositoryError::from) + // Remotes that run newer clients will have this reference set. For older clients, + // compute the root OID based on the identity head. + if let Ok(root) = self.reference_oid(remote, &git::refs::storage::IDENTITY_ROOT) { + return Ok(root); + } + let oid = self.identity_head_of(remote)?; + let root = self + .revwalk(oid)? + .last() + .ok_or(RepositoryError::Doc(DocError::Missing))??; + + Ok(root.into()) } fn canonical_identity_head(&self) -> Result {