From 602076dcf209cf2630e3976c648f4f4d8da0b553 Mon Sep 17 00:00:00 2001 From: Edward Lemur Date: Sat, 27 Jul 2019 00:36:16 +0000 Subject: [PATCH] depot_tools: Make gclient_utils Python 3 compatible. Bug: 984182 Change-Id: Ifb93466dcb7541f46c31c9b298049c425dd150d6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1715472 Reviewed-by: Andrii Shyshkalov Commit-Queue: Edward Lesmes --- gclient_utils.py | 8 ++-- tests/gclient_utils_test.py | 91 +++++++++++++++++++------------------ 2 files changed, 53 insertions(+), 46 deletions(-) diff --git a/gclient_utils.py b/gclient_utils.py index ead81c7bb3..78c08b1b6c 100644 --- a/gclient_utils.py +++ b/gclient_utils.py @@ -579,16 +579,18 @@ def CheckCallAndFilter(args, stdout=None, filter_fn=None, if in_byte: if call_filter_on_first_line: filter_fn(None) - in_line = b'' + in_line = '' while in_byte: - output.write(in_byte) + if isinstance(in_byte, bytes): + in_byte = in_byte.decode('utf-8') + output.write(in_byte.encode('utf-8')) if print_stdout: stdout.write(in_byte) if in_byte not in ['\r', '\n']: in_line += in_byte else: filter_fn(in_line) - in_line = b'' + in_line = '' in_byte = kid.stdout.read(1) # Flush the rest of buffered output. This is only an issue with # stdout/stderr not ending with a \n. diff --git a/tests/gclient_utils_test.py b/tests/gclient_utils_test.py index 8ffd1d3f66..1a2dfcfcfe 100755 --- a/tests/gclient_utils_test.py +++ b/tests/gclient_utils_test.py @@ -5,7 +5,6 @@ # found in the LICENSE file. import os -import StringIO import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) @@ -13,6 +12,12 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from testing_support.super_mox import SuperMoxTestBase from testing_support import trial_dir +from third_party import six +from third_party.six import StringIO +if six.PY3: + # pylint: disable=redefined-builtin + basestring = str + import gclient_utils import subprocess2 @@ -28,7 +33,7 @@ class GclientUtilBase(SuperMoxTestBase): class CheckCallAndFilterTestCase(GclientUtilBase): class ProcessIdMock(object): def __init__(self, test_string): - self.stdout = StringIO.StringIO(test_string) + self.stdout = StringIO(test_string) self.pid = 9284 # pylint: disable=no-self-use def wait(self): @@ -55,25 +60,25 @@ class CheckCallAndFilterTestCase(GclientUtilBase): capture_list = [] def FilterLines(line): line_list.append(line) - assert isinstance(line, str), type(line) + assert isinstance(line, basestring), type(line) match = compiled_pattern.search(line) if match: capture_list.append(match.group(1)) gclient_utils.CheckCallAndFilterAndHeader( args, cwd=cwd, always=True, filter_fn=FilterLines) - self.assertEquals(line_list, ['ahah', 'accb', 'allo', 'addb', '✔']) - self.assertEquals(capture_list, ['cc', 'dd']) + self.assertEqual(line_list, ['ahah', 'accb', 'allo', 'addb', u'✔']) + self.assertEqual(capture_list, ['cc', 'dd']) def testCheckCallAndFilter(self): args = ['boo', 'foo', 'bar'] - test_string = 'ahah\naccb\nallo\naddb\n✔\n' + test_string = u'ahah\naccb\nallo\naddb\n✔\n' self._inner(args, test_string) self.checkstdout( - '________ running \'boo foo bar\' in \'bleh\'\n' - 'ahah\naccb\nallo\naddb\n✔\n' - '________ running \'boo foo bar\' in \'bleh\'\n' - 'ahah\naccb\nallo\naddb\n✔' - '\n') + u'________ running \'boo foo bar\' in \'bleh\'\n' + u'ahah\naccb\nallo\naddb\n✔\n' + u'________ running \'boo foo bar\' in \'bleh\'\n' + u'ahah\naccb\nallo\naddb\n✔' + u'\n') class SplitUrlRevisionTestCase(GclientUtilBase): @@ -81,60 +86,60 @@ class SplitUrlRevisionTestCase(GclientUtilBase): url = "ssh://test@example.com/test.git" rev = "ac345e52dc" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) url = "ssh://example.com/test.git" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) url = "ssh://example.com/git/test.git" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) rev = "test-stable" out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) url = "ssh://user-name@example.com/~/test.git" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) url = "ssh://user-name@example.com/~username/test.git" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) url = "git@github.com:dart-lang/spark.git" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) def testSVNUrl(self): url = "svn://example.com/test" rev = "ac345e52dc" out_url, out_rev = gclient_utils.SplitUrlRevision(url) - self.assertEquals(out_rev, None) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, None) + self.assertEqual(out_url, url) out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev)) - self.assertEquals(out_rev, rev) - self.assertEquals(out_url, url) + self.assertEqual(out_rev, rev) + self.assertEqual(out_url, url) class GClientUtilsTest(trial_dir.TestCase): @@ -171,7 +176,7 @@ class GClientUtilsTest(trial_dir.TestCase): ['foo:', 'https://foo:'], ] for content, expected in values: - self.assertEquals( + self.assertEqual( expected, gclient_utils.UpgradeToHttps(content)) def testParseCodereviewSettingsContent(self): @@ -191,7 +196,7 @@ class GClientUtilsTest(trial_dir.TestCase): ['VIEW_VC:http://r/s', {'VIEW_VC': 'https://r/s'}], ] for content, expected in values: - self.assertEquals( + self.assertEqual( expected, gclient_utils.ParseCodereviewSettingsContent(content))