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

Function RepoMetadata

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

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

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