Thread (10 messages) 10 messages, 2 authors, 1d ago

Re: [PATCH 2/2] rebase: remember fixup -c after skipping fixup/squash

From: Phillip Wood <hidden>
Date: 2026-07-26 15:41:41

Hi Junio

On 24/07/2026 22:18, Junio C Hamano wrote:
Phillip Wood [off-list ref] writes:
quoted
  	return starts_with(ctx->current_fixups.buf, "squash") ||
  		strstr(ctx->current_fixups.buf, "\nsquash");
+}
+
+/* Does the current fixup chain contain a "fixup -c" command? */
+static int seen_fixup_edit_msg(struct replay_ctx *ctx)
+{
+	return starts_with(ctx->current_fixups.buf, "fixup -c") ||
+		strstr(ctx->current_fixups.buf, "\nfixup -c");
  }
It is a bit annoying that "git diff" decided to consider the "}" at
the end of the otherwise unmodified function to be the one that was
added X-<.  But thanks to it, we can see this mirrors the previous
function to check if we have "squash" anywhere.  I wonder what
diff-algorithm was used to produce this result, but it is an
unrelated tangent.
Patience diff without the diff slider. When I was reviewing some of 
Ezekiel's patches I noticed that the diff slider was munging some diffs 
generated by patience in a way I didn't like so I tried turning it off 
to see what happened. It seems I haven't rebuilt my local git in a while ...
quoted
@@ -5391,8 +5403,8 @@ static int commit_staged_changes(struct repository *r,
  				 * message, no need to bother the user with
  				 * opening the commit message in the editor.
  				 */
-				if (!starts_with(p, "squash ") &&
-				    !strstr(p, "\nsquash "))
+				if (!seen_squash(ctx) &&
+				    !seen_fixup_edit_msg(ctx))
  					flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
If 'fixup -c' is anywhere in the chain, we would need to offer the
user a chance to edit (similar to having 'squash').

It is a bit surprising that the 'squash' detection, for which we
already had a helper function, was open-coded here.  I also notice
that the helpers (including the new 'fixup -c' one) do not insist on
having a space immediately after the verb 'squash'.  Should we add
one above?
I'm not sure the space thing makes much difference as this isn't the 
todo file that the user edits. We're reading a file that we've written 
and the lines can only start with "fixup" or "squash"
Other than these minor nits, this looks good.

It is a bit disappointing that, with so many users who crucially
depend on the proper operation of 'rebase -i', we have received no
review comments on these two patches so far.  Perhaps summer is a
truly quiet and slow season ;-)
Oswald mentioned in another thread that he'd read these and they seemed 
to make sense. In general I find it hard to attract reviewers for 
rebase/sequencer patches - it is one of those features that everyone 
uses but not many people on the list seem to be familiar with the code.
I will wait for a few more days and then mark the topic for 'next'.
Thanks for your review, I've sent a re-roll fixing the newline detection 
in the previous patch.

Thanks

Phillip
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help