本文整理匯總了Golang中k8s/io/contrib/mungegithub/github.MungeObject.IsPR方法的典型用法代碼示例。如果您正苦於以下問題:Golang MungeObject.IsPR方法的具體用法?Golang MungeObject.IsPR怎麽用?Golang MungeObject.IsPR使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類k8s/io/contrib/mungegithub/github.MungeObject
的用法示例。
在下文中一共展示了MungeObject.IsPR方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Munge
// Munge is the workhorse the will actually make updates to the PR
func (r *RebuildMunger) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
comments, err := obj.ListComments()
if err != nil {
glog.Errorf("unexpected error getting comments: %v", err)
}
for ix := range comments {
comment := comments[ix]
// Skip all robot comments
if r.robots.Has(*comment.User.Login) {
glog.V(4).Infof("Skipping comment by robot %s: %s", *comment.User.Login, *comment.Body)
continue
}
if isRebuildComment(comment) && rebuildCommentMissingIssueNumber(comment) {
if err := obj.DeleteComment(comment); err != nil {
glog.Errorf("Error deleting comment: %v", err)
continue
}
body := fmt.Sprintf(rebuildFormat, *comment.User.Login)
err := obj.WriteComment(body)
if err != nil {
glog.Errorf("unexpected error adding comment: %v", err)
continue
}
}
}
}
示例2: Munge
// Munge is the workhorse the will actually make updates to the PR
func (CommentDeleter) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
comments, err := obj.ListComments()
if err != nil {
return
}
for i := range comments {
comment := &comments[i]
if comment.User == nil || comment.User.Login == nil {
continue
}
if *comment.User.Login != botName {
continue
}
if comment.Body == nil {
continue
}
for _, f := range funcs {
if f(obj, comment) {
obj.DeleteComment(comment)
break
}
}
}
}
示例3: Munge
// Munge is the workhorse that will actually close the PRs
func (CloseStalePR) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
if obj.HasLabel(keepOpenLabel) {
return
}
lastModif, err := findLastModificationTime(obj)
if err != nil {
glog.Errorf("Failed to find last modification: %v", err)
return
}
closeIn := -time.Since(lastModif.Add(stalePullRequest))
inactiveFor := time.Since(*lastModif)
if closeIn <= 0 {
closePullRequest(obj, inactiveFor)
} else if closeIn <= startWarning {
checkAndWarn(obj, inactiveFor, closeIn)
} else {
// Pull-request is active. Remove previous potential warning
// Ignore potential errors, we just want to remove old comments ...
comment, _ := findLatestWarningComment(obj)
if comment != nil {
obj.DeleteComment(comment)
}
}
}
示例4: MungeIssue
// MungeIssue is the real worker. It is called for every open github Issue
// But note that all PRs are Issues. (Not all Issues are PRs.) This particular
// function ignores all issues that are not PRs and prints the number for the
// PRs.
func MungeIssue(obj *github.MungeObject) error {
if !obj.IsPR() {
return nil
}
glog.Infof("PR: %d", *obj.Issue.Number)
return nil
}
示例5: Munge
// Munge is the workhorse the will actually make updates to the PR
func (c *CherrypickQueue) Munge(obj *github.MungeObject) {
if !obj.HasLabel(cpCandidateLabel) {
return
}
if !obj.IsPR() {
return
}
// This will cache the PR and events so when we try to view the queue we don't
// hit github while trying to load the page
obj.GetPR()
num := *obj.Issue.Number
c.Lock()
merged, _ := obj.IsMerged()
if merged {
if obj.HasLabel(cpApprovedLabel) {
c.mergedAndApproved[num] = obj
} else {
c.merged[num] = obj
}
} else {
c.unmerged[num] = obj
}
c.Unlock()
return
}
示例6: Munge
// Munge is the workhorse the will actually make updates to the PR
func (p *PathLabelMunger) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
commits, err := obj.GetCommits()
if err != nil {
return
}
needsLabels := sets.NewString()
for _, c := range commits {
for _, f := range c.Files {
for _, lm := range p.labelMap {
if lm.regexp.MatchString(*f.Filename) {
if !obj.HasLabel(lm.label) {
needsLabels.Insert(lm.label)
}
}
}
}
}
if needsLabels.Len() != 0 {
obj.AddLabels(needsLabels.List())
}
}
示例7: Munge
// Munge is the workhorse the will actually make updates to the PR
func (b *BlockPath) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
if obj.HasLabel(doNotMergeLabel) {
return
}
commits, err := obj.GetCommits()
if err != nil {
return
}
for _, c := range commits {
for _, f := range c.Files {
if matchesAny(*f.Filename, b.blockRegexp) {
if matchesAny(*f.Filename, b.doNotBlockRegexp) {
continue
}
body := fmt.Sprintf(`Adding label:%s because PR changes docs prohibited to auto merge
See http://kubernetes.io/editdocs/ for information about editing docs`, doNotMergeLabel)
obj.WriteComment(body)
obj.AddLabels([]string{doNotMergeLabel})
return
}
}
}
}
示例8: Munge
// Munge is the workhorse the will actually make updates to the PR
// The algorithm goes as:
// - Initially, we build an approverSet
// - Go through all comments after latest commit.
// - If anyone said "/approve", add them to approverSet.
// - Then, for each file, we see if any approver of this file is in approverSet and keep track of files without approval
// - An approver of a file is defined as:
// - Someone listed as an "approver" in an OWNERS file in the files directory OR
// - in one of the file's parent directorie
// - Iff all files have been approved, the bot will add the "approved" label.
// - Iff a cancel command is found, that reviewer will be removed from the approverSet
// and the munger will remove the approved label if it has been applied
func (h *ApprovalHandler) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
files, err := obj.ListFiles()
if err != nil {
glog.Errorf("failed to list files in this PR: %v", err)
return
}
comments, err := getCommentsAfterLastModified(obj)
if err != nil {
glog.Errorf("failed to get comments in this PR: %v", err)
return
}
ownersMap := h.getApprovedOwners(files, createApproverSet(comments))
if err := h.updateNotification(obj, ownersMap); err != nil {
return
}
for _, approverSet := range ownersMap {
if approverSet.Len() == 0 {
if obj.HasLabel(approvedLabel) {
obj.RemoveLabel(approvedLabel)
}
return
}
}
if !obj.HasLabel(approvedLabel) {
obj.AddLabel(approvedLabel)
}
}
示例9: Munge
// Munge is the workhorse the will actually make updates to the PR
func (h LGTMHandler) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
reviewers := getReviewers(obj)
if len(reviewers) == 0 {
return
}
comments, err := getCommentsAfterLastModified(obj)
if err != nil {
glog.Errorf("unexpected error getting comments: %v", err)
return
}
events, err := obj.GetEvents()
if err != nil {
glog.Errorf("unexpected error getting events: %v", err)
return
}
if !obj.HasLabel(lgtmLabel) {
h.addLGTMIfCommented(obj, comments, events, reviewers)
return
}
h.removeLGTMIfCancelled(obj, comments, events, reviewers)
}
示例10: Munge
// Munge is the workhorse the will actually make updates to the PR
func (NagFlakeIssues) Munge(obj *mgh.MungeObject) {
if obj.IsPR() || !obj.HasLabel("kind/flake") {
return
}
comments, err := obj.ListComments()
if err != nil {
glog.Error(err)
return
}
// Use the pinger to notify assignees:
// - Set time period based on configuration (at the top of this file)
// - Mention list of assignees as an argument
// - Start the ping timer after the last HumanActor comment
// How often should we ping
period := findTimePeriod(obj.Issue.Labels)
// Who are we pinging
who := mungerutil.GetIssueUsers(obj.Issue).Assignees.Mention().Join()
// When does the pinger start
startDate := c.LastComment(comments, c.HumanActor(), obj.Issue.CreatedAt)
// Get a notification if it's time to ping.
notif := pinger.SetTimePeriod(period).PingNotification(
comments,
who,
startDate,
)
if notif != nil {
obj.WriteComment(notif.String())
}
}
示例11: Munge
// Munge is the workhorse the will actually make updates to the PR
func (LGTMAfterCommitMunger) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
if !obj.HasLabel("lgtm") {
return
}
lastModified := obj.LastModifiedTime()
lgtmTime := obj.LabelTime("lgtm")
if lastModified == nil || lgtmTime == nil {
glog.Errorf("PR %d unable to determine lastModified or lgtmTime", *obj.Issue.Number)
return
}
if lastModified.After(*lgtmTime) {
glog.Infof("PR: %d lgtm:%s lastModified:%s", *obj.Issue.Number, lgtmTime.String(), lastModified.String())
lgtmRemovedBody := "PR changed after LGTM, removing LGTM."
if err := obj.WriteComment(lgtmRemovedBody); err != nil {
return
}
obj.RemoveLabel("lgtm")
}
}
示例12: Munge
// Munge is the workhorse the will actually make updates to the PR
func (a *AssignFixesMunger) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
// we need the PR for the "User" (creator of the PR not the assignee)
pr, err := obj.GetPR()
if err != nil {
glog.Infof("Couldn't get PR %v", obj.Issue.Number)
return
}
prOwner := github.DescribeUser(pr.User)
issuesFixed := obj.GetPRFixesList()
if issuesFixed == nil {
return
}
for _, fixesNum := range issuesFixed {
// "issue" is the issue referenced by the "fixes #<num>"
issueObj, err := a.config.GetObject(fixesNum)
if err != nil {
glog.Infof("Couldn't get issue %v", fixesNum)
continue
}
issue := issueObj.Issue
if !a.AssignfixesReassign && issue.Assignee != nil {
glog.V(6).Infof("skipping %v: reassign: %v assignee: %v", *issue.Number, a.AssignfixesReassign, github.DescribeUser(issue.Assignee))
continue
}
glog.Infof("Assigning %v to %v (previously assigned to %v)", *issue.Number, prOwner, github.DescribeUser(issue.Assignee))
// although it says "AssignPR" it's more generic than that and is really just an issue.
issueObj.AssignPR(prOwner)
}
}
示例13: Munge
// Munge is the workhorse the will actually make updates to the PR
func (LGTMAfterCommitMunger) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
if !obj.HasLabel(lgtmLabel) {
return
}
lastModified := obj.LastModifiedTime()
lgtmTime := obj.LabelTime(lgtmLabel)
if lastModified == nil || lgtmTime == nil {
glog.Errorf("PR %d unable to determine lastModified or lgtmTime", *obj.Issue.Number)
return
}
if lastModified.After(*lgtmTime) {
glog.Infof("PR: %d lgtm:%s lastModified:%s", *obj.Issue.Number, lgtmTime.String(), lastModified.String())
body := fmt.Sprintf(lgtmRemovedBody, mungerutil.GetIssueUsers(obj.Issue).AllUsers().Mention().Join())
if err := obj.WriteComment(body); err != nil {
return
}
obj.RemoveLabel(lgtmLabel)
}
}
示例14: Munge
// Munge is the workhorse the will actually make updates to the PR
func (b *BlockPath) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
if obj.HasLabel(doNotMergeLabel) {
return
}
files, err := obj.ListFiles()
if err != nil {
return
}
for _, f := range files {
if matchesAny(*f.Filename, b.blockRegexp) {
if matchesAny(*f.Filename, b.doNotBlockRegexp) {
continue
}
obj.WriteComment(blockPathBody)
obj.AddLabels([]string{doNotMergeLabel})
return
}
}
}
示例15: Munge
// Munge is the workhorse the will actually make updates to the PR
func (PingCIMunger) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
if !obj.HasLabel("lgtm") {
return
}
mergeable, err := obj.IsMergeable()
if err != nil {
glog.V(2).Infof("Skipping %d - problem determining mergeability", *obj.Issue.Number)
return
}
if !mergeable {
glog.V(2).Infof("Skipping %d - not mergeable", *obj.Issue.Number)
return
}
if state := obj.GetStatusState([]string{jenkinsCIContext, travisContext}); state != "incomplete" {
glog.V(2).Info("Have %s status - skipping ping CI", jenkinsCIContext)
return
}
state := obj.GetStatusState([]string{shippableContext, travisContext})
if state == "incomplete" {
msg := "Continuous integration appears to have missed, closing and re-opening to trigger it"
obj.WriteComment(msg)
obj.ClosePR()
time.Sleep(5 * time.Second)
obj.OpenPR(10)
}
}