Make git rebase work with --rebase-merges and --exec
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v3 Latest2 patches 0 repliesNew
- v22 patches 6 repliesSuperseded
- v12 patches 6 repliesSuperseded
Changes since v1 from the cover letter
* Replaced the "look-ahead" design by a "keep looking" one: instead of having a nested loop that looks for the end of the fixup/squash chain, we continue the loop, delaying the insertion until we know where the fixup/squash chain ends, if any.
Patches in v3 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/2 | t3430: demonstrate what -r, --autosquash & --exec should dot/ | +17 | 0 replies | |
| 2/2 | rebase --exec: make it work with --rebase-mergessequencer.c t/ | +32 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.
Cover letter [PATCH v3 0/2] Make git rebase work with --rebase-merges and --exec
It was reported via IRC that the exec lines are inserted in the wrong spots when using --rebase-merges.
The reason is that we used a simple, incorrect implementation that happened to work as long as the generated todo list only contains pick, fixup and squash commands. Which is not the case with--rebase-merges.
Fix this issue by using a correct implementation instead, that even takes into account merge commands in the --rebase-merges mode.
Changes since v1:
* Replaced the "look-ahead" design by a "keep looking" one: instead of having a nested loop that looks for the end of the fixup/squash chain, we continue the loop, delaying the insertion until we know where the fixup/squash chain ends, if any.
Johannes Schindelin (2):
t3430: demonstrate what -r, --autosquash & --exec should do rebase --exec: make it work with --rebase-merges
sequencer.c | 42 +++++++++++++++++++++++++++++----------- t/t3430-rebase-merges.sh | 17 ++++++++++++++++ 2 files changed, 48 insertions(+), 11 deletions(-)
base-commit: 1d89318c48d233d52f1db230cf622935ac3c69fa
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-13%2Fdscho%2Frebase-merges-and-exec-commands-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-13/dscho/rebase-merges-and-exec-commands-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/13
Range-diff vs v2:
1: 1d82eb450 = 1: 1d82eb450 t3430: demonstrate what -r, --autosquash & --exec should do
2: 7ca441a89 ! 2: b436f67ba rebase --exec: make it work with --rebase-merges
@@ -22,6 +22,11 @@
`pick` lines, skip any fixup/squash chains, and then insert the `exec`
line. Lather, rinse, repeat.
+ Note: we take pains to insert *before* comment lines whenever possible,
+ as empty commits are represented by commented-out pick lines (and we
+ want to insert a preceding pick's exec line *before* such a line, not
+ afterward).
+
While at it, also add `exec` lines after `merge` commands, because they
are similar in spirit to `pick` commands: they add new commits.
@@ -81,9 +86,13 @@
+ insert = i + 1;
}
- /* append final <commands> */
+- /* append final <commands> */
- strbuf_add(buf, commands, commands_len);
-+ if (insert >= 0 || !offset)
++ /* insert or append final <commands> */
++ if (insert >= 0 && insert < todo_list.nr)
++ strbuf_insert(buf, todo_list.items[insert].offset_in_buf +
++ offset, commands, commands_len);
++ else if (insert >= 0 || !offset)
+ strbuf_add(buf, commands, commands_len);
i = write_message(buf->buf, buf->len, todo_file, 0);Signature · 1 line
gitgitgadget