about summary refs log tree commit diff
path: root/third_party/gerrit-queue/0001-gerrit-Use-a-Gerrit-label-instead-of-hashtag-for-aut.patch
blob: 21fe09ff68aa27075c8aede4294ef125b2cd805d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
From 24f5a642af3aa1627bbff977f0a101907a02c69f Mon Sep 17 00:00:00 2001
From: Vincent Ambo <mail@tazj.in>
Date: Thu, 9 Dec 2021 13:49:16 +0300
Subject: [PATCH] gerrit: Use a Gerrit label instead of hashtag for autosubmit

This moves to using a Gerrit label ('Autosubmit') with boolean values
for determining whether a developer wants to have a change
automatically submitted.

See also https://cl.tvl.fyi/c/depot/+/4172
---
 README.md             |  2 +-
 gerrit/changeset.go   | 20 +++++++++-----------
 gerrit/client.go      | 16 ----------------
 main.go               | 11 ++---------
 submitqueue/runner.go | 12 +++++-------
 5 files changed, 17 insertions(+), 44 deletions(-)

diff --git a/README.md b/README.md
index d021fd0..9ffb81b 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 0a0a607..f71032a 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 415871d..314f972 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 9f3277e..d8577da 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 0d8bcce..6e4a54a 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
 		}
 	}
-- 
2.33.1