Commit 768f1d88 authored by Andrii Shyshkalov's avatar Andrii Shyshkalov Committed by Commit Bot

git cl: use gnumbd config instead of PENDING_REF_PREFIX of codereview.settings.

BUG=chromium:642493,672043
R=machenbach@chromium.org,iannucci@chromium.org

Change-Id: I0abc31b95b1766fd5fd24c1379b538d0c5291011
Reviewed-on: https://chromium-review.googlesource.com/417259Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
Commit-Queue: Michael Achenbach <machenbach@chromium.org>
parent cd6a9363
......@@ -87,6 +87,12 @@ Fore = colorama.Fore
# Initialized in main()
settings = None
# Used by tests/git_cl_test.py to add extra logging.
# Inside the weirdly failing test, add this:
# >>> self.mock(git_cl, '_IS_BEING_TESTED', True)
# And scroll up to see the strack trace printed.
_IS_BEING_TESTED = False
def DieWithError(message):
print(message, file=sys.stderr)
......@@ -1028,19 +1034,6 @@ class Settings(object):
return RunGit(['config', param], **kwargs).strip()
def ShouldGenerateGitNumberFooters():
"""Decides depending on codereview.settings file in the current checkout HEAD.
"""
# TODO(tandrii): this has to be removed after Rietveld is read-only.
# see also bugs http://crbug.com/642493 and http://crbug.com/600469.
cr_settings_file = FindCodereviewSettingsFile()
if not cr_settings_file:
return False
keyvals = gclient_utils.ParseCodereviewSettingsContent(
cr_settings_file.read())
return keyvals.get('GENERATE_GIT_NUMBER_FOOTERS', '').lower() == 'true'
class _GitNumbererState(object):
KNOWN_PROJECTS_WHITELIST = [
'chromium/src',
......@@ -1126,6 +1119,8 @@ class _GitNumbererState(object):
return out.strip().splitlines()
return []
enabled, disabled = map(get_opts, ['enabled', 'disabled'])
logging.info('validator config enabled %s disabled %s refglobs for '
'(this ref: %s)', enabled, disabled, ref)
if cls.match_refglobs(ref, disabled):
return False
......@@ -1152,8 +1147,13 @@ class _GitNumbererState(object):
def __init__(self, pending_prefix, validator_enabled):
# TODO(tandrii): remove pending_prefix after gnumbd is no more.
if pending_prefix:
if not pending_prefix.endswith('/'):
pending_prefix += '/'
self._pending_prefix = pending_prefix or None
self._validator_enabled = validator_enabled or False
logging.debug('_GitNumbererState(pending: %s, validator: %s)',
self._pending_prefix, self._validator_enabled)
@property
def pending_prefix(self):
......@@ -2352,7 +2352,8 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
if remote_url:
remote, remote_branch = self.GetRemoteBranch()
target_ref = GetTargetRef(remote, remote_branch, options.target_branch,
settings.GetPendingRefPrefix())
pending_prefix_check=True,
remote_url=self.GetRemoteUrl())
if target_ref:
upload_args.extend(['--target_ref', target_ref])
......@@ -2805,8 +2806,9 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase):
gerrit_remote = 'origin'
remote, remote_branch = self.GetRemoteBranch()
# Gerrit will not support pending prefix at all.
branch = GetTargetRef(remote, remote_branch, options.target_branch,
pending_prefix='')
pending_prefix_check=False)
if options.squash:
self._GerritCommitMsgHookCheck(offer_removal=not options.force)
......@@ -4248,14 +4250,17 @@ def GenerateGerritChangeId(message):
return 'I%s' % change_hash.strip()
def GetTargetRef(remote, remote_branch, target_branch, pending_prefix):
def GetTargetRef(remote, remote_branch, target_branch, pending_prefix_check,
remote_url=None):
"""Computes the remote branch ref to use for the CL.
Args:
remote (str): The git remote for the CL.
remote_branch (str): The git remote branch for the CL.
target_branch (str): The target branch specified by the user.
pending_prefix (str): The pending prefix from the settings.
pending_prefix_check (bool): If true, determines if pending_prefix should be
used.
remote_url (str): Only used for checking if pending_prefix should be used.
"""
if not (remote and remote_branch):
return None
......@@ -4297,9 +4302,12 @@ def GetTargetRef(remote, remote_branch, target_branch, pending_prefix):
'refs/heads/')
elif remote_branch.startswith('refs/remotes/branch-heads'):
remote_branch = remote_branch.replace('refs/remotes/', 'refs/')
# If a pending prefix exists then replace refs/ with it.
if pending_prefix:
remote_branch = remote_branch.replace('refs/', pending_prefix)
if pending_prefix_check:
# If a pending prefix exists then replace refs/ with it.
state = _GitNumbererState.load(remote_url, remote_branch)
if state.pending_prefix:
remote_branch = remote_branch.replace('refs/', state.pending_prefix)
return remote_branch
......@@ -4635,11 +4643,19 @@ def SendUpstream(parser, args, cmd):
RunGit(['cherry-pick', cherry_pick_commit])
if cmd == 'land':
remote, branch = cl.FetchUpstreamTuple(cl.GetBranch())
logging.debug('remote: %s, branch %s', remote, branch)
mirror = settings.GetGitMirror(remote)
pushurl = mirror.url if mirror else remote
pending_prefix = settings.GetPendingRefPrefix()
if mirror:
pushurl = mirror.url
git_numberer = _GitNumbererState.load(pushurl, branch)
else:
pushurl = remote # Usually, this is 'origin'.
git_numberer = _GitNumbererState.load(
RunGit(['config', 'remote.%s.url' % remote]).strip(), branch)
pending_prefix = git_numberer.pending_prefix
if ShouldGenerateGitNumberFooters():
if git_numberer.should_git_number:
# TODO(tandrii): run git fetch in a loop + autorebase when there there
# is no pending ref to push to?
logging.debug('Adding git number footers')
......@@ -4699,6 +4715,12 @@ def SendUpstream(parser, args, cmd):
revision = re.match(
'.*?\nCommitted r(\\d+)', output, re.DOTALL).group(1)
logging.debug(output)
except: # pylint: disable=W0702
if _IS_BEING_TESTED:
logging.exception('this is likely your ACTUAL cause of test failure.\n'
+ '-' * 30 + '8<' + '-' * 30)
logging.error('\n' + '-' * 30 + '8<' + '-' * 30 + '\n\n\n')
raise
finally:
# And then swap back to the original branch and clean up.
RunGit(['checkout', '-q', cl.GetBranch()])
......@@ -4721,7 +4743,6 @@ def SendUpstream(parser, args, cmd):
killed = True
if cl.GetIssue():
# TODO(tandrii): figure out story of to pending + git numberer.
to_pending = ' to pending queue' if pushed_to_pending else ''
viewvc_url = settings.GetViewVCUrl()
if not to_pending:
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment