Autosubmit published draft
Change-Id: Ie210e447b7d106d51e56ccedab873dcf2ce04591
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
index efe90c1..2bc9a2a 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -29,6 +29,7 @@
import com.google.gerrit.server.data.ChangeAttribute;
import com.google.gerrit.server.events.ChangeEvent;
import com.google.gerrit.server.events.CommentAddedEvent;
+import com.google.gerrit.server.events.DraftPublishedEvent;
import com.google.gerrit.server.events.Event;
import com.google.gerrit.server.events.PatchSetCreatedEvent;
import com.google.gerrit.server.events.RefUpdatedEvent;
@@ -89,6 +90,7 @@
@Override
synchronized public void onEvent(final Event event) {
if (event instanceof TopicChangedEvent ||
+ event instanceof DraftPublishedEvent ||
event instanceof PatchSetCreatedEvent) {
Change change = Change.from(((ChangeEvent)event).change.get());
onNewOrChangedPatchSet(change);
diff --git a/test.rb b/test.rb
index ddc29f5..d4451f9 100755
--- a/test.rb
+++ b/test.rb
@@ -164,6 +164,16 @@
check_status(commit2, 'MERGED')
end
+ def test_published_draft_is_autosubmitted
+ commit_id = create_review(PROJECT1, "review0 on #{PROJECT1}", draft: true)
+ approve_review(commit_id)
+ check_status(commit_id, 'DRAFT')
+
+ publish_draft(commit_id)
+
+ check_status(commit_id, 'MERGED')
+ end
+
private
def project_dir(project_name)
@@ -180,7 +190,11 @@
reviews = gerrit_query(query)
reviews.each do |review|
review_number = review['number']
- execute("#{GERRIT_SSH} gerrit review --abandon #{review_number},1")
+ if review['status'] == 'DRAFT'
+ execute("#{GERRIT_SSH} gerrit review --delete #{review_number},1")
+ else
+ execute("#{GERRIT_SSH} gerrit review --abandon #{review_number},1")
+ end
end
end
@@ -192,14 +206,14 @@
change_id
end
- def create_review(project_name, message, topic = nil, change_id = nil)
+ def create_review(project_name, message, topic = nil, change_id = nil, draft: false)
topic_suffix = "/#{topic}" if topic
message = "#{message}\n\nChange-Id: #{change_id}" if change_id
execute(["cd #{project_dir(project_name)}",
"echo 0 >> a",
"git add .",
%Q(git commit -m "#{message}"),
- "git push origin HEAD:refs/for/master#{topic_suffix}"
+ "git push origin HEAD:refs/#{draft ? 'drafts' : 'for'}/master#{topic_suffix}"
].join(" && "))
commit_id = execute("cd #{project_dir(project_name)} && git rev-parse HEAD")
refute(commit_id.empty?, "missing commit-id")
@@ -210,6 +224,10 @@
execute("#{GERRIT_SSH} gerrit review --verified 1 --code-review 2 #{commit_id}")
end
+ def publish_draft(commit_id)
+ execute("#{GERRIT_SSH} gerrit review --publish #{commit_id}")
+ end
+
def abandon_review(commit_id)
execute("#{GERRIT_SSH} gerrit review --abandon #{commit_id}")
end