From a59df3c72a7c1d0b65a5a5077608e2f1111e8391 Mon Sep 17 00:00:00 2001 From: Nicolas Arnaud-Cormos Date: Tue, 24 Mar 2026 21:05:18 +0100 Subject: [PATCH] refactor: replace raw git calls with run_git_stdout --- src/weave.rs | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/weave.rs b/src/weave.rs index 2781ad5..7c08b86 100644 --- a/src/weave.rs +++ b/src/weave.rs @@ -316,11 +316,7 @@ impl Weave { let candidate_set: HashSet = candidates.into_iter().collect(); match cherry_pick_equivalents(workdir, &new_upstream_oid, &self.base_oid) { Some(equivalent) => { - for oid in equivalent { - if candidate_set.contains(&oid) { - to_drop.push(oid); - } - } + to_drop.extend(equivalent.intersection(&candidate_set).copied()); } None => { msg::warn( @@ -1269,20 +1265,14 @@ pub fn run_rebase( /// O(upstream commits). `git cherry` uses the same patch-ID logic internally /// and respects diff.algorithm consistently. fn cherry_pick_equivalents(workdir: &Path, upstream: &Oid, base: &Oid) -> Option> { - use std::process::Command; - - let output = Command::new("git") - .current_dir(workdir) - .args(["cherry", &upstream.to_string(), "HEAD", &base.to_string()]) - .output() - .ok()?; - - if !output.status.success() { - return None; - } + let stdout = git_commands::run_git_stdout( + workdir, + &["cherry", &upstream.to_string(), "HEAD", &base.to_string()], + ) + .ok()?; Some( - String::from_utf8_lossy(&output.stdout) + stdout .lines() .filter_map(|line| { line.strip_prefix("- ")