A new option "--fp-only" limits the output to the merge bases that
are on the first-parent chain from the branches being merged.

Signed-off-by: Junio C Hamano <gits...@pobox.com>
---
 Documentation/git-merge-base.txt |  8 +++++++-
 builtin/merge-base.c             | 10 +++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-merge-base.txt b/Documentation/git-merge-base.txt
index 808426faac..f99653f138 100644
--- a/Documentation/git-merge-base.txt
+++ b/Documentation/git-merge-base.txt
@@ -9,7 +9,7 @@ git-merge-base - Find as good common ancestors as possible for 
a merge
 SYNOPSIS
 --------
 [verse]
-'git merge-base' [-a|--all] <commit> <commit>...
+'git merge-base' [-a|--all] [--fp-only] <commit> <commit>...
 'git merge-base' [-a|--all] --octopus <commit>...
 'git merge-base' --is-ancestor <commit> <commit>
 'git merge-base' --independent <commit>...
@@ -72,6 +72,12 @@ OPTIONS
 --all::
        Output all merge bases for the commits, instead of just one.
 
+--fp-only::
+       Limit the output to merge bases that are on the first-parent
+       chain from none of the commits given on the command line.
+
+
+
 DISCUSSION
 ----------
 
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index c0d1822eb3..42febb20ff 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -6,11 +6,12 @@
 #include "revision.h"
 #include "parse-options.h"
 
-static int show_merge_base(struct commit **rev, int rev_nr, int show_all)
+static int show_merge_base(struct commit **rev, int rev_nr, int show_all, int 
fp_only)
 {
        struct commit_list *result;
+       unsigned flags = fp_only ? MB_FPCHAIN : 0;
 
-       result = get_merge_bases_many_dirty(rev[0], rev_nr - 1, rev + 1);
+       result = get_merge_bases_opt(rev[0], rev_nr - 1, rev + 1, flags);
 
        if (!result)
                return 1;
@@ -208,10 +209,13 @@ int cmd_merge_base(int argc, const char **argv, const 
char *prefix)
        struct commit **rev;
        int rev_nr = 0;
        int show_all = 0;
+       int fp_only = 0;
        int cmdmode = 0;
 
        struct option options[] = {
                OPT_BOOL('a', "all", &show_all, N_("output all common 
ancestors")),
+               OPT_BOOL(0, "fp-only", &fp_only,
+                        N_("limit to bases that are on first-parent chain")),
                OPT_CMDMODE(0, "octopus", &cmdmode,
                            N_("find ancestors for a single n-way merge"), 'o'),
                OPT_CMDMODE(0, "independent", &cmdmode,
@@ -255,5 +259,5 @@ int cmd_merge_base(int argc, const char **argv, const char 
*prefix)
        ALLOC_ARRAY(rev, argc);
        while (argc-- > 0)
                rev[rev_nr++] = get_commit_reference(*argv++);
-       return show_merge_base(rev, rev_nr, show_all);
+       return show_merge_base(rev, rev_nr, show_all, fp_only);
 }
-- 
2.10.1-631-gb2c64dcf30

Reply via email to