diff --git a/api/queries_repo.go b/api/queries_repo.go index 54194b1bb..3a9f83d89 100644 --- a/api/queries_repo.go +++ b/api/queries_repo.go @@ -32,6 +32,10 @@ type Repository struct { Parent *Repository + MergeCommitAllowed bool + SquashMergeAllowed bool + RebaseMergeAllowed bool + // pseudo-field that keeps track of host name of this repo hostname string } @@ -869,3 +873,30 @@ func MilestoneByNumber(client *Client, repo ghrepo.Interface, number int) (*Repo return query.Repository.Milestone, nil } + +func GetRepoPROpts(client *Client, repo ghrepo.Interface) (*Repository, error) { + query := ` + query RepositoryInfo($owner: String!, $name: String!) { + repository(owner: $owner, name: $name) { + mergeCommitAllowed + squashMergeAllowed + rebaseMergeAllowed + } + }` + variables := map[string]interface{}{ + "owner": repo.RepoOwner(), + "name": repo.RepoName(), + } + + result := struct { + Repository Repository + }{} + + err := client.GraphQL(repo.RepoHost(), query, variables, &result) + + if err != nil { + return nil, err + } + + return &result.Repository, nil +} diff --git a/pkg/cmd/pr/merge/merge.go b/pkg/cmd/pr/merge/merge.go index e22b6c13d..80a08bf02 100644 --- a/pkg/cmd/pr/merge/merge.go +++ b/pkg/cmd/pr/merge/merge.go @@ -140,7 +140,7 @@ func mergeRun(opts *MergeOptions) error { crossRepoPR := pr.HeadRepositoryOwner.Login != baseRepo.RepoOwner() if opts.InteractiveMode { - mergeMethod, deleteBranch, err = prInteractiveMerge(opts.DeleteLocalBranch, crossRepoPR) + mergeMethod, deleteBranch, err = prInteractiveMerge(opts.DeleteLocalBranch, crossRepoPR, baseRepo, apiClient) if err != nil { return nil } @@ -237,7 +237,9 @@ func mergeRun(opts *MergeOptions) error { return nil } -func prInteractiveMerge(deleteLocalBranch bool, crossRepoPR bool) (api.PullRequestMergeMethod, bool, error) { +func prInteractiveMerge(deleteLocalBranch bool, crossRepoPR bool, repo ghrepo.Interface, apiClient *api.Client) (api.PullRequestMergeMethod, bool, error) { + repoMergeOpts, err := api.GetRepoPROpts(apiClient, repo) + mergeMethodQuestion := &survey.Question{ Name: "mergeMethod", Prompt: &survey.Select{