MCPcopy Create free account
hub / github.com/cli/cli / RepoMetadata

Function RepoMetadata

api/queries_repo.go:987–1093  ·  view source on GitHub ↗

RepoMetadata pre-fetches the metadata for attaching to issues and pull requests

(client *Client, repo ghrepo.Interface, input RepoMetadataInput)

Source from the content-addressed store, hash-verified

985
986// RepoMetadata pre-fetches the metadata for attaching to issues and pull requests
987func RepoMetadata(client *Client, repo ghrepo.Interface, input RepoMetadataInput) (*RepoMetadataResult, error) {
988 var result RepoMetadataResult
989 var g errgroup.Group
990
991 if input.Assignees || input.Reviewers {
992 // TODO ApiActorsSupported
993 if input.ApiActorsSupported {
994 g.Go(func() error {
995 actors, err := RepoAssignableActors(client, repo)
996 if err != nil {
997 return fmt.Errorf("error fetching assignable actors: %w", err)
998 }
999 result.AssignableActors = actors
1000
1001 // Filter actors for users to use for pull request reviewers,
1002 // skip retrieving the same info through RepoAssignableUsers().
1003 var users []AssignableUser
1004 for _, a := range actors {
1005 if _, ok := a.(AssignableUser); !ok {
1006 continue
1007 }
1008 users = append(users, a.(AssignableUser))
1009 }
1010 result.AssignableUsers = users
1011 return nil
1012 })
1013 } else {
1014 // Not using Actors, fetch legacy assignable users.
1015 g.Go(func() error {
1016 users, err := RepoAssignableUsers(client, repo)
1017 if err != nil {
1018 err = fmt.Errorf("error fetching assignable users: %w", err)
1019 }
1020 result.AssignableUsers = users
1021 return err
1022 })
1023 }
1024 }
1025
1026 if input.Reviewers && input.TeamReviewers {
1027 g.Go(func() error {
1028 teams, err := OrganizationTeams(client, repo)
1029 // TODO: better detection of non-org repos
1030 if err != nil && !strings.Contains(err.Error(), errorResolvingOrganization) {
1031 err = fmt.Errorf("error fetching organization teams: %w", err)
1032 return err
1033 }
1034 result.Teams = teams
1035 return nil
1036 })
1037 }
1038
1039 if input.Reviewers {
1040 g.Go(func() error {
1041 login, err := CurrentLoginName(client, repo.RepoHost())
1042 if err != nil {
1043 err = fmt.Errorf("error fetching current login: %w", err)
1044 }

Callers 6

RepoMetadataFetchMethod · 0.92
AddMetadataToIssueParamsFunction · 0.92
FetchOptionsFunction · 0.92
Test_RepoMetadataFunction · 0.85

Calls 13

RepoAssignableActorsFunction · 0.85
RepoAssignableUsersFunction · 0.85
OrganizationTeamsFunction · 0.85
CurrentLoginNameFunction · 0.85
RepoLabelsFunction · 0.85
v1ProjectsFunction · 0.85
v2ProjectsFunction · 0.85
RepoMilestonesFunction · 0.85
ContainsMethod · 0.80
ErrorfMethod · 0.65
RepoHostMethod · 0.65
WaitMethod · 0.65

Tested by 2

Test_RepoMetadataFunction · 0.68