a73x

33b79898

Extract auto_detect_and_update helper to eliminate repeated pattern

a73x   2026-03-21 19:10

Addresses review feedback: the 3-line detect+push pattern was duplicated
in comment(), review(), and merge(). Now callers use a single line.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

diff --git a/src/patch.rs b/src/patch.rs
index 21d7e8b..0256319 100644
--- a/src/patch.rs
+++ b/src/patch.rs
@@ -57,6 +57,19 @@ fn auto_detect_revision(
    }))
}

/// Auto-detect revision changes and update the in-memory PatchState in place.
fn auto_detect_and_update(
    repo: &Repository,
    ref_name: &str,
    patch: &mut PatchState,
    sk: &ed25519_dalek::SigningKey,
) -> Result<(), Error> {
    if let Some(rev) = auto_detect_revision(repo, ref_name, patch, sk)? {
        patch.revisions.push(rev);
    }
    Ok(())
}

pub fn create(
    repo: &Repository,
    title: &str,
@@ -214,13 +227,10 @@ pub fn comment(
) -> Result<(), crate::error::Error> {
    let sk = signing::load_signing_key(&signing::signing_key_dir()?)?;
    let (ref_name, id) = state::resolve_patch_ref(repo, id_prefix)?;
    let patch = PatchState::from_ref(repo, &ref_name, &id)?;
    let mut patch = PatchState::from_ref(repo, &ref_name, &id)?;

    // Auto-detect revision (runs for all comment types to record branch changes)
    let mut patch = patch;
    if let Some(rev) = auto_detect_revision(repo, &ref_name, &patch, &sk)? {
        patch.revisions.push(rev);
    }
    auto_detect_and_update(repo, &ref_name, &mut patch, &sk)?;

    let author = get_author(repo)?;

@@ -281,13 +291,10 @@ pub fn review(
) -> Result<(), crate::error::Error> {
    let sk = signing::load_signing_key(&signing::signing_key_dir()?)?;
    let (ref_name, id) = state::resolve_patch_ref(repo, id_prefix)?;
    let patch = PatchState::from_ref(repo, &ref_name, &id)?;
    let mut patch = PatchState::from_ref(repo, &ref_name, &id)?;

    // Auto-detect revision
    let mut patch = patch;
    if let Some(rev) = auto_detect_revision(repo, &ref_name, &patch, &sk)? {
        patch.revisions.push(rev);
    }
    auto_detect_and_update(repo, &ref_name, &mut patch, &sk)?;

    let rev = if let Some(target) = target_revision {
        if !patch.revisions.iter().any(|r| r.number == target) {
@@ -367,9 +374,7 @@ pub fn merge(repo: &Repository, id_prefix: &str) -> Result<PatchState, crate::er

    // Auto-detect revision before merge
    let mut p = p;
    if let Some(rev) = auto_detect_revision(repo, &ref_name, &p, &sk)? {
        p.revisions.push(rev);
    }
    auto_detect_and_update(repo, &ref_name, &mut p, &sk)?;

    // Check merge policy
    let config = read_collab_config(repo);