MCPcopy Create free account
hub / github.com/git/git / diff_get_merge_base

Function diff_get_merge_base

diff-lib.c:578–619  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

576}
577
578void diff_get_merge_base(const struct rev_info *revs, struct object_id *mb)
579{
580 int i;
581 struct commit *mb_child[2] = {0};
582 struct commit_list *merge_bases = NULL;
583
584 for (i = 0; i < revs->pending.nr; i++) {
585 struct object *obj = revs->pending.objects[i].item;
586 if (obj->flags)
587 die(_("--merge-base does not work with ranges"));
588 }
589
590 /*
591 * This check must go after the for loop above because A...B
592 * ranges produce three pending commits, resulting in a
593 * misleading error message.
594 */
595 if (revs->pending.nr < 1 || revs->pending.nr > 2)
596 BUG("unexpected revs->pending.nr: %d", revs->pending.nr);
597
598 for (i = 0; i < revs->pending.nr; i++)
599 mb_child[i] = lookup_commit_reference(the_repository, &revs->pending.objects[i].item->oid);
600 if (revs->pending.nr == 1) {
601 struct object_id oid;
602
603 if (repo_get_oid(the_repository, "HEAD", &oid))
604 die(_("unable to get HEAD"));
605
606 mb_child[1] = lookup_commit_reference(the_repository, &oid);
607 }
608
609 if (repo_get_merge_bases(the_repository, mb_child[0], mb_child[1], &merge_bases) < 0)
610 exit(128);
611 if (!merge_bases)
612 die(_("no merge base found"));
613 if (merge_bases->next)
614 die(_("multiple merge bases found"));
615
616 oidcpy(mb, &merge_bases->item->object.oid);
617
618 commit_list_free(merge_bases);
619}
620
621void run_diff_index(struct rev_info *revs, unsigned int option)
622{

Callers 3

run_diff_indexFunction · 0.85
cmd_diff_treeFunction · 0.85
builtin_diff_treeFunction · 0.85

Calls 6

lookup_commit_referenceFunction · 0.85
repo_get_oidFunction · 0.85
repo_get_merge_basesFunction · 0.85
oidcpyFunction · 0.85
commit_list_freeFunction · 0.85
dieFunction · 0.70

Tested by

no test coverage detected