diff --git a/src/sign.rs b/src/sign.rs index ba6d074..7fa9e9f 100644 --- a/src/sign.rs +++ b/src/sign.rs @@ -12,13 +12,20 @@ use crate::utils; pub fn command(key_path: PathBuf, rev: String) -> Result<()> { let repo = utils::open_repository()?; for (path, secret_key) in utils::get_secret_keys(key_path)? { - let tree_oid = sign(&repo, &secret_key, &rev)?; - let signed_object = { - let tree_sig = utils::TreeSignature::load_oid(&repo, tree_oid)?; - tree_sig.dereference()? - }; + let signed_object = repo + .revparse_single(&rev) + .context("Failed to look-up object to sign")? + .id(); let key_fingerprint = secret_key.public_key()?.fingerprint()?; let reference = utils::craft_signature_reference(key_fingerprint, signed_object); + if utils::revparse_single_ok_or_else(&repo, &reference, |_| Ok(true), || Ok(false))? { + println!("Signature already exists with key:"); + println!(" - {}", path.display()); + println!("Signature stored under:"); + println!(" - {reference}"); + continue; + } + let tree_oid = sign(&repo, &secret_key, &rev)?; repo.reference( &reference, tree_oid, // references to signatures are non-deterministic,