| Index: recipe_modules/rietveld/api.py
|
| diff --git a/recipe_modules/rietveld/api.py b/recipe_modules/rietveld/api.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aa7374fc3f7735ac410bcd1b42f0c794b05091a2
|
| --- /dev/null
|
| +++ b/recipe_modules/rietveld/api.py
|
| @@ -0,0 +1,89 @@
|
| +# Copyright 2013 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import urlparse
|
| +
|
| +from recipe_engine import recipe_api
|
| +
|
| +
|
| +class RietveldApi(recipe_api.RecipeApi):
|
| + def calculate_issue_root(self, extra_patch_project_roots=None):
|
| + """Returns path where a patch should be applied to based on "patch_project".
|
| +
|
| + Maps Rietveld's "patch_project" to a path of directories relative to
|
| + api.gclient.c.solutions[0].name which describe where to place the patch.
|
| +
|
| + Args:
|
| + extra_patch_project_roots: Dict mapping project names to relative roots.
|
| +
|
| + Returns:
|
| + Relative path or empty string if patch_project is not set or path for a
|
| + given is unknown.
|
| + """
|
| + # Property 'patch_project' is set by Rietveld, 'project' is set by git-try
|
| + # when TRYSERVER_PROJECT is present in codereview.settings.
|
| + patch_project = (self.m.properties.get('patch_project') or
|
| + self.m.properties.get('project'))
|
| +
|
| + # Please avoid adding projects into this hard-coded list unless your project
|
| + # CLs are being run by multiple recipes. Instead pass patch_project_roots to
|
| + # ensure_checkout.
|
| + patch_project_roots = {
|
| + 'angle/angle': ['third_party', 'angle'],
|
| + 'blink': ['third_party', 'WebKit'],
|
| + 'v8': ['v8'],
|
| + 'luci-py': ['luci'],
|
| + 'recipes-py': ['recipes-py'],
|
| + }
|
| +
|
| + # Make sure to update common projects (above) with extra projects (and not
|
| + # vice versa, so that recipes can override default values if needed.
|
| + if extra_patch_project_roots:
|
| + patch_project_roots.update(extra_patch_project_roots)
|
| +
|
| + path_parts = patch_project_roots.get(patch_project)
|
| + return self.m.path.join(*path_parts) if path_parts else ''
|
| +
|
| + def apply_issue(self, *root_pieces, **kwargs):
|
| + """Call apply_issue from depot_tools.
|
| +
|
| + Args:
|
| + root_pieces (strings): location where to run apply_issue, relative to the
|
| + checkout root.
|
| + authentication (string or None): authentication scheme to use. Can be None
|
| + or 'oauth2'. See also apply_issue.py --help (-E and --no-auth options.)
|
| + """
|
| + # TODO(pgervais): replace *root_pieces by a single Path object.
|
| + authentication = kwargs.get('authentication', None)
|
| + rietveld_url = self.m.properties['rietveld']
|
| + issue_number = self.m.properties['issue']
|
| +
|
| + if authentication == 'oauth2':
|
| + step_result = self.m.python(
|
| + 'apply_issue',
|
| + self.m.path['depot_tools'].join('apply_issue.py'), [
|
| + '-r', self.m.path['checkout'].join(*root_pieces),
|
| + '-i', issue_number,
|
| + '-p', self.m.properties['patchset'],
|
| + '-s', rietveld_url,
|
| + '-E', self.m.path['build'].join('site_config',
|
| + '.rietveld_client_email'),
|
| + '-k', self.m.path['build'].join('site_config',
|
| + '.rietveld_secret_key')
|
| + ],
|
| + )
|
| +
|
| + else:
|
| + step_result = self.m.python(
|
| + 'apply_issue',
|
| + self.m.path['depot_tools'].join('apply_issue.py'), [
|
| + '-r', self.m.path['checkout'].join(*root_pieces),
|
| + '-i', issue_number,
|
| + '-p', self.m.properties['patchset'],
|
| + '-s', rietveld_url,
|
| + '--no-auth'],
|
| + )
|
| + step_result.presentation.links['Applied issue %s' % issue_number] = (
|
| + urlparse.urljoin(rietveld_url, str(issue_number)))
|
| +
|
|
|