summaryrefslogtreecommitdiff
path: root/makima/src/daemon/storage/patch.rs
diff options
context:
space:
mode:
Diffstat (limited to 'makima/src/daemon/storage/patch.rs')
-rw-r--r--makima/src/daemon/storage/patch.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/makima/src/daemon/storage/patch.rs b/makima/src/daemon/storage/patch.rs
index 0da4eda..b374d15 100644
--- a/makima/src/daemon/storage/patch.rs
+++ b/makima/src/daemon/storage/patch.rs
@@ -227,6 +227,16 @@ pub async fn create_export_patch(
None
};
+ // Get current HEAD SHA for comparison
+ let head_sha = Command::new("git")
+ .current_dir(worktree_path)
+ .args(["rev-parse", "HEAD"])
+ .output()
+ .await
+ .ok()
+ .filter(|o| o.status.success())
+ .map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string());
+
// If we couldn't find upstream, try common default branches
let base = if base.is_none() {
let default_branches = ["origin/main", "origin/master", "main", "master"];
@@ -241,14 +251,23 @@ pub async fn create_export_patch(
if let Ok(output) = merge_base {
if output.status.success() {
- found_base = Some(String::from_utf8_lossy(&output.stdout).trim().to_string());
- break;
+ let mb_sha = String::from_utf8_lossy(&output.stdout).trim().to_string();
+ // Skip if merge-base equals HEAD (would result in empty diff)
+ if head_sha.as_ref() != Some(&mb_sha) {
+ found_base = Some(mb_sha);
+ break;
+ }
}
}
}
found_base
} else {
- base
+ // Also check upstream base
+ if base.as_ref() == head_sha.as_ref() {
+ None
+ } else {
+ base
+ }
};
// If still nothing, get the first commit or use HEAD~1