MCPcopy Index your code
hub / github.com/github/github-mcp-server / resolveIssueRequestFieldValues

Function resolveIssueRequestFieldValues

pkg/github/issues.go:302–398  ·  view source on GitHub ↗
(ctx context.Context, gqlClient *githubv4.Client, owner, repo string, issueFields []issueWriteFieldInput)

Source from the content-addressed store, hash-verified

300}
301
302func resolveIssueRequestFieldValues(ctx context.Context, gqlClient *githubv4.Client, owner, repo string, issueFields []issueWriteFieldInput) ([]*github.IssueRequestFieldValue, []int64, error) {
303 if len(issueFields) == 0 {
304 return nil, nil, nil
305 }
306
307 ctxWithFeatures := ghcontext.WithGraphQLFeatures(ctx, "issue_fields", "repo_issue_fields")
308 var query issueFieldWriteMetadataQuery
309 vars := map[string]any{
310 "owner": githubv4.String(owner),
311 "repo": githubv4.String(repo),
312 }
313 if err := gqlClient.Query(ctxWithFeatures, &query, vars); err != nil {
314 return nil, nil, fmt.Errorf("failed to query issue fields metadata: %w", err)
315 }
316
317 // Build name → node map, dispatching on concrete type to extract name.
318 fieldByName := make(map[string]issueFieldWriteMetadataNode, len(query.Repository.IssueFields.Nodes))
319 for _, node := range query.Repository.IssueFields.Nodes {
320 var name string
321 switch string(node.TypeName) {
322 case "IssueFieldText":
323 name = string(node.IssueFieldText.Name)
324 case "IssueFieldNumber":
325 name = string(node.IssueFieldNumber.Name)
326 case "IssueFieldDate":
327 name = string(node.IssueFieldDate.Name)
328 case "IssueFieldSingleSelect":
329 name = string(node.IssueFieldSingleSelect.Name)
330 default:
331 continue
332 }
333 fieldByName[strings.ToLower(strings.TrimSpace(name))] = node
334 }
335
336 resolved := make([]*github.IssueRequestFieldValue, 0, len(issueFields))
337 var fieldIDsToDelete []int64
338 for _, fieldInput := range issueFields {
339 node, ok := fieldByName[strings.ToLower(strings.TrimSpace(fieldInput.FieldName))]
340 if !ok {
341 return nil, nil, fmt.Errorf("issue field %q was not found in %s/%s", fieldInput.FieldName, owner, repo)
342 }
343
344 var fullDatabaseIDStr, dataType string
345 switch string(node.TypeName) {
346 case "IssueFieldText":
347 fullDatabaseIDStr = string(node.IssueFieldText.FullDatabaseID)
348 dataType = string(node.IssueFieldText.DataType)
349 case "IssueFieldNumber":
350 fullDatabaseIDStr = string(node.IssueFieldNumber.FullDatabaseID)
351 dataType = string(node.IssueFieldNumber.DataType)
352 case "IssueFieldDate":
353 fullDatabaseIDStr = string(node.IssueFieldDate.FullDatabaseID)
354 dataType = string(node.IssueFieldDate.DataType)
355 case "IssueFieldSingleSelect":
356 fullDatabaseIDStr = string(node.IssueFieldSingleSelect.FullDatabaseID)
357 dataType = string(node.IssueFieldSingleSelect.DataType)
358 }
359

Callers 1

IssueWriteFunction · 0.85

Calls 2

parseFullDatabaseIDFunction · 0.85
StringMethod · 0.45

Tested by

no test coverage detected