cherry-pick: add --allow-empty-message option
authorChris Webb <chris@arachsys.com>
Thu, 2 Aug 2012 10:38:51 +0000 (11:38 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 6 Aug 2012 16:59:53 +0000 (09:59 -0700)
Scripts such as "git rebase -i" cannot currently cherry-pick commits
which have an empty commit message, as git cherry-pick calls git
commit without the --allow-empty-message option.

Add an --allow-empty-message option to git cherry-pick which is passed
through to git commit, so this behaviour can be overridden.

Signed-off-by: Chris Webb <chris@arachsys.com>
Reviewed-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-cherry-pick.txt
builtin/revert.c
sequencer.c
sequencer.h
t/t3505-cherry-pick-empty.sh

index 9f3dae631e5437662e9fb3583b24f414c93bb140..ba1edb82514514e723672e3bda5e8375ab8212fc 100644 (file)
@@ -116,6 +116,11 @@ effect to your index in a row.
        previous commit are dropped.  To force the inclusion of those commits
        use `--keep-redundant-commits`.
 
+--allow-empty-message::
+       By default, cherry-picking a commit with an empty message will fail.
+       This option overrides that behaviour, allowing commits with empty
+       messages to be cherry picked.
+
 --keep-redundant-commits::
        If a commit being cherry picked duplicates a commit already in the
        current history, it will become empty.  By default these
index 82d1bf844b996d5d121169f244358964fd36fd19..5652f238447088857150c683c23fed867e5c0117 100644 (file)
@@ -117,6 +117,7 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
                OPT_END(),
                OPT_END(),
                OPT_END(),
+               OPT_END(),
        };
 
        if (opts->action == REPLAY_PICK) {
@@ -124,6 +125,7 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
                        OPT_BOOLEAN('x', NULL, &opts->record_origin, "append commit name"),
                        OPT_BOOLEAN(0, "ff", &opts->allow_ff, "allow fast-forward"),
                        OPT_BOOLEAN(0, "allow-empty", &opts->allow_empty, "preserve initially empty commits"),
+                       OPT_BOOLEAN(0, "allow-empty-message", &opts->allow_empty_message, "allow commits with empty messages"),
                        OPT_BOOLEAN(0, "keep-redundant-commits", &opts->keep_redundant_commits, "keep redundant, empty commits"),
                        OPT_END(),
                };
index bf078f274bfe23997fcd1bc8c2a1c958f39ac9fe..1ea5293f6ed5395b95fbf63fc41aa28c33db0fa8 100644 (file)
@@ -311,6 +311,9 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
        if (allow_empty)
                argv_array_push(&array, "--allow-empty");
 
+       if (opts->allow_empty_message)
+               argv_array_push(&array, "--allow-empty-message");
+
        rc = run_command_v_opt(array.argv, RUN_GIT_CMD);
        argv_array_clear(&array);
        return rc;
index aa5f17cc3079f39000e9d7526d24354a027daabd..d8494201e0a0ba052356de1094b25bac5b9024c0 100644 (file)
@@ -30,6 +30,7 @@ struct replay_opts {
        int allow_ff;
        int allow_rerere_auto;
        int allow_empty;
+       int allow_empty_message;
        int keep_redundant_commits;
 
        int mainline;
index 5a1340cee69f344613c09b7d4a3f3f7bebd6719e..a0c6e30d805e6e71b9fec4311a6ede298b6265b4 100755 (executable)
@@ -53,6 +53,11 @@ test_expect_success 'index lockfile was removed' '
 
 '
 
+test_expect_success 'cherry-pick a commit with an empty message with --allow-empty-message' '
+       git checkout -f master &&
+       git cherry-pick --allow-empty-message empty-branch
+'
+
 test_expect_success 'cherry pick an empty non-ff commit without --allow-empty' '
        git checkout master &&
        echo fourth >>file2 &&