loadLabels returns what labels exist in github
(gc client, org string, repos []string)
| 400 | |
| 401 | // loadLabels returns what labels exist in github |
| 402 | func loadLabels(gc client, org string, repos []string) (*RepoLabels, error) { |
| 403 | repoChan := make(chan string, len(repos)) |
| 404 | for _, repo := range repos { |
| 405 | repoChan <- repo |
| 406 | } |
| 407 | close(repoChan) |
| 408 | |
| 409 | wg := sync.WaitGroup{} |
| 410 | wg.Add(maxConcurrentWorkers) |
| 411 | labels := make(chan RepoLabels, len(repos)) |
| 412 | errChan := make(chan error, len(repos)) |
| 413 | for i := 0; i < maxConcurrentWorkers; i++ { |
| 414 | go func(repositories <-chan string) { |
| 415 | defer wg.Done() |
| 416 | for repository := range repositories { |
| 417 | logrus.WithField("org", org).WithField("repo", repository).Info("Listing labels for repo") |
| 418 | repoLabels, err := gc.GetRepoLabels(org, repository) |
| 419 | if err != nil { |
| 420 | logrus.WithField("org", org).WithField("repo", repository).WithError(err).Error("Failed listing labels for repo") |
| 421 | errChan <- err |
| 422 | } |
| 423 | labels <- RepoLabels{repository: repoLabels} |
| 424 | } |
| 425 | }(repoChan) |
| 426 | } |
| 427 | |
| 428 | wg.Wait() |
| 429 | close(labels) |
| 430 | close(errChan) |
| 431 | |
| 432 | rl := RepoLabels{} |
| 433 | for data := range labels { |
| 434 | for repo, repoLabels := range data { |
| 435 | rl[repo] = repoLabels |
| 436 | } |
| 437 | } |
| 438 | |
| 439 | var overallErr error |
| 440 | if len(errChan) > 0 { |
| 441 | var listErrs []error |
| 442 | for listErr := range errChan { |
| 443 | listErrs = append(listErrs, listErr) |
| 444 | } |
| 445 | overallErr = fmt.Errorf("failed to list labels: %v", listErrs) |
| 446 | } |
| 447 | |
| 448 | return &rl, overallErr |
| 449 | } |
| 450 | |
| 451 | // Delete the label |
| 452 | func kill(repo string, label Label) Update { |
no test coverage detected