a73x

0833ae6d

Simplify read_collab_config with Option-chaining

a73x   2026-03-21 19:05

Replace 7 sequential match arms with a closure using ? operator
and unwrap_or_default(), reducing the function from ~30 to ~12 lines.

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

diff --git a/src/patch.rs b/src/patch.rs
index 590f2f5..dba1b83 100644
--- a/src/patch.rs
+++ b/src/patch.rs
@@ -681,35 +681,17 @@ struct CollabConfig {
}

fn read_collab_config(repo: &Repository) -> CollabConfig {
    let config_ref = "refs/collab/config";
    let tip = match repo.refname_to_id(config_ref) {
        Ok(oid) => oid,
        Err(_) => return CollabConfig::default(),
    };
    let commit = match repo.find_commit(tip) {
        Ok(c) => c,
        Err(_) => return CollabConfig::default(),
    };
    let tree = match commit.tree() {
        Ok(t) => t,
        Err(_) => return CollabConfig::default(),
    };
    let entry = match tree.get_name("config.json") {
        Some(e) => e,
        None => return CollabConfig::default(),
    };
    let blob = match repo.find_blob(entry.id()) {
        Ok(b) => b,
        Err(_) => return CollabConfig::default(),
    };
    let val: serde_json::Value = match serde_json::from_slice(blob.content()) {
        Ok(v) => v,
        Err(_) => return CollabConfig::default(),
    };
    CollabConfig {
        require_approval_on_latest: val
            .pointer("/merge/require_approval_on_latest")
            .and_then(|v| v.as_bool())
            .unwrap_or(false),
    }
    (|| -> Option<CollabConfig> {
        let tip = repo.refname_to_id("refs/collab/config").ok()?;
        let tree = repo.find_commit(tip).ok()?.tree().ok()?;
        let blob = repo.find_blob(tree.get_name("config.json")?.id()).ok()?;
        let val: serde_json::Value = serde_json::from_slice(blob.content()).ok()?;
        Some(CollabConfig {
            require_approval_on_latest: val
                .pointer("/merge/require_approval_on_latest")
                .and_then(|v| v.as_bool())
                .unwrap_or(false),
        })
    })()
    .unwrap_or_default()
}