def enabled_merge_buttons()

in asfyaml/feature/github/merge_buttons.py [0:0]


def enabled_merge_buttons(self: ASFGitHubFeature):
    # Merge buttons
    merges = self.yaml.get("enabled_merge_buttons")
    if not merges:
        return

    allow_squash_merge = merges.get("squash", NotSet)
    allow_merge_commits = merges.get("merge", NotSet)
    allow_rebase_merge = merges.get("rebase", NotSet)

    if not allow_squash_merge and not allow_merge_commits and not allow_rebase_merge:
        raise Exception("enabled_merge_buttons: at least one of 'squash', 'merge' or 'rebase' must be enabled")

    squash_commit_message = merges.get("squash_commit_message")
    if squash_commit_message and not allow_squash_merge:
        print("ignoring squash_commit_message as squash_merges are disallowed")
        squash_commit_message = None

    squash_merge_commit_title: Opt[str]
    squash_merge_commit_message: Opt[str]

    match squash_commit_message:
        case "DEFAULT":
            squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
            squash_merge_commit_message = "COMMIT_MESSAGES"

        case "PR_TITLE":
            squash_merge_commit_title = "PR_TITLE"
            squash_merge_commit_message = "BLANK"

        case "PR_TITLE_AND_COMMIT_DETAILS":
            squash_merge_commit_title = "PR_TITLE"
            squash_merge_commit_message = "COMMIT_MESSAGES"

        case "PR_TITLE_AND_DESC":
            squash_merge_commit_title = "PR_TITLE"
            squash_merge_commit_message = "PR_BODY"

        case None:
            squash_merge_commit_title = NotSet
            squash_merge_commit_message = NotSet

        case _:
            raise Exception(
                "enabled_merge_buttons: squash_commit_message must be one of "
                "'DEFAULT', 'PR_TITLE', 'PR_TITLE_AND_COMMIT_DETAILS' or 'PR_TITLE_AND_DESC'"
            )

    raw_merge_commit_message = merges.get("merge_commit_message")
    if raw_merge_commit_message and not allow_merge_commits:
        print("ignoring merge_commit_message as merge commits are disallowed")
        raw_merge_commit_message = None

    merge_commit_title: Opt[str]
    merge_commit_message: Opt[str]

    match raw_merge_commit_message:
        case "DEFAULT":
            merge_commit_title = "MERGE_MESSAGE"
            merge_commit_message = "PR_TITLE"

        case "PR_TITLE":
            merge_commit_title = "PR_TITLE"
            merge_commit_message = "BLANK"

        case "PR_TITLE_AND_DESC":
            merge_commit_title = "PR_TITLE"
            merge_commit_message = "PR_BODY"

        case None:
            merge_commit_title = NotSet
            merge_commit_message = NotSet

        case _:
            raise Exception(
                "enabled_merge_buttons: merge_commit_message must be one of "
                "'DEFAULT', 'PR_TITLE' or 'PR_TITLE_AND_DESC'"
            )

    if not self.noop("enabled_merge_buttons"):
        self.ghrepo.edit(
            allow_squash_merge=allow_squash_merge,
            allow_merge_commit=allow_merge_commits,
            allow_rebase_merge=allow_rebase_merge,
            merge_commit_title=merge_commit_title,
            merge_commit_message=merge_commit_message,
            squash_merge_commit_title=squash_merge_commit_title,
            squash_merge_commit_message=squash_merge_commit_message,
        )