From 76d975524e02b723dec19620f3a973df913ae309 Mon Sep 17 00:00:00 2001 From: Chris Westra Date: Fri, 16 Sep 2022 12:12:25 -0400 Subject: [PATCH] Add feature detection query --- api/queries_branch_issue_reference.go | 22 ++++++++++++++++++++++ pkg/cmd/issue/develop/develop.go | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/api/queries_branch_issue_reference.go b/api/queries_branch_issue_reference.go index 3f6f66966..6626bea7f 100644 --- a/api/queries_branch_issue_reference.go +++ b/api/queries_branch_issue_reference.go @@ -132,6 +132,28 @@ func ListLinkedBranches(client *Client, repo ghrepo.Interface, issueNumber int) } +// introspects the schema to see if we expose the LinkedBranch type +func CheckLinkedBranchFeature(client *Client, host string) (err error) { + var featureDetection struct { + Name struct { + Fields []struct { + Name string + } + } `graphql:"LinkedBranch: __type(name: \"LinkedBranch\")"` + } + + err = client.Query(host, "LinkedBranch_fields", &featureDetection, nil) + + if err != nil { + return err + } + + if len(featureDetection.Name.Fields) == 0 { + return fmt.Errorf("the `gh issue develop` command is not currently available") + } + return nil +} + // This fetches the oids for the repo's default branch (`main`, etc) and the name the user might have provided in one shot. func FindBaseOid(client *Client, repo *Repository, ref string) (string, string, error) { query := ` diff --git a/pkg/cmd/issue/develop/develop.go b/pkg/cmd/issue/develop/develop.go index 39dca8820..d209121f7 100644 --- a/pkg/cmd/issue/develop/develop.go +++ b/pkg/cmd/issue/develop/develop.go @@ -84,6 +84,11 @@ func developRunCreate(opts *DevelopOptions) (err error) { } opts.IO.StartProgressIndicator() + err = api.CheckLinkedBranchFeature(apiClient, baseRepo.RepoHost()) + if err != nil { + return err + } + repo, err := api.GitHubRepo(apiClient, baseRepo) if err != nil { return err @@ -190,6 +195,11 @@ func developRunList(opts *DevelopOptions) (err error) { } opts.IO.StartProgressIndicator() + + err = api.CheckLinkedBranchFeature(apiClient, baseRepo.RepoHost()) + if err != nil { + return err + } issueNumber, issueRepo, err := issueMetadata(opts.IssueSelector, opts.IssueRepoSelector, baseRepo) if err != nil { return err