From e0c47c138ad4b0e6224a29e597dba5ca53e63ee0 Mon Sep 17 00:00:00 2001 From: Josip Sokcevic Date: Thu, 10 Oct 2024 19:02:39 +0000 Subject: [PATCH] [scm] Handle empty .gitmodules file R=yiwzhang@google.com Bug: 372697507 Change-Id: I6ac59b762fedd328d23dcfb4f8ef328f96eb36a7 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/5923135 Reviewed-by: Yiwei Zhang Commit-Queue: Josip Sokcevic --- scm.py | 10 +++++++--- tests/scm_unittest.py | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/scm.py b/scm.py index 7cbf0ea35..1793b400f 100644 --- a/scm.py +++ b/scm.py @@ -1113,9 +1113,13 @@ class GIT(object): """ if not os.path.exists(os.path.join(repo_root, '.gitmodules')): return [] - config_output = GIT.Capture( - ['config', '--file', '.gitmodules', '--get-regexp', 'path'], - cwd=repo_root) + try: + config_output = GIT.Capture( + ['config', '--file', '.gitmodules', '--get-regexp', 'path'], + cwd=repo_root) + except subprocess2.CalledProcessError: + # Git exits with 1 if no config matches are found. + return [] assert isinstance(config_output, str) return [ line.split()[-1].replace('/', os.path.sep) diff --git a/tests/scm_unittest.py b/tests/scm_unittest.py index df8633561..738027bd0 100755 --- a/tests/scm_unittest.py +++ b/tests/scm_unittest.py @@ -149,6 +149,15 @@ class GitWrapperTestCase(unittest.TestCase): def testListSubmodules_missing(self): self.assertEqual(scm.GIT.ListSubmodules('root'), []) + @mock.patch('os.path.exists', return_value=True) + @mock.patch('scm.GIT.Capture') + def testListSubmodules_empty(self, mockCapture, *_mock): + mockCapture.side_effect = [ + subprocess2.CalledProcessError(1, '', '', '', ''), + ] + self.assertEqual(scm.GIT.ListSubmodules('root'), []) + + class RealGitTest(fake_repos.FakeReposTestBase): def setUp(self):