]> Pileus Git - ~andy/git/commitdiff
merge-base: separate "--independent" codepath into its own helper
authorJunio C Hamano <gitster@pobox.com>
Mon, 30 Dec 2013 19:37:49 +0000 (11:37 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Dec 2013 19:37:49 +0000 (11:37 -0800)
It piggybacks on an unrelated handle_octopus() function only because
there are some similarities between the way they need to preprocess
their input and output their result.  There is nothing similar in
the true logic between these two operations.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge-base.c

index 0c4cd2f9f792cdf47cecf3401eb2bf7c676f7f6e..daa96c79092933ed13dfc67f26062b2c308eb80a 100644 (file)
@@ -44,19 +44,36 @@ static struct commit *get_commit_reference(const char *arg)
        return r;
 }
 
-static int handle_octopus(int count, const char **args, int reduce, int show_all)
+static int handle_independent(int count, const char **args)
 {
        struct commit_list *revs = NULL;
        struct commit_list *result;
        int i;
 
-       if (reduce)
-               show_all = 1;
+       for (i = count - 1; i >= 0; i--)
+               commit_list_insert(get_commit_reference(args[i]), &revs);
+
+       result = reduce_heads(revs);
+       if (!result)
+               return 1;
+
+       while (result) {
+               printf("%s\n", sha1_to_hex(result->item->object.sha1));
+               result = result->next;
+       }
+       return 0;
+}
+
+static int handle_octopus(int count, const char **args, int show_all)
+{
+       struct commit_list *revs = NULL;
+       struct commit_list *result;
+       int i;
 
        for (i = count - 1; i >= 0; i--)
                commit_list_insert(get_commit_reference(args[i]), &revs);
 
-       result = reduce ? reduce_heads(revs) : get_octopus_merge_bases(revs);
+       result = get_octopus_merge_bases(revs);
 
        if (!result)
                return 1;
@@ -114,8 +131,10 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
        if (reduce && (show_all || octopus))
                die("--independent cannot be used with other options");
 
-       if (octopus || reduce)
-               return handle_octopus(argc, argv, reduce, show_all);
+       if (octopus)
+               return handle_octopus(argc, argv, show_all);
+       else if (reduce)
+               return handle_independent(argc, argv);
 
        rev = xmalloc(argc * sizeof(*rev));
        while (argc-- > 0)