From: Junio C Hamano <gitster@pobox.com>
To: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com>
Cc: git@vger.kernel.org, "Patrick Steinhardt" <ps@pks.im>,
"Phillip Wood" <phillip.wood123@gmail.com>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Christian Couder" <christian.couder@gmail.com>,
"Kristoffer Haugsbakk" <kristofferhaugsbakk@fastmail.com>,
"Ben Knoble" <ben.knoble@gmail.com>,
"Karthik Nayak" <karthik.188@gmail.com>
Subject: Re: [PATCH v3 2/3] add-patch: Allow interfile navigation when selecting hunks
Date: Fri, 06 Feb 2026 10:54:52 -0800 [thread overview]
Message-ID: <xmqqwm0pem83.fsf@gitster.g> (raw)
In-Reply-To: <24692afa3f0a67d3f3eba776cc745287c5d71e94.1770390576.git.abrahamadekunle50@gmail.com> (Abraham Samuel Adekunle's message of "Fri, 6 Feb 2026 16:56:14 +0100")
Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> writes:
> + for (i = 0; i < s.file_diff_nr;) {
> + if (s.file_diff[i].binary && !s.file_diff[i].hunk_nr) {
> binary_count++;
> + i++;
> + continue;
> + }
This "continue" is a commonly seen good trick to avoid having the
nesting go too deep. As we know the case where the condition holds
have already been dealt with and moved to the next iteration at this
point, we can ...
> + else {
... omit this extra "else" block and write what is inside for
everybody (not just "those who did not pass the if condition above",
which is what "else" tells us).
> + ret = patch_update_file(&s, s.file_diff + i);
> + if (ret == NEXT_FILE) {
> + if (s.s.no_auto_advance && i == s.file_diff_nr - 1)
> + i = 0;
> + else
> + i++;
> + continue;
> + }
> + if (ret == QUIT)
> + break;
> + if (s.s.no_auto_advance && ret == PREVIOUS_FILE) {
> + if (i == 0)
> + i = s.file_diff_nr - 1;
> + else
> + i--;
> + continue;
> + }
The asymmetry between next/quit and prev feels curious.
The patch_update_file() helper returns QUIT when the user tells us
to (regardless of auto-advance setting), PREVIOUS when '<' is given
but that is only possible with auto-advance disabled, and NEXT in
all other cases. The check inside the NEXT case for auto-advance is
to decide if we want to overflow 'i' beyond file_diff_nr to complete
the session, or we want to wrap-around back to the first file.
But ret can be PREV only under auto-advance disabled, so the check
there feels totally redundant.
And we want to treat the list of files as a ring buffer only when
auto-advance is set to false. This may work in practice but the
logic feels convoluted.
The patch_update_file() knows how many files there are to decide if
we want to offer '<' and '>'. It also knows the file index within
the file_diff_nr for the file it is handling. I wonder if it should
do a bit more with its return value to help the caller? E.g.,
perhaps it can return the next 'i' if it wants the caller to advance
(and decide to do the ring-buffer if needed), or if it wants to tell
the caller that everything is done by returning some sentinel value
(e.g., -1)? Then this part of the caller can just be
if ((i = patch_update_file(&s, i)) < 0)
break; /* all done */
perhaps?
By the way, I just noticed that the new local variable you added to
patch_update_file() is called "ret" but that is hiding a different
variable "int ret" that is used to handle the '/' command. It
should be renamed to avoid the name collision.
next prev parent reply other threads:[~2026-02-06 18:54 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-23 11:56 [RFC PATCH 0/1] add-patch: Allow reworking with a file after deciding on its hunks Abraham Samuel Adekunle
2026-01-23 11:58 ` [RFC PATCH 1/1] add-patch: Allow reworking with a file after deciding on all " Abraham Samuel Adekunle
2026-01-23 16:38 ` Junio C Hamano
2026-01-23 21:43 ` Samuel Abraham
2026-01-27 15:43 ` [PATCH v2 0/1] Allow reworking with a file when making hunk decisions Abraham Samuel Adekunle
2026-01-27 15:45 ` [PATCH v2 1/1] Allow reworking with a file after deciding on all its hunks Abraham Samuel Adekunle
2026-01-27 20:48 ` Junio C Hamano
2026-01-28 11:26 ` Samuel Abraham
2026-01-30 9:22 ` Samuel Abraham
2026-01-30 16:29 ` Junio C Hamano
2026-01-30 17:36 ` Samuel Abraham
2026-01-31 19:25 ` Junio C Hamano
2026-02-02 11:14 ` Samuel Abraham
2026-02-02 17:26 ` Junio C Hamano
2026-02-03 9:55 ` Samuel Abraham
2026-01-27 17:04 ` [PATCH v2 0/1] Allow reworking with a file when making hunk decisions Junio C Hamano
2026-01-28 9:49 ` Samuel Abraham
2026-02-06 15:52 ` [PATCH v3 0/3] introduce new option `rework-with-file` Abraham Samuel Adekunle
2026-02-06 15:54 ` [PATCH v3 1/3] interactive -p: add new `--rework-with-file` flag to interactive machinery Abraham Samuel Adekunle
2026-02-06 18:25 ` Junio C Hamano
2026-02-06 20:21 ` Samuel Abraham
2026-02-06 15:56 ` [PATCH v3 2/3] add-patch: Allow interfile navigation when selecting hunks Abraham Samuel Adekunle
2026-02-06 18:35 ` Junio C Hamano
2026-02-06 20:22 ` Samuel Abraham
2026-02-06 18:54 ` Junio C Hamano [this message]
2026-02-06 20:32 ` Samuel Abraham
2026-02-06 19:21 ` Junio C Hamano
2026-02-06 20:37 ` Samuel Abraham
2026-02-12 10:32 ` Samuel Abraham
2026-02-12 17:25 ` Junio C Hamano
2026-02-12 21:13 ` Samuel Abraham
2026-02-12 21:31 ` Junio C Hamano
2026-02-12 22:20 ` Samuel Abraham
2026-02-06 15:57 ` [PATCH v3 3/3] add-patch: Allow proper 'git apply' when using the --rework-with-file flag Abraham Samuel Adekunle
2026-02-06 19:02 ` Junio C Hamano
2026-02-06 20:39 ` Samuel Abraham
2026-02-06 19:19 ` [PATCH v3 0/3] introduce new option `rework-with-file` Junio C Hamano
2026-02-06 20:40 ` Samuel Abraham
2026-02-13 22:08 ` [PATCH v4 0/4] introduce new option `--auto-advance` Abraham Samuel Adekunle
2026-02-13 22:09 ` [PATCH v4 1/4] interactive -p: add new `--auto-advance` flag Abraham Samuel Adekunle
2026-02-13 23:04 ` Junio C Hamano
2026-02-14 9:16 ` Samuel Abraham
2026-02-13 22:10 ` [PATCH v4 2/4] add-patch: modify patch_update_file() signature Abraham Samuel Adekunle
2026-02-13 23:33 ` Junio C Hamano
2026-02-14 10:14 ` Samuel Abraham
2026-02-13 22:11 ` [PATCH v4 3/4] add-patch: allow all-or-none application of patches Abraham Samuel Adekunle
2026-02-13 22:12 ` [PATCH v4 4/4] add-patch: allow interfile navigation when selecting hunks Abraham Samuel Adekunle
2026-02-14 11:01 ` [PATCH v5 0/4] introduce new option `--auto-advance` Abraham Samuel Adekunle
2026-02-14 11:03 ` [PATCH v5 1/4] interactive -p: add new `--auto-advance` flag Abraham Samuel Adekunle
2026-02-14 11:04 ` [PATCH v5 2/4] add-patch: modify patch_update_file() signature Abraham Samuel Adekunle
2026-02-14 11:06 ` [PATCH v5 3/4] add-patch: allow all-or-none application of patches Abraham Samuel Adekunle
2026-02-14 11:06 ` [PATCH v5 4/4] add-patch: allow interfile navigation when selecting hunks Abraham Samuel Adekunle
2026-02-20 22:32 ` [PATCH v5 0/4] introduce new option `--auto-advance` Junio C Hamano
2026-02-21 9:06 ` Samuel Abraham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqwm0pem83.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=abrahamadekunle50@gmail.com \
--cc=ben.knoble@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=phillip.wood123@gmail.com \
--cc=ps@pks.im \
--cc=szeder.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox