# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

#### CATEGORY=Code submission and review
#### EXECUTABLE=${FUCHSIA_DIR}/tools/devshell/contrib/gerrit-submit-lib/python_wrapper.sh
### Submits chains of CLs to Gerrit
## usage: submit.py [-h] [--host HOST] [--num-retries N] [-n] [-t] [--ignore-comments] CL
##
## Submit a chain of CLs, specified by giving the CL number of the end of the
## chain. The command will poll indefinitely until the chain is submitted or an
## error is detected.
##
## The tool can be safely cancelled at any time. When restarted, it will resume
## where it left off.
##
## For example, given a chain of three CLs:
##
##   101: Start hacking on 'foo'.
##   102: More hacking on 'foo'.
##   103: Finish hacking on 'foo'.
##
## The command:
##
##   fx gerrit-submit 103
##
## will:
##
##   1. Add a CQ+1 vote to all the CLs, to start testing them.
##   2. Add a CQ+2 vote for the first CL, and wait for it to be submitted.
##   3. Add a CQ+2 vote for the second CL, and wait for it to be submitted.
##   4. Add a CQ+2 vote for the last CL, and wait for it to be submitted.
##
## Adding a CQ+1 to every CL at the beginning speeds up submission: CQ won't
## need to re-test intermediate CLs if they are not modified in the meantime.
##
## If any CL is not ready to submit (for example, it is missing a vote, or has
## unresolved comments), the tool will abort early.
##
## By default, the tool will use the "fuchsia-review.googlesource.com" Gerrit
## instances. Other instances can be specified using the "--host" parameter:
##
##    fx gerrit-submit --host myteam-review.googlesource.com 12345
##
## positional arguments:
##   CL                 Gerrit CL to submit. May either be a CL number or Gerrit
##                      Change-ID.
##
## optional arguments:
##   -h, --help         show this help message and exit
##   --host HOST        Gerrit host to connect to.
##                      Defaults to "fuchsia-review.googlesource.com".
##   --num-retries N    number of times to retry a failed submission.
##                      Defaults to 0.
##   -n, --dry-run      If specified, show the set of CLs that would be
##                      submitted, but dont actually submit.
##   -t, --batch        If specified, dont prompt before starting submit.
##   --ignore-comments  If specified, allow submission of CLs that still have
##                      unresolved comments on them.
