@ -795,7 +795,8 @@ class TestGitCl(TestCase):
]
@classmethod
def _gerrit_ensure_auth_calls ( cls , issue = None , skip_auth_check = False ) :
def _gerrit_ensure_auth_calls (
cls , issue = None , skip_auth_check = False , short_hostname = ' chromium ' ) :
cmd = [ ' git ' , ' config ' , ' --bool ' , ' gerrit.skip-ensure-authenticated ' ]
if skip_auth_check :
return [ ( ( cmd , ) , ' true ' ) ]
@ -809,14 +810,14 @@ class TestGitCl(TestCase):
( ( [ ' git ' , ' config ' , ' branch.master.merge ' ] , ) , ' refs/heads/master ' ) ,
( ( [ ' git ' , ' config ' , ' branch.master.remote ' ] , ) , ' origin ' ) ,
( ( [ ' git ' , ' config ' , ' remote.origin.url ' ] , ) ,
' https:// chromium.googlesource.com/my/repo' ) ,
' https:// %s .googlesource.com/my/repo ' % short_hostname ) ,
] )
return calls
@classmethod
def _gerrit_base_calls ( cls , issue = None , fetched_description = None ,
fetched_status = None , other_cl_owner = None ,
custom_cl_base = None ):
custom_cl_base = None , short_hostname = ' chromium ' ):
calls = cls . _is_gerrit_calls ( True )
calls + = [
( ( [ ' git ' , ' symbolic-ref ' , ' HEAD ' ] , ) , ' master ' ) ,
@ -838,11 +839,12 @@ class TestGitCl(TestCase):
]
# Calls to verify branch point is ancestor
calls + = cls . _gerrit_ensure_auth_calls ( issue = issue )
calls + = cls . _gerrit_ensure_auth_calls (
issue = issue , short_hostname = short_hostname )
if issue :
calls + = [
( ( ' GetChangeDetail ' , ' chromium -review.googlesource.com' ,
( ( ' GetChangeDetail ' , ' %s -review.googlesource.com' % short_hostname ,
' my %2F repo~123456 ' ,
[ ' DETAILED_ACCOUNTS ' , ' CURRENT_REVISION ' , ' CURRENT_COMMIT ' , ' LABELS ' ]
) ,
@ -858,9 +860,9 @@ class TestGitCl(TestCase):
]
if fetched_status == ' ABANDONED ' :
calls + = [
( ( ' DieWithError ' , ' Change https:// chromium -review.googlesource.com/'
( ( ' DieWithError ' , ' Change https:// %s -review.googlesource.com/'
' 123456 has been abandoned, new uploads are not '
' allowed ' ) , SystemExitMock ( ) ) ,
' allowed ' % short_hostname ) , SystemExitMock ( ) ) ,
]
return calls
if other_cl_owner :
@ -902,7 +904,8 @@ class TestGitCl(TestCase):
expected_upstream_ref = ' origin/refs/heads/master ' ,
title = None , notify = False ,
post_amend_description = None , issue = None , cc = None ,
custom_cl_base = None , tbr = None ) :
custom_cl_base = None , tbr = None ,
short_hostname = ' chromium ' ) :
if post_amend_description is None :
post_amend_description = description
cc = cc or [ ]
@ -1016,41 +1019,54 @@ class TestGitCl(TestCase):
calls + = [
( ( [ ' git ' , ' config ' , ' rietveld.cc ' ] , ) , ' ' ) ,
( ( ' ValidAccounts ' , ' chromium-review.googlesource.com ' ,
sorted ( reviewers ) + [ ' joe@example.com ' ,
' chromium-reviews+test-more-cc@chromium.org ' ] + cc ) ,
{
e : { ' email ' : e }
for e in ( reviewers + [ ' joe@example.com ' ] + cc )
} ) ,
]
for r in sorted ( reviewers ) :
if r != ' bad-account-or-email ' :
ref_suffix + = ' ,r= %s ' % r
reviewers . remove ( r )
for c in sorted ( [ ' joe@example.com ' ] + cc ) :
ref_suffix + = ' ,cc= %s ' % c
if c in cc :
cc . remove ( c )
if short_hostname == ' chromium ' :
# All reviwers and ccs get into ref_suffix.
for r in sorted ( reviewers ) :
ref_suffix + = ' ,r= %s ' % r
for c in sorted ( [ ' chromium-reviews+test-more-cc@chromium.org ' ,
' joe@example.com ' ] + cc ) :
ref_suffix + = ' ,cc= %s ' % c
reviewers , cc = [ ] , [ ]
else :
# TODO(crbug/877717): remove this case.
calls + = [
( ( ' ValidAccounts ' , ' %s -review.googlesource.com ' % short_hostname ,
sorted ( reviewers ) + [ ' joe@example.com ' ,
' chromium-reviews+test-more-cc@chromium.org ' ] + cc ) ,
{
e : { ' email ' : e }
for e in ( reviewers + [ ' joe@example.com ' ] + cc )
} )
]
for r in sorted ( reviewers ) :
if r != ' bad-account-or-email ' :
ref_suffix + = ' ,r= %s ' % r
reviewers . remove ( r )
for c in sorted ( [ ' joe@example.com ' ] + cc ) :
ref_suffix + = ' ,cc= %s ' % c
if c in cc :
cc . remove ( c )
calls . append ( (
( [ ' git ' , ' push ' ,
' https://chromium.googlesource.com/my/repo ' ,
' https:// %s .googlesource.com/my/repo ' % short_hostname ,
ref_to_push + ' :refs/for/refs/heads/master ' + ref_suffix ] , ) ,
( ' remote: \n '
' remote: Processing changes: ( \ ) \n '
' remote: Processing changes: (|) \n '
' remote: Processing changes: (/) \n '
' remote: Processing changes: (-) \n '
' remote: Processing changes: new: 1 (/) \n '
' remote: Processing changes: new: 1, done \n '
' remote: \n '
' remote: New Changes: \n '
' remote: https://chromium-review.googlesource.com/#/c/my/repo/+/123456 '
' XXX \n '
' remote: \n '
' To https://chromium.googlesource.com/my/repo \n '
' * [new branch] hhhh -> refs/for/refs/heads/master \n ' )
( ( ' remote: \n '
' remote: Processing changes: ( \ ) \n '
' remote: Processing changes: (|) \n '
' remote: Processing changes: (/) \n '
' remote: Processing changes: (-) \n '
' remote: Processing changes: new: 1 (/) \n '
' remote: Processing changes: new: 1, done \n '
' remote: \n '
' remote: New Changes: \n '
' remote: https:// %s -review.googlesource.com/#/c/my/repo/+/123456 '
' XXX \n '
' remote: \n '
' To https:// %s .googlesource.com/my/repo \n '
' * [new branch] hhhh -> refs/for/refs/heads/master \n '
) % ( short_hostname , short_hostname ) )
) )
if squash :
calls + = [
@ -1061,7 +1077,8 @@ class TestGitCl(TestCase):
( ( [ ' git ' , ' config ' , ' branch.master.gerritsquashhash ' ,
' abcdef0123456789 ' ] , ) , ' ' ) ,
]
if squash :
# TODO(crbug/877717): this should never be used.
if squash and short_hostname != ' chromium ' :
calls + = [
( ( ' AddReviewers ' ,
' chromium-review.googlesource.com ' , ' my %2F repo~123456 ' ,
@ -1112,7 +1129,8 @@ class TestGitCl(TestCase):
fetched_status = None ,
other_cl_owner = None ,
custom_cl_base = None ,
tbr = None ) :
tbr = None ,
short_hostname = ' chromium ' ) :
""" Generic gerrit upload test framework. """
if squash_mode is None :
if ' --no-squash ' in upload_args :
@ -1140,7 +1158,8 @@ class TestGitCl(TestCase):
fetched_description = description ,
fetched_status = fetched_status ,
other_cl_owner = other_cl_owner ,
custom_cl_base = custom_cl_base )
custom_cl_base = custom_cl_base ,
short_hostname = short_hostname )
if fetched_status != ' ABANDONED ' :
self . mock ( tempfile , ' NamedTemporaryFile ' , MakeNamedTemporaryFileMock (
expected_content = description ) )
@ -1152,7 +1171,8 @@ class TestGitCl(TestCase):
title = title , notify = notify ,
post_amend_description = post_amend_description ,
issue = issue , cc = cc ,
custom_cl_base = custom_cl_base , tbr = tbr )
custom_cl_base = custom_cl_base , tbr = tbr ,
short_hostname = short_hostname )
# Uncomment when debugging.
# print '\n'.join(map(lambda x: '%2i: %s' % x, enumerate(self.calls)))
git_cl . main ( [ ' upload ' ] + upload_args )
@ -1182,6 +1202,16 @@ class TestGitCl(TestCase):
squash = False ,
squash_mode = ' override_nosquash ' )
def test_gerrit_no_reviewer_non_chromium_host ( self ) :
# TODO(crbug/877717): remove this test case.
self . _run_gerrit_upload_test (
[ ] ,
' desc \n \n BUG= \n \n Change-Id: I123456789 \n ' ,
[ ] ,
squash = False ,
squash_mode = ' override_nosquash ' ,
short_hostname = ' other ' )
def test_gerrit_patchset_title_special_chars ( self ) :
self . mock ( git_cl . sys , ' stdout ' , StringIO . StringIO ( ) )
self . _run_gerrit_upload_test (