diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-10-18 16:25:53 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-10-18 16:25:53 -0700 |
commit | 7ae0fd9ed86e0b9f8359a7fbbc5d45001acb6ff6 (patch) | |
tree | be76d1d586be9473b6ad32b8c5f5ac6b497e71f4 /commit.c | |
parent | 2cd944df190f3c5c82461b4859547527376f7aa9 (diff) | |
download | git-jc/merge-base-major.tar.gz |
merge-base: WIP finish integrating major-onlyjc/merge-base-major
Diffstat (limited to 'commit.c')
-rw-r--r-- | commit.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -957,6 +957,7 @@ static struct commit_list *get_merge_bases_many_0(struct commit *one, struct commit **rslt; struct commit_list *result; int cnt, i; + char *major; result = merge_bases_many(one, n, twos); @@ -981,16 +982,14 @@ static struct commit_list *get_merge_bases_many_0(struct commit *one, /* There are more than one */ cnt = commit_list_count(result); rslt = xcalloc(cnt, sizeof(*rslt)); + major = xcalloc(cnt, sizeof(*major)); for (list = result, i = 0; list; list = list->next) rslt[i++] = list->item; free_commit_list(result); if (major_only) { - /* debug */ for (i = 0; i < cnt; i++) - fprintf(stderr, "%c %s\n", - (rslt[i]->object.flags & FPCHAIN) ? '+' : '-', - oid_to_hex(&rslt[i]->object.oid)); + major[i] = !!(rslt[i]->object.flags & FPCHAIN); } clear_commit_marks(one, all_flags); @@ -999,11 +998,13 @@ static struct commit_list *get_merge_bases_many_0(struct commit *one, mark_redundant(rslt, cnt); result = NULL; for (i = 0; i < cnt; i++) - if (!(rslt[i]->object.flags & STALE)) + if (!(rslt[i]->object.flags & STALE) && + (!major_only || major[i])) commit_list_insert_by_date(rslt[i], &result); else rslt[i]->object.flags &= ~STALE; free(rslt); + free(major); return result; } |