Automerger Configuration
======================

The configuration of the automerger plugin is done on the project level in
the `automerger.config` file of the project.

```
  [global]
    automergeLabel = Code-Review
    hostName = https://hostname.example.com
    conflictMessage = Merge conflict found on ${branch}\n\
" # Example of multiline conflict message"
    manifestConflictMessage = Conflict found on platform/manifest
    manifestProject = platform/manifest
    manifestFile = default.xml
    alwaysBlankMerge = .*SKIP ME ALWAYS.*
    blankMerge = .*RESTRICT AUTOMERGE.*
    blankMerge = .*SKIP UNLESS MERGEALL SET.*
    missingDownstreamsMessage = there is no ${missingDownstreams}

  [automerger "branch1:branch2"]
    setProjects = some/project
    addProjects = some/other/project
    ignoreProjects = some/ignored/project
    mergeAll = True
    ignoreSourceManifest = False
```

global.automergeLabel
: Label to vote minAutomergeVote on when there is a merge conflict.

  When the automerger detects a merge conflict from one branch to another, it
  will vote minAutomergeVote on this label.

global.minAutomergeVote
: Value to vote on a failed automerge.

  When the automerger detects a merge conflict from one branch to another, it
  will vote minAutomergeVote for the configured automergeLabel.

  Will not vote if disableMinAutomergeVote is true.

global.disableMinAutomergeVote
: Whether to vote on a failed automerge.

  If true, will not vote minAutomergeVote on a failed downstream merge.
  Defaults to false.

global.hostName
: Hostname to use in a custom conflict message.

  The automerger will attempt to use the canonicalWebUrl to fill in the
  hostname. However, if it is unable to do so for whatever reason, it can be
  overriden using this field.

global.conflictMessage
: Message to comment with the automergeLabel vote if there is a merge conflict.

  When the automerger detects a merge conflict from one branch to another, it
  will vote -1 on the automergeLabel. The message on the vote can be custom
  configured to include:

  - branch
  - revision
  - hostname
  - topic
  - conflict

  For example, you could configure the automerger.config to include:

  ```
    conflictMessage = Conflict message ${conflict} found on branch ${branch}
  ```

global.manifestConflictMessage
: Like conflictMessage, but only applies to the manifestProject.

  Some messages on normal projects don't apply to manifest projects. This
  provides users the option to have a different message for manifest projects.

global.manifestProject
: Project to look for a [repo manifest][1] in.

  The automerger will attempt to look for the manifest project in this project.

global.manifestFile
: File to look for a [repo manifest][1] in.

  The automerger will attempt to look for a repo manifest in this file.

[1]: https://gerrit.googlesource.com/git-repo/

global.blankMerge
: Pattern for skipping changes.

  If the automerger matches this regex in the subject of the change, it will
  merge with "-s ours" to all downstream branches, effectively skipping the
  change.

  If mergeAll is set to True for a branch, however, it will merge downstream
  normally for that branch.

global.alwaysBlankMerge
: Pattern for always skipping changes.

  If the automerger matches this regex in the subject of the change, it will
  merge with "-s ours" to all downstream branches, effectively skipping the
  change.

  Even if mergeAll is set to True for a branch, it will still merge with
  "-s ours".

global.missingDownstreamsMessage
: Message to display when attempting to submit a change without downstreams.

  If a change has downstream branches configured for a project, but those
  downstreams have not been uploaded for review or are abandoned, this message
  will display as an error message on submit.

  The message can be custom configured to include the missing downstream
  branches.

  For example, you could configure the automerger.config to include:

  ```
    missingDownstreamsMessage = Missing downstreams ${missingDownstreams}
  ```

global.contextUserId
: User ID to use for doing all automerger operations.

  If set to a valid user ID, all automerger operations will be done using the
  credentials of this user ID instead of the credentials of the user doing the
  upstream operation.

automerger.branch1:branch2.setProjects
: Projects to automerge for.

  If setProjects is set, it overrides the default scope.

automerger.branch1:branch2.addProjects
: Projects to add on top of the projects already in scope.

  If setProjects is set, this will add projects on top of the setProjects.
  If setProjects is not set, this will add projects on top of the default scope.

automerger.branch1:branch2.ignoreProjects
: Projects to ignore on top of the projects already in scope

  If setProjects is set, this will ignore projects on top of the setProjects.
  If setProjects is not set, this will ignore projects on top of the default
  scope.

automerger.branch1:branch2.mergeAll
: If this is true, the blankMerge regex will be ignored.

  When mergeAll is true, the blankMerge regex will be ignored but the
  alwaysBlankMerge regex will still be honored.

automerger.branch1:branch2.ignoreSourceManifest
: If this is true, the default scope will be modified.

  The default scope normally includes the intersection of all projects in the
  manifest of branch1 whose revisions are branch1, and all projects in the
  manifest of branch2 whose revisions are branch2.

  If ignoreSourceManifest is true, the scope will become all projects in the
  manifest of branch2 whose revisions are branch2.