From 02e70b435732a41d3d251f7c861110c6ee91f65b Mon Sep 17 00:00:00 2001 From: Kenneth Russell Date: Mon, 7 Aug 2023 22:09:29 +0000 Subject: [PATCH] Handle error conditions when joining scm.GIT.RefToRemoteRef. Detect failure of scm.GIT.RefToRemoteRef and raise an error before attempting to join its results as a string. This makes certain repository errors diagnosable. Fixed: 1470430 Change-Id: I19cd86d9ed088f5cd511e4c9d7dbe5844165c7cf Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4754237 Auto-Submit: Kenneth Russell Commit-Queue: Joanna Wang Reviewed-by: Joanna Wang --- gclient_scm.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gclient_scm.py b/gclient_scm.py index 64db8a576..8e2fbc162 100644 --- a/gclient_scm.py +++ b/gclient_scm.py @@ -398,6 +398,22 @@ class GitWrapper(SCMWrapper): # 4. Return the new patch_revs to process. return patch_revs_to_process + def _ref_to_remote_ref(self, target_rev): + """Helper function for scm.GIT.RefToRemoteRef with error checking. + + Joins the results of scm.GIT.RefToRemoteRef into a string, but raises a + comprehensible error if RefToRemoteRef fails. + + Args: + target_rev: a ref somewhere under refs/. + """ + tmp_ref = scm.GIT.RefToRemoteRef(target_rev, self.remote) + if not tmp_ref: + raise gclient_utils.Error( + 'Failed to turn target revision %r in repo %r into remote ref' % + (target_rev, self.checkout_path)) + return ''.join(tmp_ref) + def apply_patch_ref(self, patch_repo, patch_rev, target_rev, options, file_list): # type: (str, str, str, optparse.Values, Collection[str]) -> str @@ -452,7 +468,7 @@ class GitWrapper(SCMWrapper): # to find the corresponding remote ref for it, since |target_rev| might # point to a local ref which is not up to date with the corresponding # remote ref. - remote_ref = ''.join(scm.GIT.RefToRemoteRef(target_rev, self.remote)) + remote_ref = self._ref_to_remote_ref(target_rev) self.Print('Trying the corresponding remote ref for %r: %r\n' % ( target_rev, remote_ref)) if scm.GIT.IsValidRevision(self.checkout_path, remote_ref): @@ -1045,7 +1061,7 @@ class GitWrapper(SCMWrapper): _, base_rev = gclient_utils.SplitUrlRevision(self.url) if base_rev: if base_rev.startswith('refs/'): - base_rev = ''.join(scm.GIT.RefToRemoteRef(base_rev, self.remote)) + base_rev = self._ref_to_remote_ref(base_rev) merge_base = [base_rev] self._Run( ['-c', 'core.quotePath=false', 'diff', '--name-status'] + merge_base,