From 2c642ed8668745271a714f0a672dbfcd6b0a6fa8 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Sat, 28 Aug 2010 01:58:16 +0530 Subject: [PATCH] format-patch: Don't go over merge commits If the topmost three commits in a branch were merge commits, 'git format-patch -3' used to output nothing. Since Git can't prepare patches out of merge commits anyway, don't go over them in the first place. 'git format-patch -3' now prepares three patches from the topmost three commits without counting merge commits. Also add a corresponding test in t4014-format-patch and update documentation. Signed-off-by: Ramkumar Ramachandra Signed-off-by: Junio C Hamano --- Documentation/git-format-patch.txt | 2 +- builtin/log.c | 7 +------ t/t4014-format-patch.sh | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt index 835fb7135..95b8bcc49 100644 --- a/Documentation/git-format-patch.txt +++ b/Documentation/git-format-patch.txt @@ -73,7 +73,7 @@ OPTIONS include::diff-options.txt[] -:: - Limits the number of patches to prepare. + Prepare patches from the topmost commits. -o :: --output-directory :: diff --git a/builtin/log.c b/builtin/log.c index 6208703c0..0093b2d8d 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1012,8 +1012,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) rev.commit_format = CMIT_FMT_EMAIL; rev.verbose_header = 1; rev.diff = 1; - rev.combine_merges = 0; - rev.ignore_merges = 1; + rev.no_merges = 1; DIFF_OPT_SET(&rev.diffopt, RECURSIVE); rev.subject_prefix = fmt_patch_subject_prefix; memset(&s_r_opt, 0, sizeof(s_r_opt)); @@ -1184,10 +1183,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) continue; } - /* ignore merges */ - if (commit->parents && commit->parents->next) - continue; - if (ignore_if_in_upstream && has_commit_patch_id(commit, &ids)) continue; diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index 6321ac88a..2e78c9e66 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -56,6 +56,22 @@ test_expect_success "format-patch --ignore-if-in-upstream" ' ' +test_expect_success "format-patch doesn't consider merge commits" ' + + git checkout -b slave master && + echo "Another line" >>file && + test_tick && + git commit -am "Slave change #1" && + echo "Yet another line" >>file && + test_tick && + git commit -am "Slave change #2" && + git checkout -b merger master && + test_tick && + git merge --no-ff slave && + cnt=`git format-patch -3 --stdout | grep "^From " | wc -l` && + test $cnt = 3 +' + test_expect_success "format-patch result applies" ' git checkout -b rebuild-0 master && -- 2.30.2