Commit 8a876036 authored by Takuto Ikuta's avatar Takuto Ikuta Committed by LUCI CQ

Revert "Reland "Break make_encoded_file into two functions""

This reverts commit 41c57603.

Reason for revert:
This broke depot tools CQ.
e.g.
https://ci.chromium.org/ui/p/infra/builders/try/ChromiumOS%20downstream%20Recipe%20Roll%20tester%20from%20Depot%20Tools/b8815683872106857201/overview

Please prepare roll CL on chromeos side when you reland this.

Original change's description:
> Reland "Break make_encoded_file into two functions"
>
> This is a reland of commit 5e49eda5
>
> Original change's description:
> > Break make_encoded_file into two functions
> >
> > The python3 fallback for `make_encoded_file()` produces different results on py2 and py3 when bytes are passed. This CL makes it clear breaking it into two methods, one for text and another for bytes. This CL also adds a fallback in `download_file` for py3 to return bytes when it cannot decode the downloaded file into utf-8.
> >
> > Recipe-Manual-Change: chromiumos
> > Change-Id: I3d313e430c852e179825bc24bf4a58ce84440b2a
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3595026
> > Reviewed-by: Gavin Mak <gavinmak@google.com>
> > Reviewed-by: Greg Edelston <gredelston@google.com>
> > Commit-Queue: Aravind Vasudevan <aravindvasudev@google.com>
>
> Recipe-Manual-Change: chromiumos
> Change-Id: I2de85eca71cc45f503c25888297ba881a5c662a8
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3610973
> Reviewed-by: Aravind Vasudevan <aravindvasudev@google.com>
> Reviewed-by: Gavin Mak <gavinmak@google.com>
> Commit-Queue: Greg Edelston <gredelston@google.com>

Change-Id: I7718ab01f4249c7dc2d978c12fb3a26e3ece91b6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3612484Reviewed-by: 's avatarAravind Vasudevan <aravindvasudev@google.com>
Auto-Submit: Takuto Ikuta <tikuta@chromium.org>
Commit-Queue: Aravind Vasudevan <aravindvasudev@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
parent e6bbb3a2
......@@ -553,7 +553,7 @@ PYTHON_VERSION_COMPATIBILITY: PY2+3
Module for polling a git repository using the Gitiles web interface.
&mdash; **def [canonicalize\_repo\_url](/recipes/recipe_modules/gitiles/api.py#231)(self, repo_url):**
&mdash; **def [canonicalize\_repo\_url](/recipes/recipe_modules/gitiles/api.py#227)(self, repo_url):**
Returns a canonical form of repo_url. If not recognized, returns as is.
......@@ -568,7 +568,7 @@ Args:
* step_name (str): If not None, override the step name.
* attempts (int): Number of times to try the request before failing.
&mdash; **def [download\_archive](/recipes/recipe_modules/gitiles/api.py#171)(self, repository_url, destination, revision='refs/heads/main'):**
&mdash; **def [download\_archive](/recipes/recipe_modules/gitiles/api.py#167)(self, repository_url, destination, revision='refs/heads/main'):**
Downloads an archive of the repo and extracts it to `destination`.
......@@ -621,7 +621,7 @@ Returns:
Cursor can be used for subsequent calls to log for paging. If None,
signals that there are no more commits to fetch.
&mdash; **def [parse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#220)(self, repo_url):**
&mdash; **def [parse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#216)(self, repo_url):**
Returns (host, project) pair.
......@@ -631,7 +631,7 @@ Returns (None, None) if repo_url is not recognized.
Returns a list of refs in the remote repository.
&mdash; **def [unparse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#227)(self, host, project):**
&mdash; **def [unparse\_repo\_url](/recipes/recipe_modules/gitiles/api.py#223)(self, host, project):**
Generates a Gitiles repo URL. See also parse_repo_url.
### *recipe_modules* / [gsutil](/recipes/recipe_modules/gsutil)
......
......@@ -158,15 +158,11 @@ class Gitiles(recipe_api.RecipeApi):
**kwargs)
if step_result.json.output['value'] is None:
return None
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
value = base64.b64decode(step_result.json.output['value'])
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 sys.version_info >= (3,):
value = value.decode('utf-8')
finally:
return value
if sys.version_info >= (3,):
return value.decode('utf-8')
return value
def download_archive(self, repository_url, destination,
revision='refs/heads/main'):
......
......@@ -529,22 +529,6 @@
],
"name": "fetch main:OWNERS"
},
{
"cmd": [
"vpython3",
"-u",
"RECIPE_MODULE[depot_tools::gitiles]/resources/gerrit_client.py",
"--json-file",
"/path/to/tmp/json",
"--url",
"https://chromium.googlesource.com/chromium/src/+/main/BYTES",
"--format",
"text",
"--attempts",
"5"
],
"name": "fetch main:BYTES"
},
{
"cmd": [
"vpython3",
......
......@@ -23,10 +23,6 @@ def RunSteps(api):
data = api.gitiles.download_file(url, 'OWNERS', attempts=5)
assert data == 'foobar'
data = api.gitiles.download_file(url, 'BYTES', attempts=5)
assert data == b'\xab'
data = api.gitiles.download_file(url, 'NONEXISTENT', attempts=1,
accept_statuses=[404])
......@@ -77,10 +73,6 @@ def GenTests(api):
'fetch main:OWNERS',
api.gitiles.make_encoded_file('foobar')
)
+ api.step_data(
'fetch main:BYTES',
api.gitiles.make_encoded_file_from_bytes(b'\xab')
)
+ api.step_data(
'fetch main:NONEXISTENT',
api.json.output({'value': None})
......
......@@ -90,23 +90,12 @@ class GitilesTestApi(recipe_test_api.RecipeTestApi):
return hashlib.sha1(':'.join(bases).encode('utf-8')).hexdigest()
def make_encoded_file(self, data):
"""Encodes data into base64.
Args:
data (str): unicode-encodable string.
Returns: (str) base64-encoded data string.
"""
value = None
# TODO(crbug.com/1227140): Clean up when py2 is no longer supported.
try:
value = base64.b64encode(data.encode('utf-8')).decode('utf-8')
except UnicodeDecodeError: #pragma: nocover
value = base64.b64encode(data)
return self.m.json.output({
'value': base64.b64encode(data.encode('utf-8')).decode('utf-8'),
'value': value,
})
def make_encoded_file_from_bytes(self, data):
"""Encodes data into base64.
Args:
data (bytes): byte string to encode.
Returns: (str) base64-encoded data string.
"""
return self.m.json.output({
'value': base64.b64encode(data).decode('utf-8'),
})
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment