Example #1
0
def validate_merge_bases_with_default_branch(
        cli: CLIUX, repo: Repo, active_branch_name: str,
        default_branch_name: str) -> Commit:
    merge_bases = repo.merge_base(default_branch_name, active_branch_name)
    merge_bases_csv = ", ".join(map(lambda c: c.hexsha[0:8], merge_bases))
    cli.debug(f"merge_bases: {merge_bases_csv}")
    num_merge_bases = len(merge_bases)
    if (num_merge_bases == 0):
        raise UnhandledSituationException(
            'No merge-base commit found',
            f"""No merge-base commits between branches {format_branch_name(default_branch_name) } and {
            format_branch_name(active_branch_name) } could be found, so validation could not be performed."""
        )
    if (num_merge_bases > 1):
        description = " ".join([
            f"Multiple ({format_integer(num_merge_bases)}) merge-base commits between branches",
            format_branch_name(default_branch_name), "and",
            format_branch_name(active_branch_name), "were found:"
        ])
        commits_description = reduce(lambda a, b: f"{a}\n- {b}",
                                     map(format_commit, merge_bases), "")
        raise UnhandledSituationException('Multiple merge-base commits found',
                                          description + commits_description)
    return merge_bases[0]