aboutsummaryrefslogtreecommitdiffstats
path: root/add-patch.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2025-10-06 19:23:34 +0200
committerJunio C Hamano <gitster@pobox.com>2025-10-06 10:51:43 -0700
commite8c744dd9a0270d616ab10aaddfa07cfc071e382 (patch)
tree2eac87a2cb87f9f30564034ce15213446d2c340a /add-patch.c
parentadd-patch: let options k and K roll over like j and J (diff)
downloadgit-e8c744dd9a0270d616ab10aaddfa07cfc071e382.tar.gz
git-e8c744dd9a0270d616ab10aaddfa07cfc071e382.zip
add-patch: let options a and d roll over like y and n
Options a and d stage and unstage all undecided hunks towards the bottom of the array of hunks, respectively, and then roll over to the very first hunk. The first part is similar to y and n if the current hunk is the last one in the array, but they roll over to the next undecided hunk if there is any. That's more useful; do it for a and d as well. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'add-patch.c')
-rw-r--r--add-patch.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/add-patch.c b/add-patch.c
index 4f314c16ec..6da13a78b5 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -1418,6 +1418,17 @@ static size_t inc_mod(size_t a, size_t m)
return a < m - 1 ? a + 1 : 0;
}
+static bool get_first_undecided(const struct file_diff *file_diff, size_t *idx)
+{
+ for (size_t i = 0; i < file_diff->hunk_nr; i++) {
+ if (file_diff->hunk[i].use == UNDECIDED_HUNK) {
+ *idx = i;
+ return true;
+ }
+ }
+ return false;
+}
+
static int patch_update_file(struct add_p_state *s,
struct file_diff *file_diff)
{
@@ -1572,6 +1583,8 @@ soft_increment:
if (hunk->use == UNDECIDED_HUNK)
hunk->use = USE_HUNK;
}
+ if (!get_first_undecided(file_diff, &hunk_index))
+ hunk_index = 0;
} else if (hunk->use == UNDECIDED_HUNK) {
hunk->use = USE_HUNK;
}
@@ -1582,6 +1595,8 @@ soft_increment:
if (hunk->use == UNDECIDED_HUNK)
hunk->use = SKIP_HUNK;
}
+ if (!get_first_undecided(file_diff, &hunk_index))
+ hunk_index = 0;
} else if (hunk->use == UNDECIDED_HUNK) {
hunk->use = SKIP_HUNK;
}