diff options
Diffstat (limited to 'builtin/merge-base.c')
-rw-r--r-- | builtin/merge-base.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/builtin/merge-base.c b/builtin/merge-base.c index c0d1822eb3..16f3f3d15a 100644 --- a/builtin/merge-base.c +++ b/builtin/merge-base.c @@ -6,11 +6,14 @@ #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 show_major) { struct commit_list *result; - result = get_merge_bases_many_dirty(rev[0], rev_nr - 1, rev + 1); + result = (show_major + ? get_major_merge_bases(rev[0], rev[1]) + : get_merge_bases_many_dirty(rev[0], rev_nr - 1, rev + 1)); if (!result) return 1; @@ -208,10 +211,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 show_major = 0; int cmdmode = 0; struct option options[] = { OPT_BOOL('a', "all", &show_all, N_("output all common ancestors")), + OPT_BOOL(0, "major-base-only", &show_major, + N_("show only merge bases 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 +261,8 @@ 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); + + if (show_major && rev_nr != 2) + die("--major-base-only can be used only with two commits"); + return show_merge_base(rev, rev_nr, show_all, show_major); } |