diff --git a/gclient.py b/gclient.py index d1f139757..ba188c337 100755 --- a/gclient.py +++ b/gclient.py @@ -942,19 +942,16 @@ class Dependency(gclient_utils.WorkItem, DependencySettings): return {} # Get submodule commit hashes - # Output Format: ` `. - result = subprocess2.check_output([ - 'git', 'ls-tree', '-r', 'HEAD', '--format', - '%(objectmode) %(objectname) %(path)' - ], + # Output Format: ` SP SP TAB `. + result = subprocess2.check_output(['git', 'ls-tree', '-r', 'HEAD'], cwd=cwd).decode('utf-8') commit_hashes = {} for r in result.splitlines(): - # ['', '', '']. - record = r.strip().split() + # ['', '', '', '']. + record = r.strip().split(maxsplit=3) # path can contain spaces. if record[0] == '160000': # Only add gitlinks - commit_hashes[record[2]] = record[1] + commit_hashes[record[3]] = record[2] # Get .gitmodules fields gitmodules_entries = subprocess2.check_output( diff --git a/tests/gclient_test.py b/tests/gclient_test.py index 03b4dbfd2..5156926cf 100755 --- a/tests/gclient_test.py +++ b/tests/gclient_test.py @@ -1432,11 +1432,12 @@ class GclientTest(trial_dir.TestCase): }] write('.gclient', 'solutions = %s' % repr(solutions)) - ls_tree = """160000 be8c5114d606692dc783b60cf256690b62fbad17 foo/bar - 123456 daf2de9caad4a70e6bb1047a6b50c412066f68b1 README.txt - 160000 3ad3b564f8ae456f286446d091709f5a09fa4a93 aaaaaa - 160000 956df937508b65b5e72a4cf02696255be3631b78 a.a.a/a - 160000 b9f77763f0fab67eeeb6371492166567a8b7a3d2 a_b/c""" + ls_tree = """160000 commit be8c5114d606692dc783b60cf256690b62fbad17\tfoo/bar + 100644 blob daf2de9caad4a70e6bb1047a6b50c412066f68b1\tREADME.txt + 160000 commit 3ad3b564f8ae456f286446d091709f5a09fa4a93\taaaaaa + 160000 commit 956df937508b65b5e72a4cf02696255be3631b78\ta.a.a/a + 160000 commit b9f77763f0fab67eeeb6371492166567a8b7a3d2\ta_b/c + 160000 commit b9f77763f0fab67eeeb6371492166567a8b7a3d2\ta b/c""" git_config = """submodule.foo/bar.path=foo/bar submodule.foo/bar.url=http://example.com/foo/bar @@ -1446,7 +1447,9 @@ class GclientTest(trial_dir.TestCase): submodule.a.a.a/a.path=a.a.a/a submodule.a.a.a/a.url=http://example.com/a.a.a/a submodule.a_b/c.path=a_b/c - submodule.a_b/c.url=http://example.com/a_b/c""" + submodule.a_b/c.url=http://example.com/a_b/c + submodule.a b/c.path=a b/c + submodule.a b/c.url=http://example.com/a%20b/c""" os_path_isfile_mock = mock.MagicMock(return_value=True) subprocess2_check_output_mock = mock.MagicMock( @@ -1487,6 +1490,12 @@ class GclientTest(trial_dir.TestCase): 'git', 'url': ('http://example.com/a_b/c@' + 'b9f77763f0fab67eeeb6371492166567a8b7a3d2') + }, + 'a b/c': { + 'dep_type': + 'git', + 'url': ('http://example.com/a%20b/c@' + + 'b9f77763f0fab67eeeb6371492166567a8b7a3d2'), } }) @@ -1500,11 +1509,12 @@ class GclientTest(trial_dir.TestCase): }] write('.gclient', 'solutions = %s' % repr(solutions)) - ls_tree = """160000 be8c5114d606692dc783b60cf256690b62fbad17 foo/bar - 123456 daf2de9caad4a70e6bb1047a6b50c412066f68b1 README.txt - 160000 3ad3b564f8ae456f286446d091709f5a09fa4a93 aaaaaa - 160000 956df937508b65b5e72a4cf02696255be3631b78 a.a.a/a - 160000 b9f77763f0fab67eeeb6371492166567a8b7a3d2 a_b/c""" + ls_tree = """160000 commit be8c5114d606692dc783b60cf256690b62fbad17\tfoo/bar + 100644 blob daf2de9caad4a70e6bb1047a6b50c412066f68b1\tREADME.txt + 160000 commit 3ad3b564f8ae456f286446d091709f5a09fa4a93\taaaaaa + 160000 commit 956df937508b65b5e72a4cf02696255be3631b78\ta.a.a/a + 160000 commit b9f77763f0fab67eeeb6371492166567a8b7a3d2\ta_b/c + 160000 commit b9f77763f0fab67eeeb6371492166567a8b7a3d2\ta b/c""" git_config = """submodule.foo/bar.path=foo/bar submodule.foo/bar.url=http://example.com/foo/bar @@ -1514,7 +1524,9 @@ class GclientTest(trial_dir.TestCase): submodule.a.a.a/a.path=a.a.a/a submodule.a.a.a/a.url=http://example.com/a.a.a/a submodule.a_b/c.path=a_b/c - submodule.a_b/c.url=http://example.com/a_b/c""" + submodule.a_b/c.url=http://example.com/a_b/c + submodule.a b/c.path=a b/c + submodule.a b/c.url=http://example.com/a%20b/c""" os_path_isfile_mock = mock.MagicMock(return_value=True) subprocess2_check_output_mock = mock.MagicMock( @@ -1554,6 +1566,12 @@ class GclientTest(trial_dir.TestCase): 'git', 'url': ('http://example.com/a_b/c@' + 'b9f77763f0fab67eeeb6371492166567a8b7a3d2') + }, + 'foobar/a b/c': { + 'dep_type': + 'git', + 'url': ('http://example.com/a%20b/c@' + + 'b9f77763f0fab67eeeb6371492166567a8b7a3d2'), } })