Fix ParseGitSubmodules for git v2.34

The `--format` option for `git ls-tree` was introduced in git v2.36 and
hence gclient breaks for lower git versions.

Change-Id: I02750904aa78bb5fd5f3f57dc2ad42e355fa4a42
Bug: 1471241
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4765682
Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
Commit-Queue: Aravind Vasudevan <aravindvasudev@google.com>
changes/82/4765682/3
Aravind Vasudevan 2 years ago committed by LUCI CQ
parent cf74528243
commit e29d5e9ad5

@ -942,19 +942,16 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
return {}
# Get submodule commit hashes
# Output Format: `<mode> <commit_hash> <path>`.
result = subprocess2.check_output([
'git', 'ls-tree', '-r', 'HEAD', '--format',
'%(objectmode) %(objectname) %(path)'
],
# Output Format: `<mode> SP <type> SP <object> TAB <file>`.
result = subprocess2.check_output(['git', 'ls-tree', '-r', 'HEAD'],
cwd=cwd).decode('utf-8')
commit_hashes = {}
for r in result.splitlines():
# ['<mode>', '<commit_hash>', '<path>'].
record = r.strip().split()
# ['<mode>', '<type>', '<commit_hash>', '<path>'].
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(

@ -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'),
}
})

Loading…
Cancel
Save