# 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/submit.py
### 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.
