summaryrefslogtreecommitdiff
path: root/builtin/merge-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/merge-base.c')
-rw-r--r--builtin/merge-base.c15
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);
}