diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | gerrit/changeset.go | 20 | ||||
-rw-r--r-- | gerrit/client.go | 16 | ||||
-rw-r--r-- | main.go | 11 | ||||
-rw-r--r-- | submitqueue/runner.go | 12 |
5 files changed, 17 insertions, 44 deletions
diff --git a/README.md b/README.md index d021fd025ccb..9ffb81b8d26d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ await CI feedback on a rebased changeset, then one clicks submit, and effectively makes everybody else rebase again. `gerrit-queue` is meant to remove these races to master. -Developers can add a specific tag `submit_me` to all changesets in a series, +Developers can set the `Autosubmit` label to `+1` on all changesets in a series, and if all preconditions on are met ("submittable" in gerrit speech, this usually means passing CI and passing Code Review), `gerrit-queue` takes care of rebasing and submitting it to master diff --git a/gerrit/changeset.go b/gerrit/changeset.go index 0a0a607cd611..f71032a567cb 100644 --- a/gerrit/changeset.go +++ b/gerrit/changeset.go @@ -16,8 +16,8 @@ type Changeset struct { Number int Verified int CodeReviewed int + Autosubmit int Submittable bool - HashTags []string CommitID string ParentCommitIDs []string OwnerName string @@ -32,8 +32,8 @@ func MakeChangeset(changeInfo *goGerrit.ChangeInfo) *Changeset { Number: changeInfo.Number, Verified: labelInfoToInt(changeInfo.Labels["Verified"]), CodeReviewed: labelInfoToInt(changeInfo.Labels["Code-Review"]), + Autosubmit: labelInfoToInt(changeInfo.Labels["Autosubmit"]), Submittable: changeInfo.Submittable, - HashTags: changeInfo.Hashtags, CommitID: changeInfo.CurrentRevision, // yes, this IS the commit ID. ParentCommitIDs: getParentCommitIDs(changeInfo), OwnerName: changeInfo.Owner.Name, @@ -41,15 +41,13 @@ func MakeChangeset(changeInfo *goGerrit.ChangeInfo) *Changeset { } } -// HasTag returns true if a Changeset has the given tag. -func (c *Changeset) HasTag(tag string) bool { - hashTags := c.HashTags - for _, hashTag := range hashTags { - if hashTag == tag { - return true - } - } - return false +// IsAutosubmit returns true if the changeset is intended to be +// automatically submitted by gerrit-queue. +// +// This is determined by the Change Owner setting +1 on the +// "Autosubmit" label. +func (c *Changeset) IsAutosubmit() bool { + return c.Autosubmit == 1 } // IsVerified returns true if the changeset passed CI, diff --git a/gerrit/client.go b/gerrit/client.go index 415871d4761e..314f97281c7e 100644 --- a/gerrit/client.go +++ b/gerrit/client.go @@ -26,7 +26,6 @@ type IClient interface { GetChangesetURL(changeset *Changeset) string SubmitChangeset(changeset *Changeset) (*Changeset, error) RebaseChangeset(changeset *Changeset, ref string) (*Changeset, error) - RemoveTag(changeset *Changeset, tag string) (*Changeset, error) ChangesetIsRebasedOnHEAD(changeset *Changeset) bool SerieIsRebasedOnHEAD(serie *Serie) bool FilterSeries(filter func(s *Serie) bool) []*Serie @@ -161,21 +160,6 @@ func (c *Client) RebaseChangeset(changeset *Changeset, ref string) (*Changeset, return c.fetchChangeset(changeInfo.ChangeID) } -// RemoveTag removes the submit queue tag from a changeset and updates gerrit -// we never add, that's something users should do in the GUI. -func (c *Client) RemoveTag(changeset *Changeset, tag string) (*Changeset, error) { - hashTags := changeset.HashTags - newHashTags := []string{} - for _, hashTag := range hashTags { - if hashTag != tag { - newHashTags = append(newHashTags, hashTag) - } - } - // TODO: implement setting hashtags api in go-gerrit and use here - // https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#set-hashtags - return changeset, nil -} - // GetBaseURL returns the gerrit base URL func (c *Client) GetBaseURL() string { return c.baseURL diff --git a/main.go b/main.go index 9f3277e9a90e..d8577dad507e 100644 --- a/main.go +++ b/main.go @@ -21,7 +21,7 @@ import ( ) func main() { - var URL, username, password, projectName, branchName, submitQueueTag string + var URL, username, password, projectName, branchName string var fetchOnly bool var triggerInterval int @@ -64,13 +64,6 @@ func main() { Destination: &branchName, Value: "master", }, - cli.StringFlag{ - Name: "submit-queue-tag", - Usage: "the tag used to submit something to the submit queue", - EnvVar: "SUBMIT_QUEUE_TAG", - Destination: &submitQueueTag, - Value: "submit_me", - }, cli.IntFlag{ Name: "trigger-interval", Usage: "How often we should trigger ourselves (interval in seconds)", @@ -102,7 +95,7 @@ func main() { } log.Infof("Successfully connected to gerrit at %s", URL) - runner := submitqueue.NewRunner(l, gerrit, submitQueueTag) + runner := submitqueue.NewRunner(l, gerrit) handler := frontend.MakeFrontend(rotatingLogHandler, gerrit, runner) diff --git a/submitqueue/runner.go b/submitqueue/runner.go index 0d8bcce2e1f2..6e4a54a71bb9 100644 --- a/submitqueue/runner.go +++ b/submitqueue/runner.go @@ -20,26 +20,24 @@ type Runner struct { wipSerie *gerrit.Serie logger *log.Logger gerrit *gerrit.Client - submitQueueTag string // the tag used to submit something to the submit queue } // NewRunner creates a new Runner struct -func NewRunner(logger *log.Logger, gerrit *gerrit.Client, submitQueueTag string) *Runner { +func NewRunner(logger *log.Logger, gerrit *gerrit.Client) *Runner { return &Runner{ - logger: logger, - gerrit: gerrit, - submitQueueTag: submitQueueTag, + logger: logger, + gerrit: gerrit, } } // isAutoSubmittable determines if something could be autosubmitted, potentially requiring a rebase // for this, it needs to: -// * have the auto-submit label +// * have the "Autosubmit" label set to +1 // * have gerrit's 'submittable' field set to true // it doesn't check if the series is rebased on HEAD func (r *Runner) isAutoSubmittable(s *gerrit.Serie) bool { for _, c := range s.ChangeSets { - if c.Submittable != true || !c.HasTag(r.submitQueueTag) { + if c.Submittable != true || !c.IsAutosubmit() { return false } } |