// MungePullRequest is the workhorse the will actually make updates to the PR func (s *SizeMunger) MungePullRequest(config *config.MungeConfig, pr *github.PullRequest, issue *github.Issue, commits []github.RepositoryCommit, events []github.IssueEvent) { s.getGeneratedFiles(config) genFiles := *s.genFiles genPrefixes := *s.genPrefixes if pr.Additions == nil { glog.Warningf("PR %d has nil Additions", *pr.Number) return } adds := *pr.Additions if pr.Deletions == nil { glog.Warningf("PR %d has nil Deletions", *pr.Number) return } dels := *pr.Deletions for _, c := range commits { for _, f := range c.Files { for _, p := range genPrefixes { if strings.HasPrefix(*f.Filename, p) { adds = adds - *f.Additions dels = dels - *f.Deletions continue } } if genFiles.Has(*f.Filename) { adds = adds - *f.Additions dels = dels - *f.Deletions continue } } } newSize := calculateSize(adds, dels) newLabel := labelSizePrefix + newSize existing := github_util.GetLabelsWithPrefix(issue.Labels, labelSizePrefix) needsUpdate := true for _, l := range existing { if l == newLabel { needsUpdate = false continue } config.RemoveLabel(*pr.Number, l) } if needsUpdate { config.AddLabels(*pr.Number, []string{newLabel}) body := fmt.Sprintf("Labelling this PR as %s", newLabel) config.WriteComment(*pr.Number, body) } }
func (NeedsRebaseMunger) MungePullRequest(config *config.MungeConfig, pr *github.PullRequest, issue *github.Issue, commits []github.RepositoryCommit, events []github.IssueEvent) { mergeable, err := config.IsPRMergeable(pr) if err != nil { glog.V(2).Infof("Skipping %d - problem determining mergeable", *pr.Number) return } if mergeable && github_util.HasLabel(issue.Labels, needsRebase) { config.RemoveLabel(*pr.Number, needsRebase) } if !mergeable && !github_util.HasLabel(issue.Labels, needsRebase) { config.AddLabels(*pr.Number, []string{needsRebase}) } }
// MungePullRequest is the workhorse the will actually make updates to the PR func (LGTMAfterCommitMunger) MungePullRequest(config *config.MungeConfig, pr *github.PullRequest, issue *github.Issue, commits []github.RepositoryCommit, events []github.IssueEvent) { lastModified := lastModifiedTime(commits) lgtmTime := lgtmTime(events) if lastModified == nil || lgtmTime == nil { return } if !github_util.HasLabel(issue.Labels, "lgtm") { return } if lastModified.After(*lgtmTime) { lgtmRemovedBody := "PR changed after LGTM, removing LGTM." if err := config.WriteComment(*pr.Number, lgtmRemovedBody); err != nil { return } config.RemoveLabel(*pr.Number, "lgtm") } }
func (PRSizeMunger) MungePullRequest(config *config.MungeConfig, pr *github.PullRequest, issue *github.Issue, commits []github.RepositoryCommit, events []github.IssueEvent) { if pr.Additions == nil { glog.Warningf("PR %d has nil Additions", *pr.Number) return } if pr.Deletions == nil { glog.Warningf("PR %d has nil Deletions", *pr.Number) return } adds := *pr.Additions dels := *pr.Deletions // It would be 'better' to call this for every commit but that takes // a whole lot of time for almost always the same information, and if // our results are slightly wrong, who cares? Instead look for the // generated files once per PR and if someone changed both what files // are generated and then undid that change in an intermediate commit // we might call this PR bigger than we "should." genFiles := getGeneratedFiles(config, commits[len(commits)-1]) for _, c := range commits { for _, f := range c.Files { if strings.HasPrefix(*f.Filename, "Godeps/") { adds = adds - *f.Additions dels = dels - *f.Deletions continue } found := false for _, genFile := range genFiles { if *f.Filename == genFile { adds = adds - *f.Additions dels = dels - *f.Deletions found = true break } } if found { continue } } } newSize := calculateSize(adds, dels) newLabel := labelSizePrefix + newSize existing := github_util.GetLabelsWithPrefix(issue.Labels, labelSizePrefix) needsUpdate := true for _, l := range existing { if l == newLabel { needsUpdate = false continue } config.RemoveLabel(*pr.Number, l) } if needsUpdate { config.AddLabels(*pr.Number, []string{newLabel}) body := fmt.Sprintf("Labelling this PR as %s", newLabel) config.WriteComment(*pr.Number, body) } }