Index: git_cl.py |
diff --git a/git_cl.py b/git_cl.py |
index caa9b604b2d54800f8b4d0a0ebc5851d91b930bf..9fcc3b75269b676f0455d4be5ae672a97a682334 100755 |
--- a/git_cl.py |
+++ b/git_cl.py |
@@ -214,6 +214,16 @@ def add_git_similarity(parser): |
parser.parse_args = Parse |
+def _get_properties_from_options(options): |
+ properties = dict(x.split('=', 1) for x in options.properties) |
+ for key, val in properties.iteritems(): |
+ try: |
+ properties[key] = json.loads(val) |
+ except ValueError: |
+ pass # If a value couldn't be evaluated, treat it as a string. |
+ return properties |
+ |
+ |
def _prefix_master(master): |
"""Convert user-specified master name to full master name. |
@@ -228,8 +238,7 @@ def _prefix_master(master): |
return '%s%s' % (prefix, master) |
-def trigger_try_jobs(auth_config, changelist, options, masters, category, |
- override_properties=None): |
+def trigger_try_jobs(auth_config, changelist, options, masters, category): |
rietveld_url = settings.GetDefaultServerUrl() |
rietveld_host = urlparse.urlparse(rietveld_url).hostname |
authenticator = auth.get_authenticator_for_host(rietveld_host, auth_config) |
@@ -238,6 +247,7 @@ def trigger_try_jobs(auth_config, changelist, options, masters, category, |
issue_props = changelist.GetIssueProperties() |
issue = changelist.GetIssue() |
patchset = changelist.GetMostRecentPatchset() |
+ properties = _get_properties_from_options(options) |
buildbucket_put_url = ( |
'https://{hostname}/_ah/api/buildbucket/v1/builds/batch'.format( |
@@ -273,8 +283,8 @@ def trigger_try_jobs(auth_config, changelist, options, masters, category, |
'testfilter': tests, |
}, |
} |
- if override_properties: |
- parameters['properties'].update(override_properties) |
+ if properties: |
+ parameters['properties'].update(properties) |
if options.clobber: |
parameters['properties']['clobber'] = True |
batch_req_body['builds'].append( |
@@ -3073,6 +3083,11 @@ def CMDtry(parser, args): |
help="Override which project to use. Projects are defined " |
"server-side to define what default bot set to use") |
group.add_option( |
+ "-p", "--property", dest="properties", action="append", default=[], |
+ help="Specify generic properties in the form -p key1=value1 -p " |
+ "key2=value2 etc (buildbucket only). The value will be treated as " |
+ "json if decodable, or as string otherwise.") |
+ group.add_option( |
"-n", "--name", help="Try job name; default to current branch name") |
group.add_option( |
"--use-rietveld", action="store_true", default=False, |
@@ -3085,6 +3100,14 @@ def CMDtry(parser, args): |
options, args = parser.parse_args(args) |
auth_config = auth.extract_auth_config_from_options(options) |
+ if options.use_rietveld and options.properties: |
+ parser.error('Properties can only be specified with buildbucket') |
+ |
+ # Make sure that all properties are prop=value pairs. |
+ bad_params = [x for x in options.properties if '=' not in x] |
+ if bad_params: |
+ parser.error('Got properties with missing "=": %s' % bad_params) |
+ |
if args: |
parser.error('Unknown arguments: %s' % args) |