From e7467fb15ff6d679d710c0ee9b6f6d2b94d4c69d Mon Sep 17 00:00:00 2001 From: Lorenz Leutgeb Date: Tue, 24 Mar 2026 22:32:49 +0100 Subject: [PATCH] protocol: SignedRefs upgrades provide `SyncedAt` When upgrading Signed References via `fn upgrad_sigrefs`, the value of `RepositoryInfo::synced_at` was not updated. Thus, the caller could not continue with migrated repositories as usual. Now that enough information about Signed References is propagated, such as the head of Signed References after upgrade, is available, it is possible to construct `SyncedAt`. --- crates/radicle-protocol/src/service.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/radicle-protocol/src/service.rs b/crates/radicle-protocol/src/service.rs index 3b0c4f20..3fafbed9 100644 --- a/crates/radicle-protocol/src/service.rs +++ b/crates/radicle-protocol/src/service.rs @@ -447,10 +447,9 @@ where let mut private = BTreeSet::new(); for repo in self.storage.repositories()? { + let repo = self.upgrade_sigrefs(repo)?; let rid = repo.rid; - self.upgrade_sigrefs(&repo)?; - // If we're not seeding this repo, just skip it. if !self.policies.is_seeding(&rid)? { debug!(target: "service", "Local repository {rid} is not seeded"); @@ -522,9 +521,9 @@ where Ok(()) } - fn upgrade_sigrefs(&mut self, info: &RepositoryInfo) -> Result<(), Error> { + fn upgrade_sigrefs(&mut self, mut info: RepositoryInfo) -> Result { if !matches!(info.refs, SignedRefsInfo::NeedsMigration) { - return Ok(()); + return Ok(info); } let rid = info.rid; @@ -536,8 +535,15 @@ where let repo = self.storage.repository_mut(rid)?; // NOTE: We assume to reach `FeatureLevel::LATEST` by signing refs. - repo.force_sign_refs(&self.signer)?; - Ok(()) + let refs = repo.force_sign_refs(&self.signer)?; + + let repo = self.storage.repository(rid)?; + let synced_at = SyncedAt::new(refs.at, &repo)?; + + info.synced_at = Some(synced_at); + info.refs = SignedRefsInfo::Some(refs); + + Ok(info) } }