From 94f7675c72867de3bf97e4d5c42154f9fba87770 Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Wed, 19 Oct 2022 14:41:12 +0200 Subject: [PATCH] Move `sign_refs` to `WriteRepository` trait Signed-off-by: Alexis Sellier --- radicle-remote-helper/src/lib.rs | 2 +- radicle-tools/src/rad-push.rs | 7 +++++-- radicle/src/rad.rs | 6 +++--- radicle/src/storage.rs | 17 +---------------- radicle/src/storage/git.rs | 32 ++++++++++++-------------------- radicle/src/test/storage.rs | 15 +++++++-------- 6 files changed, 29 insertions(+), 50 deletions(-) diff --git a/radicle-remote-helper/src/lib.rs b/radicle-remote-helper/src/lib.rs index 5a7b56eb..838a2915 100644 --- a/radicle-remote-helper/src/lib.rs +++ b/radicle-remote-helper/src/lib.rs @@ -107,7 +107,7 @@ pub fn run(profile: radicle::Profile) -> Result<(), Box anyhow::Result<()> { let cwd = Path::new(".").canonicalize()?; @@ -12,9 +12,12 @@ fn main() -> anyhow::Result<()> { println!("{}", output); let project = profile.storage.repository(id)?; - let sigrefs = profile.storage.sign_refs(&project, &profile.signer)?; + let sigrefs = project.sign_refs(&profile.signer)?; + let head = project.set_head()?; + profile.node()?.announce_refs(&id)?; + println!("head: {}", head); println!("ok: {}", sigrefs.signature); Ok(()) diff --git a/radicle/src/rad.rs b/radicle/src/rad.rs index a2f8167f..e014c657 100644 --- a/radicle/src/rad.rs +++ b/radicle/src/rad.rs @@ -76,7 +76,7 @@ pub fn init( git::configure_remote(repo, &REMOTE_NAME, &url)?; git::push(repo, &REMOTE_NAME, pk, [(&default_branch, &default_branch)])?; - let signed = storage.sign_refs(&project, signer)?; + let signed = project.sign_refs(signer)?; let _head = project.set_head()?; Ok((id, signed)) @@ -147,7 +147,7 @@ pub fn fork_remote( &format!("creating identity branch for {me}"), )?; - storage.sign_refs(&repository, &signer)?; + repository.sign_refs(&signer)?; Ok(()) } @@ -178,7 +178,7 @@ pub fn fork( false, &format!("creating identity branch for {me}"), )?; - storage.sign_refs(&repository, &signer)?; + repository.sign_refs(&signer)?; Ok(()) } diff --git a/radicle/src/storage.rs b/radicle/src/storage.rs index 5e52fb23..0d4bfe2e 100644 --- a/radicle/src/storage.rs +++ b/radicle/src/storage.rs @@ -41,8 +41,6 @@ pub enum Error { Id(#[from] IdError), #[error("i/o: {0}")] Io(#[from] io::Error), - #[error("invalid repository head")] - InvalidHead, } /// Fetch error. @@ -232,12 +230,6 @@ pub trait WriteStorage: ReadStorage { type Repository: WriteRepository; fn repository(&self, proj: Id) -> Result; - // TODO: Move this to `WriteRepository`. - fn sign_refs( - &self, - repository: &Self::Repository, - signer: G, - ) -> Result, Error>; fn fetch(&self, proj_id: Id, remote: &Url) -> Result, FetchError>; } @@ -286,6 +278,7 @@ pub trait ReadRepository { pub trait WriteRepository: ReadRepository { fn fetch(&mut self, url: &Url) -> Result, FetchError>; fn set_head(&self) -> Result; + fn sign_refs(&self, signer: G) -> Result, Error>; fn raw(&self) -> &git2::Repository; } @@ -326,14 +319,6 @@ where self.deref().repository(proj) } - fn sign_refs( - &self, - repository: &S::Repository, - signer: G, - ) -> Result, Error> { - self.deref().sign_refs(repository, signer) - } - fn fetch(&self, proj_id: Id, remote: &Url) -> Result, FetchError> { self.deref().fetch(proj_id, remote) } diff --git a/radicle/src/storage/git.rs b/radicle/src/storage/git.rs index 2f3ded70..9a0b7125 100644 --- a/radicle/src/storage/git.rs +++ b/radicle/src/storage/git.rs @@ -108,14 +108,6 @@ impl WriteStorage for Storage { Repository::open(paths::repository(self, &proj), proj) } - fn sign_refs( - &self, - repository: &Repository, - signer: G, - ) -> Result, Error> { - repository.sign_refs(signer) - } - fn fetch(&self, proj_id: Id, remote: &Url) -> Result, FetchError> { let mut repo = self.repository(proj_id)?; let mut path = remote.path.clone(); @@ -399,16 +391,6 @@ impl Repository { ); Ok(remotes) } - - pub fn sign_refs(&self, signer: G) -> Result, Error> { - let remote = signer.public_key(); - let refs = self.references(remote)?; - let signed = refs.signed(&signer)?; - - signed.save(remote, self)?; - - Ok(signed) - } } impl ReadRepository for Repository { @@ -660,6 +642,16 @@ impl WriteRepository for Repository { Ok(head) } + fn sign_refs(&self, signer: G) -> Result, Error> { + let remote = signer.public_key(); + let refs = self.references(remote)?; + let signed = refs.signed(&signer)?; + + signed.save(remote, self)?; + + Ok(signed) + } + fn raw(&self) -> &git2::Repository { &self.backend } @@ -845,7 +837,7 @@ mod tests { .unwrap() .id(); git::push(&proj_repo, "rad", alice_id, [(&refname, &refname)]).unwrap(); - alice.sign_refs(&alice_proj_storage, &alice_signer).unwrap(); + alice_proj_storage.sign_refs(&alice_signer).unwrap(); alice_proj_storage.set_head().unwrap(); // Have Bob fetch Alice's new commit. @@ -990,7 +982,7 @@ mod tests { ) .unwrap(); - let signed = storage.sign_refs(&project, &signer).unwrap(); + let signed = project.sign_refs(&signer).unwrap(); let remote = project.remote(&alice).unwrap(); let mut unsigned = project.references(&alice).unwrap(); diff --git a/radicle/src/test/storage.rs b/radicle/src/test/storage.rs index 9198c85c..d485d0f5 100644 --- a/radicle/src/test/storage.rs +++ b/radicle/src/test/storage.rs @@ -66,14 +66,6 @@ impl WriteStorage for MockStorage { Ok(MockRepository {}) } - fn sign_refs( - &self, - _repository: &Self::Repository, - _signer: G, - ) -> Result, Error> { - todo!() - } - fn fetch(&self, _proj_id: Id, _remote: &Url) -> Result, FetchError> { Ok(vec![]) } @@ -161,4 +153,11 @@ impl WriteRepository for MockRepository { fn set_head(&self) -> Result { todo!() } + + fn sign_refs( + &self, + _signer: G, + ) -> Result, Error> { + todo!() + } }