Add option to ignore ref-updated events emitted by branch deletions
When a branch is deleted, gerrit emits a ref-updated event with a newrev
value of all zeros. This adds a boolean field to optionally not trigger
on these ref-updated events.
Change-Id: Iea75d05ddcb49b0bf748b72b9d2d5472d077f0c6
diff --git a/tests/fixtures/layout-dont-ignore-deletes.yaml b/tests/fixtures/layout-dont-ignore-deletes.yaml
new file mode 100644
index 0000000..1cf3c71
--- /dev/null
+++ b/tests/fixtures/layout-dont-ignore-deletes.yaml
@@ -0,0 +1,16 @@
+includes:
+ - python-file: custom_functions.py
+
+pipelines:
+ - name: post
+ manager: IndependentPipelineManager
+ trigger:
+ gerrit:
+ - event: ref-updated
+ ref: ^(?!refs/).*$
+ ignore-deletes: False
+
+projects:
+ - name: org/project
+ post:
+ - project-post
diff --git a/tests/fixtures/layouts/good_layout.yaml b/tests/fixtures/layouts/good_layout.yaml
index fc2effd..9ba1806 100644
--- a/tests/fixtures/layouts/good_layout.yaml
+++ b/tests/fixtures/layouts/good_layout.yaml
@@ -20,6 +20,7 @@
gerrit:
- event: ref-updated
ref: ^(?!refs/).*$
+ ignore-deletes: True
- name: gate
manager: DependentPipelineManager
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index 0779bfa..19acc9b 100755
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -891,6 +891,54 @@
self.assertEqual(len(self.history), 1)
self.assertIn('project-post', job_names)
+ def test_post_ignore_deletes(self):
+ "Test that deleting refs does not trigger post jobs"
+
+ e = {
+ "type": "ref-updated",
+ "submitter": {
+ "name": "User Name",
+ },
+ "refUpdate": {
+ "oldRev": "90f173846e3af9154517b88543ffbd1691f31366",
+ "newRev": "0000000000000000000000000000000000000000",
+ "refName": "master",
+ "project": "org/project",
+ }
+ }
+ self.fake_gerrit.addEvent(e)
+ self.waitUntilSettled()
+
+ job_names = [x.name for x in self.history]
+ self.assertEqual(len(self.history), 0)
+ self.assertNotIn('project-post', job_names)
+
+ def test_post_ignore_deletes_negative(self):
+ "Test that deleting refs does trigger post jobs"
+
+ self.config.set('zuul', 'layout_config',
+ 'tests/fixtures/layout-dont-ignore-deletes.yaml')
+ self.sched.reconfigure(self.config)
+
+ e = {
+ "type": "ref-updated",
+ "submitter": {
+ "name": "User Name",
+ },
+ "refUpdate": {
+ "oldRev": "90f173846e3af9154517b88543ffbd1691f31366",
+ "newRev": "0000000000000000000000000000000000000000",
+ "refName": "master",
+ "project": "org/project",
+ }
+ }
+ self.fake_gerrit.addEvent(e)
+ self.waitUntilSettled()
+
+ job_names = [x.name for x in self.history]
+ self.assertEqual(len(self.history), 1)
+ self.assertIn('project-post', job_names)
+
def test_build_configuration_branch(self):
"Test that the right commits are on alternate branches"