MCPcopy Index your code
hub / github.com/cli/cli / RepoMetadata

Function RepoMetadata

api/queries_repo.go:978–1084  ·  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

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

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