Support --push-option in upload subcommand

Change-Id: I44836f8c66ded5a96cbf5431912e027e681f6529
diff --git a/project.py b/project.py
index e1a844e..83dcf55 100644
--- a/project.py
+++ b/project.py
@@ -180,7 +180,8 @@
                       private=False,
                       wip=False,
                       dest_branch=None,
-                      validate_certs=True):
+                      validate_certs=True,
+                      push_options=None):
     self.project.UploadForReview(self.name,
                                  people,
                                  auto_topic=auto_topic,
@@ -188,7 +189,8 @@
                                  private=private,
                                  wip=wip,
                                  dest_branch=dest_branch,
-                                 validate_certs=validate_certs)
+                                 validate_certs=validate_certs,
+                                 push_options=push_options)
 
   def GetPublishedRefs(self):
     refs = {}
@@ -1117,7 +1119,8 @@
                       private=False,
                       wip=False,
                       dest_branch=None,
-                      validate_certs=True):
+                      validate_certs=True,
+                      push_options=None):
     """Uploads the named branch for code review.
     """
     if branch is None:
@@ -1155,6 +1158,10 @@
         rp.append('--cc=%s' % sq(e))
       cmd.append('--receive-pack=%s' % " ".join(rp))
 
+    for push_option in (push_options or []):
+      cmd.append('-o')
+      cmd.append(push_option)
+
     cmd.append(url)
 
     if dest_branch.startswith(R_HEADS):
diff --git a/subcmds/upload.py b/subcmds/upload.py
index 60feff7..77eaf81 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -160,6 +160,10 @@
     p.add_option('-w', '--wip',
                  action='store_true', dest='wip', default=False,
                  help='If specified, upload as a work-in-progress change.')
+    p.add_option('-o', '--push-option',
+                 type='string', action='append', dest='push_options',
+                 default=[],
+                 help='Additional push options to transmit')
     p.add_option('-D', '--destination', '--dest',
                  type='string', action='store', dest='dest_branch',
                  metavar='BRANCH',
@@ -393,7 +397,8 @@
                                private=opt.private,
                                wip=opt.wip,
                                dest_branch=destination,
-                               validate_certs=opt.validate_certs)
+                               validate_certs=opt.validate_certs,
+                               push_options=opt.push_options)
 
         branch.uploaded = True
       except UploadError as e: