]> git.ipfire.org Git - thirdparty/git.git/commitdiff
docs: address inaccurate `--empty` default with `--exec`
authorBrian Lyles <brianmlyles@gmail.com>
Mon, 25 Mar 2024 23:16:48 +0000 (18:16 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 Mar 2024 23:45:40 +0000 (16:45 -0700)
The documentation for git-rebase(1) indicates that using the `--exec`
option will use `--empty=drop`. This is inaccurate: when `--interactive`
is not explicitly provided, `--exec` results in `--empty=keep`
behaviors.

Correctly indicate the behavior of `--exec` using `--empty=keep` when
`--interactive` is not specified.

Reported-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Brian Lyles <brianmlyles@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-rebase.txt
t/t3424-rebase-empty.sh

index e7e725044db418845cd8ee53aed60fba2374634f..a602e8fa81f214863f948a545f240b5e51242dda 100644 (file)
@@ -295,11 +295,11 @@ See also INCOMPATIBLE OPTIONS below.
        empty after rebasing (because they contain a subset of already
        upstream changes).  With drop (the default), commits that
        become empty are dropped.  With keep, such commits are kept.
-       With ask (implied by `--interactive`), the rebase will halt when
-       an empty commit is applied allowing you to choose whether to
-       drop it, edit files more, or just commit the empty changes.
-       Other options, like `--exec`, will use the default of drop unless
-       `-i`/`--interactive` is explicitly specified.
+       With ask, the rebase will halt when an empty commit is applied
+       allowing you to choose whether to drop it, edit files more, or just
+       commit the empty changes.
+       When the `-i`/`--interactive` option is used, the default becomes ask.
+       Otherwise, when the `--exec` option is used, the default becomes keep.
 +
 Note that commits which start empty are kept (unless `--no-keep-empty`
 is specified), and commits which are clean cherry-picks (as determined
index 5e1045a0afc9ecfe122904db0a3c589ff804c732..73ff35ced2a53e1b8eb78bf92daefb271148bdf1 100755 (executable)
@@ -167,4 +167,42 @@ test_expect_success 'rebase --merge does not leave state laying around' '
        test_path_is_missing .git/MERGE_MSG
 '
 
+test_expect_success 'rebase --exec --empty=drop' '
+       git checkout -B testing localmods &&
+       git rebase --exec "true" --empty=drop upstream &&
+
+       test_write_lines D C B A >expect &&
+       git log --format=%s >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'rebase --exec --empty=keep' '
+       git checkout -B testing localmods &&
+       git rebase --exec "true" --empty=keep upstream &&
+
+       test_write_lines D C2 C B A >expect &&
+       git log --format=%s >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'rebase --exec uses default of --empty=keep' '
+       git checkout -B testing localmods &&
+       git rebase --exec "true" upstream &&
+
+       test_write_lines D C2 C B A >expect &&
+       git log --format=%s >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'rebase --exec --empty=ask' '
+       git checkout -B testing localmods &&
+       test_must_fail git rebase --exec "true" --empty=ask upstream &&
+
+       git rebase --skip &&
+
+       test_write_lines D C B A >expect &&
+       git log --format=%s >actual &&
+       test_cmp expect actual
+'
+
 test_done