Revert "Drop py2 support in recipe modules"

This reverts commit 5819c303f0.

Reason for revert: breaking dart builds

Original change's description:
> Drop py2 support in recipe modules
>
> python3 is the only supported version of python in depot_tools.
>
> Bug: 1475402
> Change-Id: I479de09a0c34b438aced35e4ced58a5972108132
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4808518
> Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
> Commit-Queue: Gavin Mak <gavinmak@google.com>

Bug: 1475402
Change-Id: I0fef7581835bb25ea7e4f22303eef11e72df9536
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4811596
Commit-Queue: Gavin Mak <gavinmak@google.com>
Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
changes/96/4811596/2
Gavin Mak 2 years ago committed by LUCI CQ
parent b5c7f4b46c
commit a5f17dd7b3

@ -164,30 +164,30 @@ Returns (Path): The "depot_tools" root directory.
[DEPS](/recipes/recipe_modules/gclient/__init__.py#1): [git](#recipe_modules-git), [gitiles](#recipe_modules-gitiles), [tryserver](#recipe_modules-tryserver), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step] [DEPS](/recipes/recipe_modules/gclient/__init__.py#1): [git](#recipe_modules-git), [gitiles](#recipe_modules-gitiles), [tryserver](#recipe_modules-tryserver), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step]
#### **class [GclientApi](/recipes/recipe_modules/gclient/api.py#71)([RecipeApi][recipe_engine/wkt/RecipeApi]):** #### **class [GclientApi](/recipes/recipe_modules/gclient/api.py#77)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
&emsp; **@property**<br>&mdash; **def [DepsDiffException](/recipes/recipe_modules/gclient/api.py#418)(self):** &emsp; **@property**<br>&mdash; **def [DepsDiffException](/recipes/recipe_modules/gclient/api.py#424)(self):**
&mdash; **def [\_\_call\_\_](/recipes/recipe_modules/gclient/api.py#81)(self, name, cmd, infra_step=True, \*\*kwargs):** &mdash; **def [\_\_call\_\_](/recipes/recipe_modules/gclient/api.py#87)(self, name, cmd, infra_step=True, \*\*kwargs):**
Wrapper for easy calling of gclient steps. Wrapper for easy calling of gclient steps.
&mdash; **def [break\_locks](/recipes/recipe_modules/gclient/api.py#285)(self):** &mdash; **def [break\_locks](/recipes/recipe_modules/gclient/api.py#291)(self):**
Remove all index.lock files. If a previous run of git crashed, bot was Remove all index.lock files. If a previous run of git crashed, bot was
reset, etc... we might end up with leftover index.lock files. reset, etc... we might end up with leftover index.lock files.
&mdash; **def [checkout](/recipes/recipe_modules/gclient/api.py#245)(self, gclient_config=None, revert=RevertOnTryserver, inject_parent_got_revision=True, extra_sync_flags=None, \*\*kwargs):** &mdash; **def [checkout](/recipes/recipe_modules/gclient/api.py#251)(self, gclient_config=None, revert=RevertOnTryserver, inject_parent_got_revision=True, extra_sync_flags=None, \*\*kwargs):**
Return a step generator function for gclient checkouts. Return a step generator function for gclient checkouts.
&emsp; **@staticmethod**<br>&mdash; **def [config\_to\_pythonish](/recipes/recipe_modules/gclient/api.py#133)(cfg):** &emsp; **@staticmethod**<br>&mdash; **def [config\_to\_pythonish](/recipes/recipe_modules/gclient/api.py#139)(cfg):**
&mdash; **def [diff\_deps](/recipes/recipe_modules/gclient/api.py#361)(self, cwd):** &mdash; **def [diff\_deps](/recipes/recipe_modules/gclient/api.py#367)(self, cwd):**
&mdash; **def [get\_config\_defaults](/recipes/recipe_modules/gclient/api.py#127)(self):** &mdash; **def [get\_config\_defaults](/recipes/recipe_modules/gclient/api.py#133)(self):**
&mdash; **def [get\_gerrit\_patch\_root](/recipes/recipe_modules/gclient/api.py#292)(self, gclient_config=None):** &mdash; **def [get\_gerrit\_patch\_root](/recipes/recipe_modules/gclient/api.py#298)(self, gclient_config=None):**
Returns local path to the repo where gerrit patch will be applied. Returns local path to the repo where gerrit patch will be applied.
@ -200,7 +200,7 @@ Instead, properly map a repository to a local path using repo_path_map.
TODO(nodir): remove this. Update all recipe tests to specify a git_repo TODO(nodir): remove this. Update all recipe tests to specify a git_repo
matching the recipe. matching the recipe.
&mdash; **def [get\_repo\_path](/recipes/recipe_modules/gclient/api.py#319)(self, repo_url, gclient_config=None):** &mdash; **def [get\_repo\_path](/recipes/recipe_modules/gclient/api.py#325)(self, repo_url, gclient_config=None):**
Returns local path to the repo checkout given its url. Returns local path to the repo checkout given its url.
@ -208,7 +208,7 @@ Consults cfg.repo_path_map and fallbacks to urls in configured solutions.
Returns None if not found. Returns None if not found.
&emsp; **@staticmethod**<br>&mdash; **def [got\_revision\_reverse\_mapping](/recipes/recipe_modules/gclient/api.py#138)(cfg):** &emsp; **@staticmethod**<br>&mdash; **def [got\_revision\_reverse\_mapping](/recipes/recipe_modules/gclient/api.py#144)(cfg):**
Returns the merged got_revision_reverse_mapping. Returns the merged got_revision_reverse_mapping.
@ -216,7 +216,7 @@ Returns (dict): A mapping from property name -> project name. It merges the
values of the deprecated got_revision_mapping and the new values of the deprecated got_revision_mapping and the new
got_revision_reverse_mapping. got_revision_reverse_mapping.
&mdash; **def [inject\_parent\_got\_revision](/recipes/recipe_modules/gclient/api.py#220)(self, gclient_config=None, override=False):** &mdash; **def [inject\_parent\_got\_revision](/recipes/recipe_modules/gclient/api.py#226)(self, gclient_config=None, override=False):**
Match gclient config to build revisions obtained from build_properties. Match gclient config to build revisions obtained from build_properties.
@ -226,9 +226,9 @@ Args:
override (bool) - If True, will forcibly set revision and custom_vars override (bool) - If True, will forcibly set revision and custom_vars
even if the config already contains values for them. even if the config already contains values for them.
&mdash; **def [resolve\_revision](/recipes/recipe_modules/gclient/api.py#155)(self, revision):** &mdash; **def [resolve\_revision](/recipes/recipe_modules/gclient/api.py#161)(self, revision):**
&mdash; **def [roll\_deps](/recipes/recipe_modules/gclient/api.py#422)(self, deps_path, dep_updates, strip_prefix_for_gitlink=None, test_data=None):** &mdash; **def [roll\_deps](/recipes/recipe_modules/gclient/api.py#428)(self, deps_path, dep_updates, strip_prefix_for_gitlink=None, test_data=None):**
Updates DEPS file to desired revisions, and returns all requried file Updates DEPS file to desired revisions, and returns all requried file
changes. changes.
@ -249,20 +249,20 @@ Returns:
commit hash. commit hash.
Note: we expect DEPS to be in the root of the project. Note: we expect DEPS to be in the root of the project.
&mdash; **def [runhooks](/recipes/recipe_modules/gclient/api.py#279)(self, args=None, name='runhooks', \*\*kwargs):** &mdash; **def [runhooks](/recipes/recipe_modules/gclient/api.py#285)(self, args=None, name='runhooks', \*\*kwargs):**
&mdash; **def [set\_patch\_repo\_revision](/recipes/recipe_modules/gclient/api.py#349)(self, gclient_config=None):** &mdash; **def [set\_patch\_repo\_revision](/recipes/recipe_modules/gclient/api.py#355)(self, gclient_config=None):**
Updates config revision corresponding to patched project. Updates config revision corresponding to patched project.
Useful for bot_update only, as this is the only consumer of gclient's config Useful for bot_update only, as this is the only consumer of gclient's config
revision map. This doesn't overwrite the revision if it was already set. revision map. This doesn't overwrite the revision if it was already set.
&emsp; **@spec_alias.deleter**<br>&mdash; **def [spec\_alias](/recipes/recipe_modules/gclient/api.py#123)(self):** &emsp; **@spec_alias.deleter**<br>&mdash; **def [spec\_alias](/recipes/recipe_modules/gclient/api.py#129)(self):**
&mdash; **def [sync](/recipes/recipe_modules/gclient/api.py#160)(self, cfg, extra_sync_flags=None, \*\*kwargs):** &mdash; **def [sync](/recipes/recipe_modules/gclient/api.py#166)(self, cfg, extra_sync_flags=None, \*\*kwargs):**
&emsp; **@use_mirror.setter**<br>&mdash; **def [use\_mirror](/recipes/recipe_modules/gclient/api.py#110)(self, val):** &emsp; **@use_mirror.setter**<br>&mdash; **def [use\_mirror](/recipes/recipe_modules/gclient/api.py#116)(self, val):**
### *recipe_modules* / [gerrit](/recipes/recipe_modules/gerrit) ### *recipe_modules* / [gerrit](/recipes/recipe_modules/gerrit)
[DEPS](/recipes/recipe_modules/gerrit/__init__.py#3): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time] [DEPS](/recipes/recipe_modules/gerrit/__init__.py#3): [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/time][recipe_engine/recipe_modules/time]
@ -406,13 +406,13 @@ Returns:
[DEPS](/recipes/recipe_modules/git/__init__.py#3): [depot\_tools](#recipe_modules-depot_tools), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step] [DEPS](/recipes/recipe_modules/git/__init__.py#3): [depot\_tools](#recipe_modules-depot_tools), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/step][recipe_engine/recipe_modules/step]
#### **class [GitApi](/recipes/recipe_modules/git/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** #### **class [GitApi](/recipes/recipe_modules/git/api.py#19)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
&mdash; **def [\_\_call\_\_](/recipes/recipe_modules/git/api.py#14)(self, \*args, \*\*kwargs):** &mdash; **def [\_\_call\_\_](/recipes/recipe_modules/git/api.py#22)(self, \*args, \*\*kwargs):**
Returns a git command step. Returns a git command step.
&mdash; **def [bundle\_create](/recipes/recipe_modules/git/api.py#373)(self, bundle_path, rev_list_args=None, \*\*kwargs):** &mdash; **def [bundle\_create](/recipes/recipe_modules/git/api.py#382)(self, bundle_path, rev_list_args=None, \*\*kwargs):**
Runs 'git bundle create' on a Git repository. Runs 'git bundle create' on a Git repository.
@ -422,11 +422,11 @@ Args:
refs in the Git checkout will be bundled. refs in the Git checkout will be bundled.
* kwargs: Forwarded to '__call__'. * kwargs: Forwarded to '__call__'.
&mdash; **def [cat\_file\_at\_commit](/recipes/recipe_modules/git/api.py#34)(self, file_path, commit_hash, remote_name=None, \*\*kwargs):** &mdash; **def [cat\_file\_at\_commit](/recipes/recipe_modules/git/api.py#42)(self, file_path, commit_hash, remote_name=None, \*\*kwargs):**
Outputs the contents of a file at a given revision. Outputs the contents of a file at a given revision.
&mdash; **def [checkout](/recipes/recipe_modules/git/api.py#107)(self, url, ref=None, dir_path=None, recursive=False, submodules=True, submodule_update_force=False, keep_paths=None, step_suffix=None, curl_trace_file=None, raise_on_failure=True, set_got_revision=False, remote_name=None, display_fetch_size=None, file_name=None, submodule_update_recursive=True, use_git_cache=False, progress=True, tags=False):** &mdash; **def [checkout](/recipes/recipe_modules/git/api.py#116)(self, url, ref=None, dir_path=None, recursive=False, submodules=True, submodule_update_force=False, keep_paths=None, step_suffix=None, curl_trace_file=None, raise_on_failure=True, set_got_revision=False, remote_name=None, display_fetch_size=None, file_name=None, submodule_update_recursive=True, use_git_cache=False, progress=True, tags=False):**
Performs a full git checkout and returns sha1 of checked out revision. Performs a full git checkout and returns sha1 of checked out revision.
@ -465,7 +465,7 @@ Args:
Returns: If the checkout was successful, this returns the commit hash of Returns: If the checkout was successful, this returns the commit hash of
the checked-out-repo. Otherwise this returns None. the checked-out-repo. Otherwise this returns None.
&mdash; **def [config\_get](/recipes/recipe_modules/git/api.py#342)(self, prop_name, \*\*kwargs):** &mdash; **def [config\_get](/recipes/recipe_modules/git/api.py#351)(self, prop_name, \*\*kwargs):**
Returns git config output. Returns git config output.
@ -475,7 +475,7 @@ Args:
Returns: (str) The Git config output, or None if no output was generated. Returns: (str) The Git config output, or None if no output was generated.
&mdash; **def [count\_objects](/recipes/recipe_modules/git/api.py#42)(self, previous_result=None, raise_on_failure=False, \*\*kwargs):** &mdash; **def [count\_objects](/recipes/recipe_modules/git/api.py#50)(self, previous_result=None, raise_on_failure=False, \*\*kwargs):**
Returns `git count-objects` result as a dict. Returns `git count-objects` result as a dict.
@ -488,11 +488,11 @@ Args:
Returns: Returns:
A dict of count-object values, or None if count-object run failed. A dict of count-object values, or None if count-object run failed.
&mdash; **def [fetch\_tags](/recipes/recipe_modules/git/api.py#28)(self, remote_name=None, \*\*kwargs):** &mdash; **def [fetch\_tags](/recipes/recipe_modules/git/api.py#36)(self, remote_name=None, \*\*kwargs):**
Fetches all tags from the remote. Fetches all tags from the remote.
&mdash; **def [get\_remote\_url](/recipes/recipe_modules/git/api.py#361)(self, remote_name=None, \*\*kwargs):** &mdash; **def [get\_remote\_url](/recipes/recipe_modules/git/api.py#370)(self, remote_name=None, \*\*kwargs):**
Returns the remote Git repository URL, or None. Returns the remote Git repository URL, or None.
@ -502,11 +502,11 @@ Args:
Returns: (str) The URL of the remote Git repository, or None. Returns: (str) The URL of the remote Git repository, or None.
&mdash; **def [get\_timestamp](/recipes/recipe_modules/git/api.py#313)(self, commit='HEAD', test_data=None, \*\*kwargs):** &mdash; **def [get\_timestamp](/recipes/recipe_modules/git/api.py#322)(self, commit='HEAD', test_data=None, \*\*kwargs):**
Find and return the timestamp of the given commit. Find and return the timestamp of the given commit.
&mdash; **def [new\_branch](/recipes/recipe_modules/git/api.py#386)(self, branch, name=None, upstream=None, upstream_current=False, \*\*kwargs):** &mdash; **def [new\_branch](/recipes/recipe_modules/git/api.py#395)(self, branch, name=None, upstream=None, upstream_current=False, \*\*kwargs):**
Runs git new-branch on a Git repository, to be used before git cl Runs git new-branch on a Git repository, to be used before git cl
upload. upload.
@ -518,7 +518,7 @@ Args:
* upstream_current (bool): whether to use '--upstream_current'. * upstream_current (bool): whether to use '--upstream_current'.
* kwargs: Forwarded to '__call__'. * kwargs: Forwarded to '__call__'.
&mdash; **def [number](/recipes/recipe_modules/git/api.py#417)(self, commitrefs=None, test_values=None):** &mdash; **def [number](/recipes/recipe_modules/git/api.py#426)(self, commitrefs=None, test_values=None):**
Computes the generation number of some commits. Computes the generation number of some commits.
@ -535,7 +535,7 @@ A list of strings containing the generation numbers of the commits.
If non-empty commitrefs was provided, the order of the returned If non-empty commitrefs was provided, the order of the returned
numbers will correspond to the order of the provided commitrefs. numbers will correspond to the order of the provided commitrefs.
&mdash; **def [rebase](/recipes/recipe_modules/git/api.py#322)(self, name_prefix, branch, dir_path, remote_name=None, \*\*kwargs):** &mdash; **def [rebase](/recipes/recipe_modules/git/api.py#331)(self, name_prefix, branch, dir_path, remote_name=None, \*\*kwargs):**
Runs rebase HEAD onto branch Runs rebase HEAD onto branch
@ -574,16 +574,16 @@ If you set `path` to None, this will remove the default.
[DEPS](/recipes/recipe_modules/gitiles/__init__.py#7): [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/url][recipe_engine/recipe_modules/url] [DEPS](/recipes/recipe_modules/gitiles/__init__.py#7): [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/url][recipe_engine/recipe_modules/url]
#### **class [Gitiles](/recipes/recipe_modules/gitiles/api.py#11)([RecipeApi][recipe_engine/wkt/RecipeApi]):** #### **class [Gitiles](/recipes/recipe_modules/gitiles/api.py#18)([RecipeApi][recipe_engine/wkt/RecipeApi]):**
Module for polling a git repository using the Gitiles web interface. Module for polling a git repository using the Gitiles web interface.
&mdash; **def [canonicalize\_repo\_url](/recipes/recipe_modules/gitiles/api.py#222)(self, repo_url):** &mdash; **def [canonicalize\_repo\_url](/recipes/recipe_modules/gitiles/api.py#231)(self, repo_url):**
Returns a canonical form of repo_url. If not recognized, returns as is. Returns a canonical form of repo_url. If not recognized, returns as is.
&mdash; **def [commit\_log](/recipes/recipe_modules/gitiles/api.py#114)(self, url, commit, step_name=None, attempts=None):** &mdash; **def [commit\_log](/recipes/recipe_modules/gitiles/api.py#121)(self, url, commit, step_name=None, attempts=None):**
Returns: (dict) the Gitiles commit log structure for a given commit. Returns: (dict) the Gitiles commit log structure for a given commit.
@ -593,7 +593,7 @@ Args:
* step_name (str): If not None, override the step name. * step_name (str): If not None, override the step name.
* attempts (int): Number of times to try the request before failing. * attempts (int): Number of times to try the request before failing.
&mdash; **def [download\_archive](/recipes/recipe_modules/gitiles/api.py#162)(self, repository_url, destination, revision='refs/heads/main'):** &mdash; **def [download\_archive](/recipes/recipe_modules/gitiles/api.py#171)(self, repository_url, destination, revision='refs/heads/main'):**
Downloads an archive of the repo and extracts it to `destination`. Downloads an archive of the repo and extracts it to `destination`.
@ -609,7 +609,7 @@ Args:
* revision (str): The ref or revision in the repo to download. Defaults to * revision (str): The ref or revision in the repo to download. Defaults to
'refs/heads/main'. 'refs/heads/main'.
&mdash; **def [download\_file](/recipes/recipe_modules/gitiles/api.py#130)(self, repository_url, file_path, branch='main', step_name=None, attempts=None, \*\*kwargs):** &mdash; **def [download\_file](/recipes/recipe_modules/gitiles/api.py#137)(self, repository_url, file_path, branch='main', step_name=None, attempts=None, \*\*kwargs):**
Downloads raw file content from a Gitiles repository. Downloads raw file content from a Gitiles repository.
@ -623,7 +623,7 @@ Args:
Returns: Returns:
Raw file content. Raw file content.
&mdash; **def [log](/recipes/recipe_modules/gitiles/api.py#68)(self, url, ref, limit=0, cursor=None, step_name=None, attempts=None, \*\*kwargs):** &mdash; **def [log](/recipes/recipe_modules/gitiles/api.py#75)(self, url, ref, limit=0, cursor=None, step_name=None, attempts=None, \*\*kwargs):**
Returns the most recent commits under the given ref with properties. Returns the most recent commits under the given ref with properties.
@ -646,17 +646,17 @@ Returns:
Cursor can be used for subsequent calls to log for paging. If None, Cursor can be used for subsequent calls to log for paging. If None,
signals that there are no more commits to fetch. signals that there are no more commits to fetch.
&mdash; **def [parse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#211)(self, repo_url):** &mdash; **def [parse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#220)(self, repo_url):**
Returns (host, project) pair. Returns (host, project) pair.
Returns (None, None) if repo_url is not recognized. Returns (None, None) if repo_url is not recognized.
&mdash; **def [refs](/recipes/recipe_modules/gitiles/api.py#56)(self, url, step_name='refs', attempts=None):** &mdash; **def [refs](/recipes/recipe_modules/gitiles/api.py#63)(self, url, step_name='refs', attempts=None):**
Returns a list of refs in the remote repository. Returns a list of refs in the remote repository.
&mdash; **def [unparse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#218)(self, host, project):** &mdash; **def [unparse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#227)(self, host, project):**
Generates a Gitiles repo URL. See also parse_repo_url. Generates a Gitiles repo URL. See also parse_repo_url.
### *recipe_modules* / [gsutil](/recipes/recipe_modules/gsutil) ### *recipe_modules* / [gsutil](/recipes/recipe_modules/gsutil)

@ -1,4 +1,4 @@
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'depot_tools', 'depot_tools',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'bot_update', 'bot_update',

@ -5,6 +5,9 @@
# TODO(hinoka): Use logging. # TODO(hinoka): Use logging.
from __future__ import division
from __future__ import print_function
import codecs import codecs
from contextlib import contextmanager from contextlib import contextmanager
import copy import copy
@ -25,8 +28,18 @@ import uuid
import os.path as path import os.path as path
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
from io import BytesIO from io import BytesIO
from urllib.parse import urlparse try:
import urlparse
except ImportError: # pragma: no cover
import urllib.parse as urlparse
# Cache the string-escape codec to ensure subprocess can find it later.
# See crbug.com/912292#c2 for context.
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
if sys.version_info.major == 2:
codecs.lookup('string-escape')
# How many bytes at a time to read from pipes. # How many bytes at a time to read from pipes.
BUF_SIZE = 256 BUF_SIZE = 256
@ -156,6 +169,13 @@ def _kill_process(proc):
proc.kill() proc.kill()
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
def _stdout_write(buf):
try:
sys.stdout.buffer.write(buf)
except AttributeError:
sys.stdout.write(buf)
def call(*args, **kwargs): # pragma: no cover def call(*args, **kwargs): # pragma: no cover
"""Interactive subprocess call.""" """Interactive subprocess call."""
@ -215,10 +235,10 @@ def call(*args, **kwargs): # pragma: no cover
if hanging_cr: if hanging_cr:
buf = buf[:-1] buf = buf[:-1]
buf = buf.replace(b'\r\n', b'\n').replace(b'\r', b'\n') buf = buf.replace(b'\r\n', b'\n').replace(b'\r', b'\n')
sys.stdout.buffer.write(buf) _stdout_write(buf)
out.write(buf) out.write(buf)
if hanging_cr: if hanging_cr:
sys.stdout.buffer.write(b'\n') _stdout_write(b'\n')
out.write(b'\n') out.write(b'\n')
code = proc.wait() code = proc.wait()
@ -311,7 +331,7 @@ def modify_solutions(input_solutions):
solutions = copy.deepcopy(input_solutions) solutions = copy.deepcopy(input_solutions)
for solution in solutions: for solution in solutions:
original_url = solution['url'] original_url = solution['url']
parsed_url = urlparse(original_url) parsed_url = urlparse.urlparse(original_url)
parsed_path = parsed_url.path parsed_path = parsed_url.path
solution['managed'] = False solution['managed'] = False
@ -458,7 +478,7 @@ def normalize_git_url(url):
* Do not contain /a/ in their path. * Do not contain /a/ in their path.
""" """
try: try:
p = urlparse(url) p = urlparse.urlparse(url)
except Exception: except Exception:
# Not a url, just return it back. # Not a url, just return it back.
return url return url
@ -873,7 +893,7 @@ def parse_revisions(revisions, root):
# This is an alt_root@revision argument. # This is an alt_root@revision argument.
current_root, current_rev = split_revision current_root, current_rev = split_revision
parsed_root = urlparse(current_root) parsed_root = urlparse.urlparse(current_root)
if parsed_root.scheme in ['http', 'https']: if parsed_root.scheme in ['http', 'https']:
# We want to normalize git urls into .git urls. # We want to normalize git urls into .git urls.
normalized_root = 'https://' + parsed_root.netloc + parsed_root.path normalized_root = 'https://' + parsed_root.netloc + parsed_root.path

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'bot_update', 'bot_update',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'bot_update', 'bot_update',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'bot_update', 'bot_update',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/cipd', 'recipe_engine/cipd',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'depot_tools', 'depot_tools',

@ -4,6 +4,12 @@
import re import re
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
try:
_STRING_TYPE = basestring
except NameError: # pragma: no cover
_STRING_TYPE = str
from recipe_engine import recipe_api from recipe_engine import recipe_api
class DepsDiffException(Exception): class DepsDiffException(Exception):
@ -62,7 +68,7 @@ def jsonish_to_python(spec, is_top=False):
ret += '[' ret += '['
ret += ', '.join(jsonish_to_python(x) for x in spec) ret += ', '.join(jsonish_to_python(x) for x in spec)
ret += ']' ret += ']'
elif isinstance(spec, str): elif isinstance(spec, _STRING_TYPE):
ret = repr(str(spec)) ret = repr(str(spec))
else: else:
ret = repr(spec) ret = repr(spec)

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gclient', 'gclient',

@ -1,5 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from __future__ import print_function
import os, sys import os, sys
build_path = sys.argv[1] build_path = sys.argv[1]

@ -1,5 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from __future__ import print_function
import os import os
import subprocess import subprocess
import sys import sys

@ -5,7 +5,7 @@
from recipe_engine.post_process import (DropExpectation, StatusSuccess, from recipe_engine.post_process import (DropExpectation, StatusSuccess,
SummaryMarkdown) SummaryMarkdown)
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/assertions', 'recipe_engine/assertions',

@ -6,7 +6,7 @@ from recipe_engine import post_process
from recipe_engine import recipe_api from recipe_engine import recipe_api
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/buildbucket', 'recipe_engine/buildbucket',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/path', 'recipe_engine/path',

@ -1,4 +1,4 @@
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/context', 'recipe_engine/context',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gerrit', 'gerrit',

@ -1,4 +1,4 @@
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'depot_tools', 'depot_tools',

@ -2,9 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
from __future__ import division
import itertools import itertools
import re import re
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
try:
_INTEGER_TYPES = (int, long)
except NameError: # pragma: no cover
_INTEGER_TYPES = (int,)
from recipe_engine import recipe_api from recipe_engine import recipe_api
from recipe_engine import util as recipe_util from recipe_engine import util as recipe_util
@ -53,7 +61,8 @@ class GitApi(recipe_api.RecipeApi):
""" """
if previous_result: if previous_result:
assert isinstance(previous_result, dict) assert isinstance(previous_result, dict)
assert all(isinstance(v, int) for v in previous_result.values()) assert all(
isinstance(v, _INTEGER_TYPES) for v in previous_result.values())
assert 'size' in previous_result assert 'size' in previous_result
assert 'size-pack' in previous_result assert 'size-pack' in previous_result

@ -184,7 +184,7 @@
"Traceback (most recent call last):", "Traceback (most recent call last):",
" File \"RECIPE_REPO[depot_tools]/recipes/recipe_modules/git/examples/full.py\", line 81, in RunSteps", " File \"RECIPE_REPO[depot_tools]/recipes/recipe_modules/git/examples/full.py\", line 81, in RunSteps",
" api.git.new_branch('failed_new_branch', upstream='will_fail', upstream_current=True) #pylint: disable = line-too-long", " api.git.new_branch('failed_new_branch', upstream='will_fail', upstream_current=True) #pylint: disable = line-too-long",
" File \"RECIPE_REPO[depot_tools]/recipes/recipe_modules/git/api.py\", line 403, in new_branch", " File \"RECIPE_REPO[depot_tools]/recipes/recipe_modules/git/api.py\", line 412, in new_branch",
" raise ValueError('Can not define both upstream and upstream_current')", " raise ValueError('Can not define both upstream and upstream_current')",
"ValueError('Can not define both upstream and upstream_current')" "ValueError('Can not define both upstream and upstream_current')"
] ]

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/buildbucket', 'recipe_engine/buildbucket',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'git', 'git',

@ -1,4 +1,4 @@
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/context', 'recipe_engine/context',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/json', 'recipe_engine/json',

@ -2,8 +2,15 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
from __future__ import division
import base64 import base64
import urllib.parse import sys
try:
import urlparse
except ImportError: # pragma: no cover
import urllib.parse as urlparse
from recipe_engine import recipe_api from recipe_engine import recipe_api
@ -154,8 +161,10 @@ class Gitiles(recipe_api.RecipeApi):
value = base64.b64decode(step_result.json.output['value']) value = base64.b64decode(step_result.json.output['value'])
try: try:
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
# If the file is not utf-8 encodable, return the bytes # If the file is not utf-8 encodable, return the bytes
value = value.decode('utf-8') if sys.version_info >= (3,):
value = value.decode('utf-8')
finally: finally:
return value return value
@ -231,9 +240,9 @@ class Gitiles(recipe_api.RecipeApi):
def parse_http_host_and_path(url): def parse_http_host_and_path(url):
# Copied from https://chromium.googlesource.com/infra/luci/recipes-py/+/809e57935211b3fcb802f74a7844d4f36eff6b87/recipe_modules/buildbucket/util.py # Copied from https://chromium.googlesource.com/infra/luci/recipes-py/+/809e57935211b3fcb802f74a7844d4f36eff6b87/recipe_modules/buildbucket/util.py
parsed = urllib.parse.urlparse(url) parsed = urlparse.urlparse(url)
if not parsed.scheme: if not parsed.scheme:
parsed = urllib.parse.urlparse('https://' + url) parsed = urlparse.urlparse('https://' + url)
if (parsed.scheme in ('http', 'https') and if (parsed.scheme in ('http', 'https') and
not parsed.params and not parsed.params and
not parsed.query and not parsed.query and

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gitiles', 'gitiles',

@ -10,6 +10,8 @@ Example usage:
-u https://chromium.googlesource.com/chromium/src/+log -u https://chromium.googlesource.com/chromium/src/+log
""" """
from __future__ import print_function
import argparse import argparse
import json import json
import logging import logging
@ -17,7 +19,13 @@ import os
import sys import sys
import tarfile import tarfile
import time import time
import urllib.parse
try:
from urllib import urlencode
import urlparse
except ImportError: # pragma: no cover
from urllib.parse import urlencode
import urllib.parse as urlparse
DEPOT_TOOLS = os.path.abspath( DEPOT_TOOLS = os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir, os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
@ -28,13 +36,13 @@ from gerrit_util import CreateHttpConn, ReadHttpResponse, ReadHttpJsonResponse
def reparse_url(parsed_url, query_params): def reparse_url(parsed_url, query_params):
return urllib.parse.ParseResult( return urlparse.ParseResult(
scheme=parsed_url.scheme, scheme=parsed_url.scheme,
netloc=parsed_url.netloc, netloc=parsed_url.netloc,
path=parsed_url.path, path=parsed_url.path,
params=parsed_url.params, params=parsed_url.params,
fragment=parsed_url.fragment, fragment=parsed_url.fragment,
query=urllib.parse.urlencode(query_params, doseq=True)) query=urlencode(query_params, doseq=True))
def gitiles_get(parsed_url, handler, attempts): def gitiles_get(parsed_url, handler, attempts):

@ -4,7 +4,7 @@
from recipe_engine.post_process import DropExpectation, StatusSuccess from recipe_engine.post_process import DropExpectation, StatusSuccess
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gitiles', 'gitiles',

@ -1,6 +1,6 @@
from PB.recipe_modules.depot_tools.gsutil import properties from PB.recipe_modules.depot_tools.gsutil import properties
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/context', 'recipe_engine/context',

@ -5,7 +5,7 @@
from recipe_engine import post_process from recipe_engine import post_process
from recipe_engine.recipe_api import Property from recipe_engine.recipe_api import Property
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gsutil', 'gsutil',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gsutil', 'gsutil',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/cipd', 'recipe_engine/cipd',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'osx_sdk', 'osx_sdk',

@ -8,7 +8,7 @@ from recipe_engine.recipe_api import Property
from PB.recipe_modules.depot_tools.presubmit import properties from PB.recipe_modules.depot_tools.presubmit import properties
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'bot_update', 'bot_update',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'presubmit', 'presubmit',

@ -7,7 +7,7 @@ import textwrap
from recipe_engine import post_process from recipe_engine import post_process
from recipe_engine import recipe_api from recipe_engine import recipe_api
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gclient', 'gclient',

@ -6,7 +6,7 @@ from recipe_engine import post_process
from recipe_engine import recipe_api from recipe_engine import recipe_api
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gclient', 'gclient',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gerrit', 'gerrit',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gerrit', 'gerrit',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gerrit', 'gerrit',

@ -5,7 +5,7 @@
from recipe_engine.post_process import (DropExpectation, StatusSuccess, from recipe_engine.post_process import (DropExpectation, StatusSuccess,
StepCommandContains) StepCommandContains)
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gerrit', 'gerrit',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'gerrit', 'gerrit',

@ -5,7 +5,7 @@
from recipe_engine.post_process import (DropExpectation, StatusSuccess, MustRun, from recipe_engine.post_process import (DropExpectation, StatusSuccess, MustRun,
DoesNotRun) DoesNotRun)
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'tryserver', 'tryserver',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'tryserver', 'tryserver',

@ -4,7 +4,7 @@
from recipe_engine import post_process from recipe_engine import post_process
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'tryserver', 'tryserver',

@ -7,7 +7,7 @@ from recipe_engine import post_process
from PB.go.chromium.org.luci.swarming.proto.api import swarming as swarming_pb from PB.go.chromium.org.luci.swarming.proto.api import swarming as swarming_pb
from PB.recipe_modules.recipe_engine.led import properties as led_properties_pb from PB.recipe_modules.recipe_engine.led import properties as led_properties_pb
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'tryserver', 'tryserver',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'recipe_engine/cipd', 'recipe_engine/cipd',

@ -2,7 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
PYTHON_VERSION_COMPATIBILITY = 'PY3' PYTHON_VERSION_COMPATIBILITY = 'PY2+3'
DEPS = [ DEPS = [
'windows_sdk', 'windows_sdk',

Loading…
Cancel
Save