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 <kbr@chromium.org>
Commit-Queue: Joanna Wang <jojwang@chromium.org>
Reviewed-by: Joanna Wang <jojwang@chromium.org>
changes/37/4754237/2
Kenneth Russell 2 years ago committed by LUCI CQ
parent 6d0c235dae
commit 02e70b4357

@ -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,

Loading…
Cancel
Save