summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-12-30 11:37:49 -0800
committerJunio C Hamano <gitster@pobox.com>2013-12-30 11:37:49 -0800
commite2f5df42449ace700e5a237f604c34b4657c0edf (patch)
tree5e11f73bb804a5eeaabbe42eec95338ec86beb12
parent2f93541d88fadd1ff5307d81c2c8921ee3eea058 (diff)
downloadgit-e2f5df42449ace700e5a237f604c34b4657c0edf.tar.gz
merge-base: separate "--independent" codepath into its own helper
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>
-rw-r--r--builtin/merge-base.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index 0c4cd2f9f7..daa96c7909 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -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)