本文整理匯總了Golang中k8s/io/contrib/mungegithub/github.MungeObject類的典型用法代碼示例。如果您正苦於以下問題:Golang MungeObject類的具體用法?Golang MungeObject怎麽用?Golang MungeObject使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了MungeObject類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: 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
}
}
}
示例2: mergeTime
func mergeTime(obj *github.MungeObject) time.Time {
t := obj.MergedAt()
if t == nil {
t = &maxTime
}
return *t
}
示例3: Munge
// Munge is the workhorse the will actually make updates to the PR
func (h AssignUnassignHandler) Munge(obj *github.MungeObject) {
if !obj.IsPR() {
return
}
comments, err := obj.ListComments()
if err != nil {
glog.Errorf("unexpected error getting comments: %v", err)
return
}
fileList, err := obj.ListFiles()
if err != nil {
glog.Errorf("Could not list the files for PR %v: %v", obj.Issue.Number, err)
return
}
//get ALL (not just leaf) the people that could potentially own the file based on the blunderbuss.go implementation
potentialOwners, _ := getPotentialOwners(*obj.Issue.User.Login, h.features, fileList, false)
toAssign, toUnassign := h.getAssigneesAndUnassignees(obj, comments, fileList, potentialOwners)
for _, username := range toAssign.List() {
obj.AssignPR(username)
}
obj.UnassignPR(toUnassign.List()...)
}
示例4: addLGTMIfCommented
func (h *LGTMHandler) addLGTMIfCommented(obj *github.MungeObject, comments []*githubapi.IssueComment, reviewers mungerutil.UserSet) {
// Assumption: The comments should be sorted (by default from github api) from oldest to latest
for i := len(comments) - 1; i >= 0; i-- {
comment := comments[i]
if !mungerutil.IsValidUser(comment.User) {
continue
}
// TODO: An approver should be acceptable.
// See https://github.com/kubernetes/contrib/pull/1428#discussion_r72563935
if !mungerutil.IsMungeBot(comment.User) && !isReviewer(comment.User, reviewers) {
continue
}
fields := getFields(*comment.Body)
if isCancelComment(fields) {
// "/lgtm cancel" if commented more recently than "/lgtm"
return
}
if !isLGTMComment(fields) {
continue
}
// TODO: support more complex policies for multiple reviewers.
// See https://github.com/kubernetes/contrib/issues/1389#issuecomment-235161164
glog.Infof("Adding lgtm label. Reviewer (%s) LGTM", *comment.User.Login)
obj.AddLabel(lgtmLabel)
return
}
}
示例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 (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
}
}
}
}
示例7: removeLGTMIfCancelled
func (h *LGTMHandler) removeLGTMIfCancelled(obj *github.MungeObject, comments []*githubapi.IssueComment, reviewers mungerutil.UserSet) {
for i := len(comments) - 1; i >= 0; i-- {
comment := comments[i]
if !mungerutil.IsValidUser(comment.User) {
continue
}
if !mungerutil.IsMungeBot(comment.User) && !isReviewer(comment.User, reviewers) {
continue
}
fields := getFields(*comment.Body)
if isLGTMComment(fields) {
// "/lgtm" if commented more recently than "/lgtm cancel"
return
}
if !isCancelComment(fields) {
continue
}
glog.Infof("Removing lgtm label. Reviewer (%s) cancelled", *comment.User.Login)
obj.RemoveLabel(lgtmLabel)
return
}
}
示例8: findLatestWarningComment
// Find the last warning comment that the bot has posted.
// It can return an empty comment if it fails to find one, even if there are no errors.
func findLatestWarningComment(obj *github.MungeObject) (*githubapi.IssueComment, error) {
var lastFoundComment *githubapi.IssueComment
comments, err := obj.ListComments()
if err != nil {
return nil, err
}
for i := range comments {
comment := comments[i]
if !validComment(comment) {
continue
}
if !mergeBotComment(comment) {
continue
}
if !warningCommentRE.MatchString(*comment.Body) {
continue
}
if lastFoundComment == nil || lastFoundComment.CreatedAt.Before(*comment.UpdatedAt) {
if lastFoundComment != nil {
obj.DeleteComment(lastFoundComment)
}
lastFoundComment = comment
}
}
return lastFoundComment, nil
}
示例9: removeLGTMIfCancelled
func (h *LGTMHandler) removeLGTMIfCancelled(obj *github.MungeObject, comments []*githubapi.IssueComment, events []*githubapi.IssueEvent, reviewers mungerutil.UserSet) {
// Get time when the last (unlabeled, lgtm) event occurred.
addLGTMTime := e.LastEvent(events, e.And{e.AddLabel{}, e.LabelName(lgtmLabel), e.HumanActor()}, nil)
for i := len(comments) - 1; i >= 0; i-- {
comment := comments[i]
if !mungerutil.IsValidUser(comment.User) {
continue
}
if !mungerutil.IsMungeBot(comment.User) && !isReviewer(comment.User, reviewers) {
continue
}
fields := getFields(*comment.Body)
if isLGTMComment(fields) {
// "/lgtm" if commented more recently than "/lgtm cancel"
return
}
if !isCancelComment(fields) {
continue
}
// check if someone manually added the lgtm label after the `/lgtm cancel` comment
// and honor it.
if addLGTMTime != nil && addLGTMTime.After(*comment.CreatedAt) {
return
}
glog.Infof("Removing lgtm label. Reviewer (%s) cancelled", *comment.User.Login)
obj.RemoveLabel(lgtmLabel)
return
}
}
示例10: 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. Do nothing
}
}
示例11: Process
// Process does the necessary processing to compute whether to stay in
// this state, or proceed to the next.
func (c *ChangesNeeded) Process(obj *github.MungeObject) (State, error) {
if !obj.HasLabel(labelChangesNeeded) {
obj.AddLabel(labelChangesNeeded)
glog.Infof("PR #%v needs changes from author", *obj.Issue.Number)
}
return &End{}, nil
}
示例12: findLastHumanPullRequestUpdate
func findLastHumanPullRequestUpdate(obj *github.MungeObject) (*time.Time, error) {
pr, err := obj.GetPR()
if err != nil {
return nil, err
}
comments, err := obj.ListReviewComments()
if err != nil {
return nil, err
}
lastHuman := pr.CreatedAt
for i := range comments {
comment := comments[i]
if comment.User == nil || comment.User.Login == nil || comment.CreatedAt == nil || comment.Body == nil {
continue
}
if *comment.User.Login == botName || *comment.User.Login == jenkinsBotName {
continue
}
if lastHuman.Before(*comment.UpdatedAt) {
lastHuman = comment.UpdatedAt
}
}
return lastHuman, nil
}
示例13: 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
}
示例14: SetMergeStatus
// SetMergeStatus will set the status given a particular PR. This function should
// be used instead of manipulating the prStatus directly as sq.Lock() must be
// called when manipulating that structure
// `obj` is the active github object
// `reason` is the new 'status' for this object
func (sq *SubmitQueue) SetMergeStatus(obj *github.MungeObject, reason string) {
glog.V(4).Infof("SubmitQueue not merging %d because %q", *obj.Issue.Number, reason)
submitStatus := submitStatus{
Time: sq.clock.Now(),
statusPullRequest: *objToStatusPullRequest(obj),
Reason: reason,
}
status := obj.GetStatus(sqContext)
if status == nil || *status.Description != reason {
state := reasonToState(reason)
url := fmt.Sprintf("http://submit-queue.k8s.io/#/prs/?prDisplay=%d&historyDisplay=%d", *obj.Issue.Number, *obj.Issue.Number)
_ = obj.SetStatus(state, url, reason, sqContext)
}
sq.Lock()
defer sq.Unlock()
// If we are currently retesting E2E the normal munge loop might find
// that the ci tests are not green. That's normal and expected and we
// should just ignore that status update entirely.
if sq.githubE2ERunning != nil && *sq.githubE2ERunning.Issue.Number == *obj.Issue.Number && reason == ciFailure {
return
}
if sq.onQueue(obj) {
sq.statusHistory = append(sq.statusHistory, submitStatus)
if len(sq.statusHistory) > 128 {
sq.statusHistory = sq.statusHistory[1:]
}
}
sq.prStatus[strconv.Itoa(*obj.Issue.Number)] = submitStatus
sq.cleanupOldE2E(obj, reason)
}
示例15: getGeneratedFiles
// getGeneratedFiles returns a list of all automatically generated files in the repo. These include
// docs, deep_copy, and conversions
//
// 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 and if someone changed what files are generated
// we'll size slightly wrong. No biggie.
func (s *SizeMunger) getGeneratedFiles(obj *github.MungeObject) {
if s.genFiles != nil {
return
}
files := sets.NewString()
prefixes := []string{}
s.genFiles = &files
s.genPrefixes = &prefixes
file := s.generatedFilesFile
if len(file) == 0 {
glog.Infof("No --generated-files-config= supplied, applying no labels")
return
}
fp, err := os.Open(file)
if err != nil {
glog.Errorf("Unable to open %q: %v", file, err)
return
}
defer fp.Close()
scanner := bufio.NewScanner(fp)
for scanner.Scan() {
line := scanner.Text()
if strings.HasPrefix(line, "#") || line == "" {
continue
}
fields := strings.Fields(line)
if len(fields) != 2 {
glog.Errorf("Invalid line in generated docs config %s: %q", file, line)
continue
}
eType := fields[0]
file := fields[1]
if eType == "prefix" {
prefixes = append(prefixes, file)
} else if eType == "path" {
files.Insert(file)
} else if eType == "paths-from-repo" {
docs, err := obj.GetFileContents(file, "")
if err != nil {
continue
}
docSlice := strings.Split(docs, "\n")
files.Insert(docSlice...)
} else {
glog.Errorf("Invalid line in generated docs config, unknown type: %s, %q", eType, line)
continue
}
}
if scanner.Err() != nil {
glog.Errorf("Error scanning %s: %v", file, err)
return
}
s.genFiles = &files
s.genPrefixes = &prefixes
return
}