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

Function RepoMetadata

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

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

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