Revert "git cl upload for Gerrit: use push options instead of refspec."

This reverts commit 0267fd2c290a4ca2300d58abf53af32f8324e285.

Reason for revert: seems to have changed some behavior as reported by SKIA.

Original change's description:
> git cl upload for Gerrit: use push options instead of refspec.
> 
> This removes limitation of no special chars in patchset titles.
> 
> BUG=chromium:663787,chromium:707963,gerrit:5184
> R=​sergiyb@chromium.org,agable@chromium.org
> TEST=uploaded this CL using depot_tools with this patch :)
> 
> Change-Id: I5d684d0a0aa286a45ff99cca6d57aefa8436cd0f
> Reviewed-on: https://chromium-review.googlesource.com/468926
> Commit-Queue: Andrii Shyshkalov <tandrii@chromium.org>
> Reviewed-by: Sergiy Byelozyorov <sergiyb@google.com>
> 

TBR=agable@chromium.org,sergiyb@google.com,tandrii@chromium.org,sergiyb@chromium.org,borenet@chromium.org,chromium-reviews@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=chromium:663787,chromium:707963,gerrit:5184

Change-Id: I3306091b14b97a200150389d0480b69120af8c61
Reviewed-on: https://chromium-review.googlesource.com/469006
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
Commit-Queue: Andrii Shyshkalov <tandrii@chromium.org>
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index 32c6c29..cfae719 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -7,7 +7,6 @@
 
 import contextlib
 import datetime
-import itertools
 import json
 import logging
 import os
@@ -1416,14 +1415,13 @@
   def _gerrit_upload_calls(cls, description, reviewers, squash,
                            squash_mode='default',
                            expected_upstream_ref='origin/refs/heads/master',
-                           push_opts=None, title=None, notify=False,
+                           ref_suffix='', title=None, notify=False,
                            post_amend_description=None, issue=None, cc=None,
                            git_mirror=None):
     if post_amend_description is None:
       post_amend_description = description
     calls = []
     cc = cc or []
-    push_opts = push_opts or []
 
     if squash_mode == 'default':
       calls.extend([
@@ -1445,14 +1443,14 @@
                    'fake_ancestor_sha..HEAD'],),
                   description)]
       if squash:
-        title = 'Initial upload'
+        title = 'Initial_upload'
     else:
       if not title:
         calls += [
             ((['git', 'show', '-s', '--format=%s', 'HEAD'],), ''),
             (('ask_for_data', 'Title for patchset []: '), 'User input'),
         ]
-        title = 'User input'
+        title = 'User_input'
     if not git_footers.get_footer_change_id(description) and not squash:
       calls += [
           # DownloadGerritHook(False)
@@ -1499,10 +1497,20 @@
         ]
 
     if title:
-      push_opts += ['m=' + title]
+      if ref_suffix:
+        ref_suffix += ',m=' + title
+      else:
+        ref_suffix = '%m=' + title
 
-    push_opts += ['notify=%s' % ('ALL' if notify else 'NONE')]
-    push_opts += ['r=%s' % email for email in sorted(reviewers or [])]
+    notify_suffix = 'notify=%s' % ('ALL' if notify else 'NONE')
+    if ref_suffix:
+      ref_suffix += ',' + notify_suffix
+    else:
+      ref_suffix = '%' + notify_suffix
+
+    if reviewers:
+      ref_suffix += ',' + ','.join('r=%s' % email
+                                   for email in sorted(reviewers))
 
     if git_mirror is None:
       calls += [
@@ -1521,23 +1529,22 @@
       ]
 
     calls += [
-        ((['git', 'push'] +
-          list(itertools.chain(*(['-o', opt] for opt in sorted(push_opts)))) +
-          ['https://chromium.googlesource.com/yyy/zzz',
-           ref_to_push + ':refs/for/refs/heads/master'],),
+        ((['git', 'push',
+           'https://chromium.googlesource.com/yyy/zzz',
+           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/123456 XXX.\n'
-          'remote:\n'
-          'To https://chromium.googlesource.com/yyy/zzz\n'
-          ' * [new branch]      hhhh -> refs/for/refs/heads/master\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/123456 XXX.\n'
+         'remote:\n'
+         'To https://chromium.googlesource.com/yyy/zzz\n'
+         ' * [new branch]      hhhh -> refs/for/refs/heads/master\n')),
         ]
     if squash:
       calls += [
@@ -1565,7 +1572,7 @@
       squash=True,
       squash_mode=None,
       expected_upstream_ref='origin/refs/heads/master',
-      push_opts=None,
+      ref_suffix='',
       title=None,
       notify=False,
       post_amend_description=None,
@@ -1612,7 +1619,7 @@
           description, reviewers, squash,
           squash_mode=squash_mode,
           expected_upstream_ref=expected_upstream_ref,
-          push_opts=push_opts, title=title, notify=notify,
+          ref_suffix=ref_suffix, title=title, notify=notify,
           post_amend_description=post_amend_description,
           issue=issue, cc=cc, git_mirror=git_mirror)
     # Uncomment when debugging.
@@ -1645,6 +1652,20 @@
         squash=False,
         squash_mode='override_nosquash')
 
+  def test_gerrit_patch_bad_chars(self):
+    self.mock(git_cl.sys, 'stdout', StringIO.StringIO())
+    self._run_gerrit_upload_test(
+        ['-f', '-t', 'Don\'t put bad cha,.rs'],
+        'desc\n\nBUG=\n\nChange-Id: I123456789',
+        squash=False,
+        squash_mode='override_nosquash',
+        title='Dont_put_bad_chars')
+    self.assertIn(
+        'WARNING: Patchset title may only contain alphanumeric chars '
+        'and spaces. You can edit it in the UI. See https://crbug.com/663787.\n'
+        'Cleaned up title: Dont put bad chars\n',
+        git_cl.sys.stdout.getvalue())
+
   def test_gerrit_reviewers_cmd_line(self):
     self._run_gerrit_upload_test(
         ['-r', 'foo@example.com', '--send-mail'],
@@ -1663,7 +1684,7 @@
         ['reviewer@example.com', 'another@example.com'],
         squash=False,
         squash_mode='override_nosquash',
-        push_opts=['l=Code-Review+1'],
+        ref_suffix='%l=Code-Review+1',
         cc=['more@example.com', 'people@example.com'])
 
   def test_gerrit_upload_squash_first_is_default(self):