From 3c972b9039766f02dd274a3620082b329d1f3ec3 Mon Sep 17 00:00:00 2001 From: iannucci Date: Wed, 17 Aug 2016 13:24:10 -0700 Subject: [PATCH] Add --issue flag to git cl status. R=phajdan.jr@chromium.org, vadimsh@chromium.org BUG= Review-Url: https://codereview.chromium.org/2250323003 --- git_cl.py | 13 ++++++++++++- tests/git_cl_test.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/git_cl.py b/git_cl.py index 399f9ed036..44d4e28c65 100755 --- a/git_cl.py +++ b/git_cl.py @@ -3284,18 +3284,29 @@ def CMDstatus(parser, args): help='print only specific field (desc|id|patch|status|url)') parser.add_option('-f', '--fast', action='store_true', help='Do not retrieve review status') + parser.add_option('-i', '--issue', type=int, + help='Operate on this issue number instead of the current' + ' branch\'s implicit issue. Only valid with --field.') parser.add_option( '-j', '--maxjobs', action='store', type=int, help='The maximum number of jobs to use when retrieving review status') auth.add_auth_options(parser) + _add_codereview_select_options(parser) options, args = parser.parse_args(args) + _process_codereview_select_options(parser, options) if args: parser.error('Unsupported args: %s' % args) auth_config = auth.extract_auth_config_from_options(options) + if options.issue is not None: + if not options.field or not options.forced_codereview: + parser.error('--issue may only be specified in conjunction with --field' + ' and either --rietveld or --gerrit') + if options.field: - cl = Changelist(auth_config=auth_config) + cl = Changelist(auth_config=auth_config, issue=options.issue, + codereview=options.forced_codereview) if options.field.startswith('desc'): print(cl.GetDescription()) elif options.field == 'id': diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py index 378525a005..3e31a60a81 100755 --- a/tests/git_cl_test.py +++ b/tests/git_cl_test.py @@ -1532,6 +1532,42 @@ class TestGitCl(TestCase): 'description', 'https://code.review.org/123123', '-d', '--rietveld'])) self.assertEqual('foobar\n', out.getvalue()) + def test_StatusFieldOverrideIssueMissingArgs(self): + out = StringIO.StringIO() + self.mock(git_cl.sys, 'stderr', out) + + try: + self.assertEqual(git_cl.main(['status', '--issue', '1']), 0) + except SystemExit as ex: + self.assertEqual(ex.code, 2) + self.assertRegexpMatches(out.getvalue(), r'--issue may only be specified') + + out = StringIO.StringIO() + self.mock(git_cl.sys, 'stderr', out) + + try: + self.assertEqual(git_cl.main(['status', '--issue', '1', '--rietveld']), 0) + except SystemExit as ex: + self.assertEqual(ex.code, 2) + self.assertRegexpMatches(out.getvalue(), r'--issue may only be specified') + + def test_StatusFieldOverrideIssue(self): + out = StringIO.StringIO() + self.mock(git_cl.sys, 'stdout', out) + + def assertIssue(cl_self, *_args): + self.assertEquals(cl_self.issue, 1) + return 'foobar' + + self.mock(git_cl.Changelist, 'GetDescription', assertIssue) + self.calls = [ + ((['git', 'config', 'rietveld.autoupdate'],), ''), + ((['git', 'config', 'rietveld.server'],), ''), + ((['git', 'config', 'rietveld.server'],), ''), + ] + git_cl.main(['status', '--issue', '1', '--rietveld', '--field', 'desc']) + self.assertEqual(out.getvalue(), 'foobar\n') + def test_description_gerrit(self): out = StringIO.StringIO() self.mock(git_cl.sys, 'stdout', out)