MCPcopy
hub / github.com/cli/cli / ProjectsV2ItemsForPullRequest

Function ProjectsV2ItemsForPullRequest

api/queries_projects_v2.go:136–205  ·  view source on GitHub ↗

ProjectsV2ItemsForPullRequest fetches all ProjectItems for a pull request.

(client *Client, repo ghrepo.Interface, pr *PullRequest)

Source from the content-addressed store, hash-verified

134
135// ProjectsV2ItemsForPullRequest fetches all ProjectItems for a pull request.
136func ProjectsV2ItemsForPullRequest(client *Client, repo ghrepo.Interface, pr *PullRequest) error {
137 type projectV2ItemStatus struct {
138 StatusFragment struct {
139 OptionID string `json:"optionId"`
140 Name string `json:"name"`
141 } `graphql:"... on ProjectV2ItemFieldSingleSelectValue"`
142 }
143
144 type projectV2Item struct {
145 ID string `json:"id"`
146 Project struct {
147 ID string `json:"id"`
148 Title string `json:"title"`
149 }
150 Status projectV2ItemStatus `graphql:"status:fieldValueByName(name: \"Status\")"`
151 }
152
153 type response struct {
154 Repository struct {
155 PullRequest struct {
156 ProjectItems struct {
157 TotalCount int
158 Nodes []*projectV2Item
159 PageInfo struct {
160 HasNextPage bool
161 EndCursor string
162 }
163 } `graphql:"projectItems(first: 100, after: $endCursor)"`
164 } `graphql:"pullRequest(number: $number)"`
165 } `graphql:"repository(owner: $owner, name: $name)"`
166 }
167 variables := map[string]interface{}{
168 "owner": githubv4.String(repo.RepoOwner()),
169 "name": githubv4.String(repo.RepoName()),
170 "number": githubv4.Int(pr.Number),
171 "endCursor": (*githubv4.String)(nil),
172 }
173 var items ProjectItems
174 for {
175 var query response
176 err := client.Query(repo.RepoHost(), "PullRequestProjectItems", &query, variables)
177 if err != nil {
178 return err
179 }
180
181 for _, projectItemNode := range query.Repository.PullRequest.ProjectItems.Nodes {
182 if projectItemNode == nil {
183 continue
184 }
185 items.Nodes = append(items.Nodes, &ProjectV2Item{
186 ID: projectItemNode.ID,
187 Project: ProjectV2ItemProject{
188 ID: projectItemNode.Project.ID,
189 Title: projectItemNode.Project.Title,
190 },
191 Status: ProjectV2ItemStatus{
192 OptionID: projectItemNode.Status.StatusFragment.OptionID,
193 Name: projectItemNode.Status.StatusFragment.Name,

Callers 2

FindMethod · 0.92

Calls 5

RepoOwnerMethod · 0.65
RepoNameMethod · 0.65
QueryMethod · 0.65
RepoHostMethod · 0.65
StringMethod · 0.45

Tested by 1