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"
    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.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.