[skcq] Detect and post a better comment when merge conflicts occur
Before: https://screenshot.googleplex.com/5xoSVhpot6prPLz
After: https://screenshot.googleplex.com/4z4godsh4WVyZSV
Bug: skia:12279
Change-Id: I7c1cda4475a59f00ad7147e578b75d1e929ac00b
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/433376
Reviewed-by: Eric Boren <borenet@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
diff --git a/autoroll/go/codereview/roll.go b/autoroll/go/codereview/roll.go
index 7919460..bd386bd 100644
--- a/autoroll/go/codereview/roll.go
+++ b/autoroll/go/codereview/roll.go
@@ -26,10 +26,6 @@
// GitHubPRDurationForChecks is the duration after a PR is created that
// checks should be looked at.
GitHubPRDurationForChecks = time.Minute * 15
-
- // ErrMergeConflict as a substring of an error message indicates that a
- // merge conflict occurred.
- ErrMergeConflict = "conflict during merge"
)
// RollImpl describes the behavior of an autoroll CL.
@@ -255,7 +251,7 @@
} else if rollCommit.Parents[0].Commit != head.Hash {
sklog.Infof("HEAD is %s and CL is based on %s; attempting rebase.", head.Hash, rollCommit.Parents[0].Commit)
if err := r.g.Rebase(ctx, r.ci, "", false); err != nil {
- if strings.Contains(err.Error(), ErrMergeConflict) {
+ if strings.Contains(err.Error(), gerrit.ErrMergeConflict) {
if err2 := r.g.Abandon(ctx, r.ci, "Failed to rebase due to merge conflict; closing CL."); err2 != nil {
return skerr.Wrapf(err, "failed to rebase due to merge conflict and failed to abandon CL with: %s", err2)
}
diff --git a/go/gerrit/gerrit.go b/go/gerrit/gerrit.go
index e589b20..361d004 100644
--- a/go/gerrit/gerrit.go
+++ b/go/gerrit/gerrit.go
@@ -166,6 +166,10 @@
// |
// +-> Last two digits of Issue ID.
ChangeRefPrefix = "refs/changes/"
+
+ // ErrMergeConflict as a substring of an error message indicates that a
+ // merge conflict occurred.
+ ErrMergeConflict = "conflict during merge"
)
var (
diff --git a/skcq/go/poller/poller.go b/skcq/go/poller/poller.go
index ecea5b0..cfd90f9 100644
--- a/skcq/go/poller/poller.go
+++ b/skcq/go/poller/poller.go
@@ -241,8 +241,13 @@
cr.RemoveFromCQ(ctx, ci, removeFromCQMsg)
} else {
if err := cr.Submit(ctx, ci); err != nil {
- sklog.Errorf("[%d] Error when submitting: %s", ci.Issue, err)
- cr.RemoveFromCQ(ctx, ci, "Error when submitting. Removing from SkCQ. Please ask Infra Gardener to investigate.")
+ if strings.Contains(err.Error(), gerrit.ErrMergeConflict) {
+ sklog.Infof("[%d] Gerrit rejected submission due to merge conflict: %s", ci.Issue, err.Error())
+ cr.RemoveFromCQ(ctx, ci, fmt.Sprintf("Gerrit rejected submission due to merge conflict.\n\nHint: Rebasing CL in Gerrit UI and re-submitting through SkCQ usually works."))
+ } else {
+ sklog.Errorf("[%d] Error when submitting: %s", ci.Issue, err)
+ cr.RemoveFromCQ(ctx, ci, "Error when submitting. Removing from SkCQ. Please ask Infra Gardener to investigate.")
+ }
} else {
cqSubmittedTime = time.Now().Unix()
tm.UpdateThrottler(repoBranch, time.Now(), skCQCfg.ThrottlerCfg)