git-cl: Check if author exists before adding to presubmit command line.

When user.email is not configured in git, git-cl tries to call
presubmit support with --author None, which makes git-cl crash.

Bug: b/150870673
Change-Id: Idc42ba2b970340ed93e1e92f65850fc1a12336d9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2090375
Reviewed-by: Anthony Polito <apolito@google.com>
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
changes/75/2090375/2
Edward Lemur 6 years ago committed by LUCI CQ
parent 3ccfc90f50
commit 99df04e8aa

@ -1405,22 +1405,24 @@ class Changelist(object):
def _GetCommonPresubmitArgs(self, verbose, upstream): def _GetCommonPresubmitArgs(self, verbose, upstream):
args = [ args = [
'--author', self.GetAuthor(),
'--root', settings.GetRoot(), '--root', settings.GetRoot(),
'--upstream', upstream, '--upstream', upstream,
] ]
args.extend(['--verbose'] * verbose) args.extend(['--verbose'] * verbose)
author = self.GetAuthor()
gerrit_url = self.GetCodereviewServer()
issue = self.GetIssue() issue = self.GetIssue()
patchset = self.GetPatchset() patchset = self.GetPatchset()
gerrit_url = self.GetCodereviewServer() if author:
args.extend(['--author', author])
if gerrit_url:
args.extend(['--gerrit_url', gerrit_url])
if issue: if issue:
args.extend(['--issue', str(issue)]) args.extend(['--issue', str(issue)])
if patchset: if patchset:
args.extend(['--patchset', str(patchset)]) args.extend(['--patchset', str(patchset)])
if gerrit_url:
args.extend(['--gerrit_url', gerrit_url])
return args return args

@ -2842,13 +2842,13 @@ class ChangelistTest(unittest.TestCase):
self.assertEqual(expected_results, results) self.assertEqual(expected_results, results)
subprocess2.Popen.assert_called_once_with([ subprocess2.Popen.assert_called_once_with([
'vpython', 'PRESUBMIT_SUPPORT', 'vpython', 'PRESUBMIT_SUPPORT',
'--author', 'author',
'--root', 'root', '--root', 'root',
'--upstream', 'upstream', '--upstream', 'upstream',
'--verbose', '--verbose', '--verbose', '--verbose',
'--author', 'author',
'--gerrit_url', 'https://chromium-review.googlesource.com',
'--issue', '123456', '--issue', '123456',
'--patchset', '7', '--patchset', '7',
'--gerrit_url', 'https://chromium-review.googlesource.com',
'--commit', '--commit',
'--may_prompt', '--may_prompt',
'--parallel', '--parallel',
@ -2864,6 +2864,49 @@ class ChangelistTest(unittest.TestCase):
'exit_code': 0, 'exit_code': 0,
}) })
def testRunHook_FewerOptions(self):
expected_results = {
'more_cc': ['more@example.com', 'cc@example.com'],
'should_continue': True,
}
gclient_utils.FileRead.return_value = json.dumps(expected_results)
git_cl.time_time.side_effect = [100, 200]
mockProcess = mock.Mock()
mockProcess.wait.return_value = 0
subprocess2.Popen.return_value = mockProcess
git_cl.Changelist.GetAuthor.return_value = None
git_cl.Changelist.GetIssue.return_value = None
git_cl.Changelist.GetPatchset.return_value = None
git_cl.Changelist.GetCodereviewServer.return_value = None
cl = git_cl.Changelist()
results = cl.RunHook(
committing=False,
may_prompt=False,
verbose=0,
parallel=False,
upstream='upstream',
description='description',
all_files=False)
self.assertEqual(expected_results, results)
subprocess2.Popen.assert_called_once_with([
'vpython', 'PRESUBMIT_SUPPORT',
'--root', 'root',
'--upstream', 'upstream',
'--upload',
'--json_output', '/tmp/fake-temp2',
'--description_file', '/tmp/fake-temp1',
])
gclient_utils.FileWrite.assert_called_once_with(
'/tmp/fake-temp1', 'description')
metrics.collector.add_repeated('sub_commands', {
'command': 'presubmit',
'execution_time': 100,
'exit_code': 0,
})
@mock.patch('sys.exit', side_effect=SystemExitMock) @mock.patch('sys.exit', side_effect=SystemExitMock)
def testRunHook_Failure(self, _mock): def testRunHook_Failure(self, _mock):
git_cl.time_time.side_effect = [100, 200] git_cl.time_time.side_effect = [100, 200]
@ -2890,13 +2933,13 @@ class ChangelistTest(unittest.TestCase):
subprocess2.Popen.assert_called_once_with([ subprocess2.Popen.assert_called_once_with([
'vpython', 'PRESUBMIT_SUPPORT', 'vpython', 'PRESUBMIT_SUPPORT',
'--author', 'author',
'--root', 'root', '--root', 'root',
'--upstream', 'upstream', '--upstream', 'upstream',
'--verbose', '--verbose', '--verbose', '--verbose',
'--author', 'author',
'--gerrit_url', 'https://chromium-review.googlesource.com',
'--issue', '123456', '--issue', '123456',
'--patchset', '7', '--patchset', '7',
'--gerrit_url', 'https://chromium-review.googlesource.com',
'--post_upload', '--post_upload',
'--description_file', '/tmp/fake-temp1', '--description_file', '/tmp/fake-temp1',
]) ])

Loading…
Cancel
Save