Fix new depends-on format matching for prefixed gerrit ui
This patch aims to fix issue where such a depends-on won't match. Depends-On: https://sftests2.com/r/#/c/1/ Indeed here Gerrit is hosted behind a reverse proxy under /r. The regexp matching fail. Also the connection source lookup may fail if Gerrit web interface is not connection.server or connection.canonical_hostname so this path defines connection.baseurl as a new lookup condition. connection.baseurl is then used to build the regexp in order to set the path prefix of the Gerrit ui. Story: 2002080 Co-Authored-By: Nicolas Hicher <nhicher@redhat.com> Change-Id: Ie764bfc814b821636d447f82147a7d76e0511d2f
This commit is contained in:
parent
9dee755bb1
commit
b5496fa672
|
@ -178,7 +178,7 @@ class FakeGerritChange(object):
|
|||
'status': status,
|
||||
'subject': subject,
|
||||
'submitRecords': [],
|
||||
'url': 'https://%s/%s' % (self.gerrit.server, number)}
|
||||
'url': '%s/%s' % (self.gerrit.baseurl.rstrip('/'), number)}
|
||||
|
||||
self.upstream_root = upstream_root
|
||||
self.addPatchset(files=files, parent=parent)
|
||||
|
|
|
@ -686,3 +686,52 @@ class TestGerritCRD(ZuulTestCase):
|
|||
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(2))
|
||||
self.waitUntilSettled()
|
||||
self.assertEqual(B.reported, 2)
|
||||
|
||||
|
||||
class TestGerritCRDAltBaseUrl(ZuulTestCase):
|
||||
tenant_config_file = 'config/single-tenant/main.yaml'
|
||||
|
||||
def setup_config(self):
|
||||
super().setup_config()
|
||||
self.baseurl = 'https://review.example.com/prefixed_gerrit_ui/'
|
||||
self.config.set(
|
||||
'connection gerrit',
|
||||
'baseurl', self.baseurl)
|
||||
|
||||
def test_basic_crd_check(self):
|
||||
"Test basic cross-repo dependencies with an alternate gerrit baseurl"
|
||||
|
||||
self.executor_server.hold_jobs_in_build = True
|
||||
self.gearman_server.hold_jobs_in_queue = True
|
||||
A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
|
||||
B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
|
||||
|
||||
self.assertEqual(B.data['url'], '%s/2' % self.baseurl.rstrip('/'))
|
||||
# A Depends-On: B
|
||||
A.data['commitMessage'] = '%s\n\nDepends-On: %s\n' % (
|
||||
A.subject, B.data['url'])
|
||||
|
||||
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.gearman_server.hold_jobs_in_queue = False
|
||||
self.gearman_server.release()
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.executor_server.release('.*-merge')
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.assertTrue(self.builds[0].hasChanges(A, B))
|
||||
|
||||
self.executor_server.hold_jobs_in_build = False
|
||||
self.executor_server.release()
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.assertEqual(A.data['status'], 'NEW')
|
||||
self.assertEqual(B.data['status'], 'NEW')
|
||||
self.assertEqual(A.reported, 1)
|
||||
self.assertEqual(B.reported, 0)
|
||||
|
||||
self.assertEqual(self.history[0].changes, '2,1 1,1')
|
||||
tenant = self.sched.abide.tenants.get('tenant-one')
|
||||
self.assertEqual(len(tenant.layout.pipelines['check'].queues), 0)
|
||||
|
|
|
@ -16,6 +16,7 @@ import re
|
|||
import urllib
|
||||
import logging
|
||||
import voluptuous as vs
|
||||
from urllib.parse import urlparse
|
||||
from zuul.source import BaseSource
|
||||
from zuul.model import Project
|
||||
from zuul.driver.gerrit.gerritmodel import GerritRefFilter
|
||||
|
@ -31,6 +32,13 @@ class GerritSource(BaseSource):
|
|||
hostname = connection.canonical_hostname
|
||||
super(GerritSource, self).__init__(driver, connection,
|
||||
hostname, config)
|
||||
prefix_ui = urlparse(self.connection.baseurl).path
|
||||
if prefix_ui:
|
||||
prefix_ui = prefix_ui.lstrip('/').rstrip('/')
|
||||
prefix_ui += '/'
|
||||
|
||||
self.change_re = re.compile(
|
||||
r"/%s(\#\/c\/)?(\d+)[\w]*" % prefix_ui)
|
||||
|
||||
def getRefSha(self, project, ref):
|
||||
return self.connection.getRefSha(project, ref)
|
||||
|
@ -47,8 +55,6 @@ class GerritSource(BaseSource):
|
|||
def getChange(self, event, refresh=False):
|
||||
return self.connection.getChange(event, refresh)
|
||||
|
||||
change_re = re.compile(r"/(\#\/c\/)?(\d+)[\w]*")
|
||||
|
||||
def getChangeByURL(self, url):
|
||||
try:
|
||||
parsed = urllib.parse.urlparse(url)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
import logging
|
||||
import re
|
||||
from collections import OrderedDict
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import zuul.driver.zuul
|
||||
import zuul.driver.gerrit
|
||||
|
@ -171,6 +172,9 @@ class ConnectionRegistry(object):
|
|||
if hasattr(connection, 'server'):
|
||||
if connection.server == hostname:
|
||||
return self.getSource(connection.connection_name)
|
||||
if hasattr(connection, 'baseurl'):
|
||||
if urlparse(connection.baseurl).hostname == hostname:
|
||||
return self.getSource(connection.connection_name)
|
||||
return None
|
||||
|
||||
def getSourceByCanonicalHostname(self, canonical_hostname):
|
||||
|
|
Loading…
Reference in New Issue