Merge "Don't use `unzip -t` when `unzip -l` will do."
diff --git a/tools/repo_pull/gerrit.py b/tools/repo_pull/gerrit.py
index 054e436..aca5c0f 100755
--- a/tools/repo_pull/gerrit.py
+++ b/tools/repo_pull/gerrit.py
@@ -200,6 +200,14 @@
     return _make_json_post_request(url_opener, url, data)
 
 
+def submit(url_opener, gerrit_url, change_id):
+    """Submit a change list."""
+
+    url = '{}/a/changes/{}/submit'.format(gerrit_url, change_id)
+
+    return _make_json_post_request(url_opener, url, {})
+
+
 def abandon(url_opener, gerrit_url, change_id, message):
     """Abandon a change list."""
 
diff --git a/tools/repo_pull/repo_review.py b/tools/repo_pull/repo_review.py
index bf97093..24f5da6 100755
--- a/tools/repo_pull/repo_review.py
+++ b/tools/repo_pull/repo_review.py
@@ -32,7 +32,8 @@
 
 from gerrit import (
     add_reviewers, delete_reviewer, abandon, create_url_opener_from_args,
-    delete_topic, query_change_lists, set_hashtags, set_review, set_topic)
+    delete_topic, query_change_lists, set_hashtags, set_review, set_topic,
+    submit)
 
 
 def _get_labels_from_args(args):
@@ -99,6 +100,8 @@
                         help='Labels to be added')
     parser.add_argument('-m', '--message', help='Review message')
 
+    parser.add_argument('--submit', action='store_true', help='Submit a CL')
+
     parser.add_argument('--abandon', help='Abandon a CL with a message')
 
     parser.add_argument('--add-hashtag', action='append', help='Add hashtag')
@@ -124,6 +127,8 @@
     """Determine whether a task has been specified in the arguments."""
     if args.label is not None or args.message is not None:
         return True
+    if args.submit:
+        return True
     if args.abandon is not None:
         return True
     if args.add_hashtag or args.remove_hashtag:
@@ -183,9 +188,10 @@
     # Parse and check the command line options
     args = _parse_args()
     if not _has_task(args):
-        print('error: Either --label, --message, --abandon, --add-hashtag, '
-              '--remove-hashtag, --set-topic, --delete-topic, --add-reviewer '
-              'or --delete-reviewer must be specified', file=sys.stderr)
+        print('error: Either --label, --message, --submit, --abandon, '
+              '--add-hashtag, --remove-hashtag, --set-topic, --delete-topic, '
+              '--add-reviewer or --delete-reviewer must be specified',
+              file=sys.stderr)
         sys.exit(1)
 
     # Convert label arguments
@@ -226,6 +232,9 @@
         if args.delete_topic:
             _do_task(change, delete_topic, url_opener, args.gerrit,
                      change['id'], expected_http_code=204, errors=errors)
+        if args.submit:
+            _do_task(change, submit, url_opener, args.gerrit, change['id'],
+                     errors=errors)
         if args.abandon:
             _do_task(change, abandon, url_opener, args.gerrit, change['id'],
                      args.abandon, errors=errors)