@@ -469,41 +469,66 @@ type RepoMetadataInput struct {
469469// RepoMetadata pre-fetches the metadata for attaching to issues and pull requests
470470func RepoMetadata (client * Client , repo ghrepo.Interface , input RepoMetadataInput ) (* RepoMetadataResult , error ) {
471471 result := RepoMetadataResult {}
472+ errc := make (chan error )
473+ count := 0
472474
473475 if input .Assignees {
474- users , err := RepoAssignableUsers (client , repo )
475- if err != nil {
476- return nil , fmt .Errorf ("error fetching assignees: %w" , err )
477- }
478- result .AssignableUsers = users
476+ count ++
477+ go func () {
478+ users , err := RepoAssignableUsers (client , repo )
479+ if err != nil {
480+ err = fmt .Errorf ("error fetching assignees: %w" , err )
481+ }
482+ result .AssignableUsers = users
483+ errc <- err
484+ }()
479485 }
480486 if input .Reviewers {
481487 // TODO
482488 }
483489 if input .Labels {
484- labels , err := RepoLabels (client , repo )
485- if err != nil {
486- return nil , fmt .Errorf ("error fetching labels: %w" , err )
487- }
488- result .Labels = labels
490+ count ++
491+ go func () {
492+ labels , err := RepoLabels (client , repo )
493+ if err != nil {
494+ err = fmt .Errorf ("error fetching labels: %w" , err )
495+ }
496+ result .Labels = labels
497+ errc <- err
498+ }()
489499 }
490500 if input .Projects {
491- // TODO: org-level projects
492- projects , err := RepoProjects (client , repo )
493- if err != nil {
494- return nil , fmt .Errorf ("error fetching projects: %w" , err )
495- }
496- result .Projects = projects
501+ count ++
502+ go func () {
503+ // TODO: org-level projects
504+ projects , err := RepoProjects (client , repo )
505+ if err != nil {
506+ err = fmt .Errorf ("error fetching projects: %w" , err )
507+ }
508+ result .Projects = projects
509+ errc <- err
510+ }()
511+ }
512+ if input .Milestones {
513+ count ++
514+ go func () {
515+ milestones , err := RepoMilestones (client , repo )
516+ if err != nil {
517+ err = fmt .Errorf ("error fetching milestones: %w" , err )
518+ }
519+ result .Milestones = milestones
520+ errc <- err
521+ }()
497522 }
498- if input .Assignees {
499- milestones , err := RepoMilestones (client , repo )
500- if err != nil {
501- return nil , fmt .Errorf ("error fetching milestones: %w" , err )
523+
524+ var err error
525+ for i := 0 ; i < count ; i ++ {
526+ if e := <- errc ; e != nil {
527+ err = e
502528 }
503- result .Milestones = milestones
504529 }
505530
506- return & result , nil
531+ return & result , err
507532}
508533
509534type RepoProject struct {
0 commit comments