mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-28 15:26:25 +00:00
signing: pass SigningFn by reference
write_commit() doesn't need ownership of the signing function.
This commit is contained in:
parent
ec7f9e79f6
commit
d747879aee
8 changed files with 20 additions and 17 deletions
|
@ -166,7 +166,7 @@ impl Backend for JitBackend {
|
|||
fn write_commit(
|
||||
&self,
|
||||
contents: Commit,
|
||||
sign_with: Option<SigningFn>,
|
||||
sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<(CommitId, Commit)> {
|
||||
self.inner.write_commit(contents, sign_with)
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ content_hash! {
|
|||
}
|
||||
}
|
||||
|
||||
pub type SigningFn = Box<dyn FnMut(&[u8]) -> SignResult<Vec<u8>>>;
|
||||
pub type SigningFn<'a> = dyn FnMut(&[u8]) -> SignResult<Vec<u8>> + 'a;
|
||||
|
||||
/// Identifies a single legacy tree, which may have path-level conflicts, or a
|
||||
/// merge of multiple trees, where the individual trees do not have conflicts.
|
||||
|
@ -531,6 +531,6 @@ pub trait Backend: Send + Sync + Debug {
|
|||
fn write_commit(
|
||||
&self,
|
||||
contents: Commit,
|
||||
sign_with: Option<SigningFn>,
|
||||
sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<(CommitId, Commit)>;
|
||||
}
|
||||
|
|
|
@ -183,14 +183,13 @@ impl CommitBuilder<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
let sign_settings = self.sign_settings;
|
||||
let sign_settings = &self.sign_settings;
|
||||
let store = self.mut_repo.store();
|
||||
|
||||
let signing_fn = (store.signer().can_sign() && sign_settings.should_sign(&self.commit))
|
||||
.then(|| {
|
||||
let mut signing_fn = (store.signer().can_sign() && sign_settings.should_sign(&self.commit))
|
||||
.then(|| -> Box<SigningFn> {
|
||||
let store = store.clone();
|
||||
Box::new(move |data: &_| store.signer().sign(data, sign_settings.key.as_deref()))
|
||||
as SigningFn
|
||||
});
|
||||
|
||||
// Commit backend doesn't use secure_sig for writing and enforces it with an
|
||||
|
@ -198,7 +197,9 @@ impl CommitBuilder<'_> {
|
|||
// if we're rewriting a signed commit
|
||||
self.commit.secure_sig = None;
|
||||
|
||||
let commit = self.mut_repo.write_commit(self.commit, signing_fn)?;
|
||||
let commit = self
|
||||
.mut_repo
|
||||
.write_commit(self.commit, signing_fn.as_deref_mut())?;
|
||||
if let Some(rewrite_source_id) = rewrite_source_id {
|
||||
self.mut_repo
|
||||
.record_rewritten_commit(rewrite_source_id, commit.id().clone())
|
||||
|
|
|
@ -904,7 +904,7 @@ impl Backend for GitBackend {
|
|||
fn write_commit(
|
||||
&self,
|
||||
mut contents: Commit,
|
||||
mut sign_with: Option<SigningFn>,
|
||||
mut sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<(CommitId, Commit)> {
|
||||
assert!(contents.secure_sig.is_none(), "commit.secure_sig was set");
|
||||
|
||||
|
@ -1668,12 +1668,14 @@ mod tests {
|
|||
secure_sig: None,
|
||||
};
|
||||
|
||||
let signer = Box::new(|data: &_| {
|
||||
let mut signer = |data: &_| {
|
||||
let hash: String = blake2b_hash(data).encode_hex();
|
||||
Ok(format!("test sig\n\n\nhash={hash}").into_bytes())
|
||||
});
|
||||
};
|
||||
|
||||
let (id, commit) = backend.write_commit(commit, Some(signer)).unwrap();
|
||||
let (id, commit) = backend
|
||||
.write_commit(commit, Some(&mut signer as &mut SigningFn))
|
||||
.unwrap();
|
||||
|
||||
let git_repo = backend.git_repo();
|
||||
let obj = git_repo.find_object(id.as_bytes()).unwrap();
|
||||
|
|
|
@ -267,7 +267,7 @@ impl Backend for LocalBackend {
|
|||
fn write_commit(
|
||||
&self,
|
||||
mut commit: Commit,
|
||||
sign_with: Option<SigningFn>,
|
||||
sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<(CommitId, Commit)> {
|
||||
assert!(commit.secure_sig.is_none(), "commit.secure_sig was set");
|
||||
|
||||
|
@ -279,7 +279,7 @@ impl Backend for LocalBackend {
|
|||
let temp_file = NamedTempFile::new_in(&self.path).map_err(to_other_err)?;
|
||||
|
||||
let mut proto = commit_to_proto(&commit);
|
||||
if let Some(mut sign) = sign_with {
|
||||
if let Some(sign) = sign_with {
|
||||
let data = proto.encode_to_vec();
|
||||
let sig = sign(&data).map_err(to_other_err)?;
|
||||
proto.secure_sig = Some(sig.clone());
|
||||
|
|
|
@ -801,7 +801,7 @@ impl MutableRepo {
|
|||
pub fn write_commit(
|
||||
&mut self,
|
||||
commit: backend::Commit,
|
||||
sign_with: Option<SigningFn>,
|
||||
sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<Commit> {
|
||||
let commit = self.store().write_commit(commit, sign_with)?;
|
||||
self.add_head(&commit);
|
||||
|
|
|
@ -138,7 +138,7 @@ impl Store {
|
|||
pub fn write_commit(
|
||||
self: &Arc<Self>,
|
||||
commit: backend::Commit,
|
||||
sign_with: Option<SigningFn>,
|
||||
sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<Commit> {
|
||||
assert!(!commit.parents.is_empty());
|
||||
|
||||
|
|
|
@ -276,7 +276,7 @@ impl Backend for TestBackend {
|
|||
fn write_commit(
|
||||
&self,
|
||||
mut contents: Commit,
|
||||
mut sign_with: Option<SigningFn>,
|
||||
mut sign_with: Option<&mut SigningFn>,
|
||||
) -> BackendResult<(CommitId, Commit)> {
|
||||
assert!(contents.secure_sig.is_none(), "commit.secure_sig was set");
|
||||
|
||||
|
|
Loading…
Reference in a new issue