Index: recipe_modules/properties/test_api.py |
diff --git a/recipe_modules/properties/test_api.py b/recipe_modules/properties/test_api.py |
index cd5ac312909fc35409c300f3939ea267d0df5e3f..9eaa652e717fd30e9d6bdef8ec8ed9970baa3daf 100644 |
--- a/recipe_modules/properties/test_api.py |
+++ b/recipe_modules/properties/test_api.py |
@@ -2,6 +2,9 @@ |
# Use of this source code is governed under the Apache License, Version 2.0 |
# that can be found in the LICENSE file. |
+import re |
+import urlparse |
+ |
from recipe_engine import recipe_test_api |
class PropertiesTestApi(recipe_test_api.RecipeTestApi): |
@@ -54,11 +57,63 @@ class PropertiesTestApi(recipe_test_api.RecipeTestApi): |
ret.properties.update(kwargs) |
return ret |
+ def _gerrit_tryserver(self, **kwargs): |
+ # Call it through self.tryserver with (gerrit_project='infra/infra'). |
+ project = kwargs.pop('gerrit_project') |
+ gerrit_url = kwargs.pop('gerrit_url', None) |
+ git_url = kwargs.pop('git_url', None) |
+ if not gerrit_url and not git_url: |
+ gerrit_url = 'https://chromium-review.googlesource.com' |
+ git_url = 'https://chromium.googlesource.com/' + project |
+ elif gerrit_url and not git_url: |
+ parsed = list(urlparse.urlparse(gerrit_url)) |
+ m = re.match(r'^((\w+)(-\w+)*)-review.googlesource.com$', parsed[1]) |
+ if not m: # pragma: no cover |
+ raise AssertionError('Can\'t guess git_url from gerrit_url "%s", ' |
+ 'specify it as extra kwarg' % parsed[1]) |
+ parsed[1] = m.group(1) + '.googlesource.com' |
+ parsed[2] = project |
+ git_url = urlparse.urlunparse(parsed) |
+ elif git_url and not gerrit_url: |
+ parsed = list(urlparse.urlparse(git_url)) |
+ m = re.match(r'^((\w+)(-\w+)*).googlesource.com$', parsed[1]) |
+ if not m: # pragma: no cover |
+ raise AssertionError('Can\'t guess gerrit_url from git_url "%s", ' |
+ 'specify it as extra kwarg' % parsed[1]) |
+ parsed[1] = m.group(1) + '-review.googlesource.com' |
+ gerrit_url = urlparse.urlunparse(parsed[:2] + [''] * len(parsed[2:])) |
+ assert project |
+ assert git_url |
+ assert gerrit_url |
+ # Pop old style values from kwargs. |
+ patch_issue = int(kwargs.pop('issue', 456789)) |
+ patch_set = int(kwargs.pop('patchset', 12)) |
+ # Note that new Gerrit patch properties all start with 'patch_' prefix. |
+ ret = self.generic( |
+ patch_storage='gerrit', |
+ patch_gerrit_url=gerrit_url, |
+ patch_project=project, |
+ patch_branch='master', |
+ patch_issue=patch_issue, |
+ patch_set=patch_set, |
+ patch_repository_url=git_url, |
+ patch_ref='refs/changes/%2d/%d/%d' % ( |
+ patch_issue % 100, patch_issue, patch_set) |
+ ) |
+ ret.properties.update(kwargs) |
+ return ret |
+ |
def tryserver(self, **kwargs): |
""" |
Merge kwargs into a typical buildbot properties blob for a job fired off |
by a rietveld tryjob on the tryserver, and return the blob. |
+ |
+ If gerrit_project is given, generated properties for tryjobs for Gerrit |
+ patches as if they were scheduled by CQ. In this case, gerrit_url and |
+ git_url could be used to customize expectations. |
""" |
+ if kwargs.get('gerrit_project') is not None: |
+ return self._gerrit_tryserver(**kwargs) |
ret = self.generic( |
branch='', |
issue=12853011, |
@@ -75,6 +130,8 @@ class PropertiesTestApi(recipe_test_api.RecipeTestApi): |
def tryserver_gerrit(self, full_project_name, gerrit_host=None, **kwargs): |
""" |
+ DEPRECATED. Use tryserver(gerrit_project='infra/infra') instead. |
+ |
Merge kwargs into a typical buildbot properties blob for a job fired off |
by a gerrit tryjob on the tryserver, and return the blob. |
@@ -83,6 +140,7 @@ class PropertiesTestApi(recipe_test_api.RecipeTestApi): |
gerrit_host: hostname of the gerrit server. |
Example: chromium-review.googlesource.com. |
""" |
+ # TODO(tandrii): remove this method. |
gerrit_host = gerrit_host or 'chromium-review.googlesource.com' |
parts = gerrit_host.split('.') |
assert parts[0].endswith('-review') |