---
title: "Gerrit 2.15 Release"
permalink: 2.15.html
hide_sidebar: true
hide_navtoggle: true
toc: true
---

Download: **[2.15.22](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.22.war)**
| [2.15.21](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.21.war)
| [2.15.19](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.19.war)
| [2.15.18](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.18.war)
| [2.15.17](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.17.war)
| [2.15.16](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.16.war)
| [2.15.15](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.15.war)
| [2.15.14](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.14.war)
| [2.15.13](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.13.war)
| [2.15.12](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.12.war)
| [2.15.11](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.11.war)
| [2.15.10](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.10.war)
| [2.15.9](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.9.war)
| [2.15.8](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.8.war)
| [2.15.7](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.7.war)
| [2.15.6](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.6.war)
| [2.15.5](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.5.war)
| [2.15.4](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.4.war)
| [2.15.3](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.3.war)
| [2.15.2](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.2.war)
| [2.15.1](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.1.war)
| [2.15](https://gerrit-releases.storage.googleapis.com/gerrit-2.15.war)

Documentation: **[2.15.22](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.22/index.html)**
| [2.15.21](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.21/index.html)
| [2.15.19](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.19/index.html)
| [2.15.18](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.18/index.html)
| [2.15.17](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.17/index.html)
| [2.15.16](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.16/index.html)
| [2.15.15](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.15/index.html)
| [2.15.14](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.14/index.html)
| [2.15.13](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.13/index.html)
| [2.15.12](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.12/index.html)
| [2.15.11](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.11/index.html)
| [2.15.10](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.10/index.html)
| [2.15.9](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.9/index.html)
| [2.15.8](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.8/index.html)
| [2.15.7](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.7/index.html)
| [2.15.6](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.6/index.html)
| [2.15.5](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.5/index.html)
| [2.15.4](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.4/index.html)
| [2.15.3](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.3/index.html)
| [2.15.2](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.2/index.html)
| [2.15.1](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.1/index.html)
| [2.15](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/index.html)

## Release Highlights

* New change workflows for changes not yet ready for full review (formerly
  Drafts).

* The new PolyGerrit UI is mature enough for most uses.

* Account data is stored in
  [NoteDb](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/config-accounts.html).

* NoteDb migration for change metadata is available for testing. However, it is
  not yet recommended for production.

* Made several improvements and additions to the documentation to help users
  find the information they need.

## Important Notes

### NoteDb migration

* NoteDb for change metadata is considered reasonably stable, and new sites use
  it by default. However, because of
  [Issue 10239](https://bugs.chromium.org/p/gerrit/issues/detail?id=10239) it
  is recommended for existing sites to stay on ReviewDb and migrate to NoteDb
  only after the upgrade to [2.16](../2.16.html).

### Schema Changes

This release contains schema changes. To upgrade:

``` sh
  java -jar gerrit.war init -d site_path
```
### Support for draft changes removed

Support for draft changes and draft patch sets has been completely removed.

In most cases, the new Work-In-Progress workflow is a suitable replacement.
Note that in the Draft workflow, an individual patch set can be a Draft.
However, in both the new Work-In-Progress and Private workflows, WIP and Private
apply to the whole change, not an individual patch set.

When upgrading from an earlier version, draft changes are migrated.
This applies to all draft changes, or changes with draft patch sets
(even if the highest patch set is not a draft), as follows:

1. The "Draft" flag is removed from all patch sets.
1. If the change has been merged or abandoned, no further action is taken.
1. Otherwise, the change is moved to one of
    * Work-In-Progress change (this is the default)
    * Private change

The upgrade process prompts (once) for what Drafts should be migrated to;
either WIP (default) or Private.

The migration means that some draft patch sets, which were previously hidden,
might now be visible to some users who could not previously view them.

Change owners can make them private again using the "Mark Private" option
in the UI, or using the REST API.

### Votes no longer changed retroactively due to permissions

Historically, Gerrit would retroactively change votes on a label when
permissions for the voting user changed. For example, if a user voted
Code-Review+2, but then later lost permission to vote +2 (for example, was
removed from a Maintainers group), all CR+2 votes by that user on open changes
would suddenly appear as CR+1. In 2.15, this retroactive behavior no longer
applies: the CR+2 votes remain CR+2, even if permissions were changed.

This new behavior makes label permissions more consistent with other
permissions: usually, permission changes don't apply retroactively (you can't
un-submit a change), and the permission is only checked at the time an action is
performed. It also fixes some technical issues and improves performance of
reindexing changes.

### Release Signatures

Starting in the 2.14.x bugfix series, all release JARs and documentations are
signed by the [Gerrit
maintainers](public-keys.md). This
policy will continue for all future releases.

### New URL Scheme

By default, all Gerrit URLs generated and used by the UI include not just the
change number but the project name as well.

* `https://gerrit.mycompany.com/1234` becomes
  `https://gerrit.mycompany.com/c/some/project/+/1234`
* `https://gerrit.mycompany.com/#/c/1234` becomes
  `https://gerrit.mycompany.com/#/c/some/project/+/1234`
* `https://gerrit.mycompany.com/changes/1234` becomes
  `https://gerrit.mycompany.com/some%2Fproject~1234`

In addition to providing more context to humans reading the URL, this new
scheme improves performance under NoteDb, and paves the way for load balancing
a multi-master installation with repository affinity.

Old URLs will continue to be supported, and simply redirect to the new URLs.

### NoteDb for Accounts

Almost all account data is now stored in
[NoteDb](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/config-accounts.html).
The account data is migrated automatically during the upgrade process by running
`gerrit.war init`.

The only account data not stored in NoteDb proper are the groups (remain in
ReviewDb) and the reviewed flags which were moved to an external database
(AccountPatchReviewDb) since [2.13](2.13.md).

For Gerrit slaves the
[branches that contain the account data](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/config-accounts.html#replication)
must be replicated.

### NoteDb for Changes

With this release, the new Gerrit storage backend,
[NoteDb](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/note-db.html),
is available for testing the new storage of change metadata. NoteDb is also the
default storage backend for new installations.

Support for ReviewDb will be removed in Gerrit 3.0. Gerrit 3.0 will only
support offline migration; to run an online migration, you must migrate to 2.16.x
on ReviewDb and then migrate to NoteDb.

### Daemon User Setup

The setup documentation now recommends setting up a user named `gerrit` instead
of `gerrit2`. This username can be anything; the choice of name doesn't affect
any functionality. However, some example commands in the documentation may
refer to the new `gerrit` user, so admins might need to tweak them to refer to
`gerrit2` instead.

### Strict validation on labels

In 2.15, posting a review including a vote on any labels that does not exist or is
outside of the permitted range based on the ACLs will now always result in a
failure of the entire operation. Previously, if the "strict labels" option was set
to disabled in the review input, votes to any invalid labels would be silently
ignored. This option has now been removed from the [REST API's ReviewInput](#rest-api)
as well as the [SSH review command](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/cmd-review.html).

CI systems that rely on the non-strict behavior of earlier Gerrit versions may
require additional configuration to avoid casting votes to labels which are
invalid for the change.

Following [feedback on the 2.15 release](https://groups.google.com/forum/?hl=en#!topic/repo-discuss/nMZo3HMgJSY)
a new configuration option `change.strictLabels` was introduced in [2.15.2](#2152)
to allow the new strict functionality to be optionally enabled. By default it is
disabled to maintain backwards compatibility with previous release.

### New limit on number of commits received by direct push

A limit is added on the number of commits Gerrit allows to be pushed
in a batch to a branch when bypassing review. The motivation is to
avoid push timeouts caused by commit validation during pushes containing
an excessive amount of new commits.

The default limit is 10000 and can be configured with the
[receive.maxBatchCommits](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/config-gerrit.html#receive.maxBatchCommits)
setting.

### Java runtime version requirement

Gerrit requires Java Runtime Environment (JRE) version 8; it is not compatible
with JRE 9 or newer yet. For more information, see
[Issue 7843](https://bugs.chromium.org/p/gerrit/issues/detail?id=7843).

### urlAlias unavailable in PolyGerrit

URL rewriting feature introduced in 2.12 via the
[`urlAlias` configuration](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/config-gerrit.html#urlAlias)
is not available in PolyGerrit and is also unavailable in future releases.
See [Issue 8054](https://bugs.chromium.org/p/gerrit/issues/detail?id=8054) for
more details.

## New Features

### PolyGerrit UI

* Implement admin interface (projects, groups and plugins).

* Refreshed UI based on material design.

* Add hashtag support.

* Add support to show uploader on change screen.

* Lots of bug fixes.

### New Workflows

#### Draft, Private, Work-In-Progress

The draft change feature has been removed, and replaced with two separate
features:

* [Private
  changes](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/intro-user.html#private-changes)
are visible only to the owner and reviewers.
* [Work-in-progress
  changes](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/intro-user.html#wip)
do not generate notifications.

#### Ignore Changes, Mark Reviewed

Changes can be [ignored, or
marked as reviewed](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/intro-user.html#ignore),
to reduce email notifications and keep dashboards cleaner.

#### Explicitly Record Reverted Changes

When a change is reverted via the "Revert" button, this fact is recorded in the
change metadata of the newly-created revert change, not just in the commit
message as in the past. A new search operator `revertof:` allows for searching
for reverts of a given change.

#### Delete Inline Comments

Individual inline comments can be deleted after the fact by site
administrators.

#### CCs Users By Email

Users may be CCed on changes by entering their email address, even if they have
not registered an account on the Gerrit server.

This feature is only available when using NoteDb.

#### Publish Comments on Push

When pushing new patch sets on a change or a series of changes, users can
configure Gerrit to automatically [publish any pending draft
comments](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/intro-user.html#publish-comments-on-push)
they have on those changes, avoiding the need to click through the web UI to
publish all comments.

#### Mark Changes Due to Rebase

When diffing two patch sets of the same change that have different parents,
some differences between the patch sets may be due to the rebase, instead of
changes between the patch set and its base. These differences are now
highlighted in the UI (PolyGerrit only), and are not counted towards the size
of diffs.

#### Improved Push Error Messages

When a push fails because the user does not have the required permission, the generic message
`(prohibited by Gerrit)` has been replaced with a detailed message describing
the exact permissions required.

### Documentation Updates

With this release, we have updated several sections of the documentation to
make it easier for users to find the information they need. These updates
include:

* New [Quickstart guide](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/linux-quickstart.html)
  to install Gerrit on Linux
* New [About Gerrit](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/index.html#_about_gerrit)
  section that helps to introduce users to Gerrit
* New [Concepts](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/index.html#_concepts)
  section to explain Gerrit-specific concepts.

We have also made changes to improve navigation throughout the
documentation.

### REST API

#### Projects

* [ProjectInfo](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-projects.html#project-info)
  now contains label configuration information.

#### Changes

* [Mark Private](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#mark-private)

* [Unmark Private](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#unmark-private)

* [Ignore](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#ignore)

* [Unignore](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#unignore)

* [Mark as Reviewed](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#mark-as-reviewed)

* [Mark as Unreviewed](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#mark-as-unreviewed)

* [ChangeInfo](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#change-info)
  now records the change that this change was a revert of.

* [Get Pure Revert](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#get-pure-revert)

* [Delete Comment](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#delete-comment)

* [Apply Fix](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#apply-fix)

* [ChangeInfo](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#change-info)
  now contains the submitter, for merged changes.

* [ReviewInput](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#review-input)
  no longer offers the `strict_labels` option. It will behave as enabled with
  earlier versions of Gerrit. The entire operation will now fail if any of the
  labels used are not within the user's permitted range based on ACLs or if the
  label is not configured for the project/branch.

#### Groups

* [GroupInfo](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-groups.html#group-info)
  now contains a `created_on` field.

#### Config

* [Check Consistency](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-config.html#check-consistency)

### API

* New Java API for accessing plugins.

* New Java API for accessing custom project dashboards.

* New `getGroups` method in account API to get a user's group memberships.

* New `ChangeReportFormatter` extension point for customizing the report output
  from `git push`.

* Instances of [IdString](https://gerrit.googlesource.com/gerrit/+/stable-2.15/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/restapi/IdString.java)
  used to return true when `equals` was given a String instance equal to the
  IdString's URL-encoded value. This violates
  [symmetry](https://en.wikipedia.org/wiki/Equivalence_relation#Definition), so
  this behavior was removed: IdStrings now never compare equal to Strings.

### Replication plugin

* It is now possible to replicate directly to another Gerrit instance.

  It is possible to enable replication to different Gerrit instance by using
  `gerrit+ssh://` as the protocol name followed by the hostname of another
  Gerrit server.

### Hooks plugin

* Username parameters are added to hook invocations.

  When an account parameter is passed to a hook, it gets formatted as
  `Name (Email)` or just `Name` when the account does not have an email
  address. If the account's name is not set, the name is "Anonymous
  Coward". From this information it is not easy for a hook to get the
  account's username.

  All hooks that take an account parameter now automatically also get a
  corresponding username parameter. For example if the hooks takes the
  parameter `--change-owner Name (Email)` it will automatically also get
  the parameter `--change-owner-username username`

## Dependency Updates

* Update Apache Commons Codec to 1.10

* Update Apache Commons Compress to 1.13

* Update Apache Commons Validator to 1.6

* Update Apache Mina SSHD to 1.6.0

* Update AutoValue to 1.4.1 (updated to 1.6.2 in 2.15.4)

* Update Blame Cache to 0.2-5

* Update Bouncy Castle to 1.57 (updated to 1.60 in 2.15.7)

* Update Dropwizard to 3.2.4

* Update GWT to 2.8.1

* Update Jetty to 9.3.18.v20170406 (updated to 9.3.24.v20180605 in 2.15.7)

* Update JGit to 4.9.0.201710071750-r (updated to 4.11.8.201904181247-r in 2.15.15)

* Update Joda-Time to 2.9.9

* Update juniversalchardet to 2.0.0

* Update Lucene to 5.5.4 (updated to 5.5.5 in 2.15.7)

* Update Pegdown to 1.6.0

* Update Polymer to 1.11.0

* Update Soy to 2017-04-23

## Bugfix Releases

### 2.15.22

* Security Fixes

  * [Issue 13858](https://bugs.chromium.org/p/gerrit/issues/detail?id=13858)
    [CVE-2021-22553](https://nvd.nist.gov/vuln/detail/CVE-2021-22553):
  Fixed memory leak in Git-over-HTTP requests.

    Unauthenticated users could exploit this problem in a Denial of Service attack,
    causing the server to go out-of-memory.

### 2.15.21

* Security Fixes

  * [Issue 13621](https://bugs.chromium.org/p/gerrit/issues/detail?id=13621)
    [CVE-2020-8919](https://nvd.nist.gov/vuln/detail/CVE-2020-8919):
  Make `PermissionBackend#ForRef` authoritative.

    Fixes a misconception that leads to data being accessible through Gerrit
    APIs that should be locked down.

    Gerrit had two components for determining if a Git ref is visible to a
    user: `(Default)RefFilter` and `PermissionBackend#ForRef` (e.g.,
    `RefControl`). The former was always capable of providing correct results
    for all refs. The latter only had logic to decide if a Git ref is visible
    according to the Gerrit `READ` permissions. This includes all refs under
    `refs/heads` as well as any other ref that isn't a database ref or a Git
    tag. This component was unaware of Git tags and notedb-related refs. Hence,
    when asked for a database reference such as `refs/changes/xx/yyyyxx/meta`,
    the logic would allow access if the user has `READ` permissions on any of
    the ref prefixes (such as the default "read refs/* Anonymous Users").

    That was problematic, because it bypassed
    [documented behavior](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.21/access-control.html)
    where a user should only have access to a change if he can see the
    destination ref. The same goes for other database references.

  * [Issue 13514](https://bugs.chromium.org/p/gerrit/issues/detail?id=13514)
    [CVE-2020-8920](https://nvd.nist.gov/vuln/detail/CVE-2020-8920):
  Work around Gitiles bug on `All-Users` visibility.

    Gitiles has a special `FilteredRepository` wrapper that allows carefully
    hiding refs based on the project's ACLs. There is however an optimization
    that skips the filtering in case a user has `READ` permissions on every ACL
    pattern(s). When the target repository is `All-Users`, the optimization
    turns into a security issue because it allows seeing all personal information
    associated with all accounts, i.e.:

    * draft comments
    * draft edits
    * personally identifiable information (PII) of all users
    * external ids

    This fix now blocks Gitiles or any other part of Gerrit to abuse this power
    when the target repository is `All-Users`, where nobody can be authorized
    to skip the ACLs evaluation anyway.

* Documentation Updates

  * [Issue 12869](https://bugs.chromium.org/p/gerrit/issues/detail?id=12869):
    Add 'Move a Change' section
    [to user guide](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.21/intro-user.html#move).

### 2.15.20

This minor release has been withdrawn.

### 2.15.19

* Security Fixes

  * [Issue 12717](https://bugs.chromium.org/p/gerrit/issues/detail?id=12717):
  Deny access over HTTP for disabled accounts.

    A disabled account was still able to access over HTTP until the existing
    session expired.

* Bug Fixes

  * [Issue 12637](https://bugs.chromium.org/p/gerrit/issues/detail?id=12637):
  Fix SQL connection timeout during migration to schema 146 and 154.

    A full GC is run at the beginning of the migration, after every 100k
    accounts, and at the end of the migration. Additionally, bitmap index
    generation is disabled during the migration.

### 2.15.18

* New Features

  * Add a method on `ProjectConfig` to read from the repository.

    Add a method that allows to read the config from the repository without
    having to provide a `MetaDataUpdate` instance.

  * Syntax highlighting for Jinja2 and Jenkinsfile formats.

* Replication Plugin Fixes

  * [Issue 11573](https://bugs.chromium.org/p/gerrit/issues/detail?id=11573):
  Fix dropping events during plugin restart.

* PolyGerrit UI Fixes

  * Hide "HTTP Credentials" if auth is not `HTTP` or `HTTP_LDAP`.

* Elasticsearch Updates

  * Add support for Elasticsearch 7.4.

  * Update elasticsearch-rest-client to 7.4.2.

* Other Fixes

  * Fix change message when automatically abandoning a change for a project
    that has been deleted.

    The change message and the message tag were inverted.

  * Fix commit message subject when updating project description by REST API.

    The tense of the commit message subject was inconsistent with other similar
    messages.

  * Fix commit timestamp when updating project configurations.

    For some REST API operations that update the project configuration, the
    commit that does the update on `refs/meta/config` had the wrong timestamp.
    Rather than being the time of the actual commit, it was always the time
    of the server startup.

    This was the case for the following operations:

    - Updating the description.
    - Setting the parent project.
    - Updating group names while getting access settings.

  * Upgrade jackson-core to 2.10.0.

    This version includes a fix for [CVE-2019-12384](https://nvd.nist.gov/vuln/detail/CVE-2019-12384).

  * Add more detailed debug logging when not sending an outgoing email.

    There are several conditions that could cause sending of an outgoing
    email to be skipped. These are now logged at debug level.

  * Increase severity to error for logging of exceptions during site initialization.

### 2.15.17

* [Issue 11356](https://bugs.chromium.org/p/gerrit/issues/detail?id=11356):
Allow to override auto-detected Lucene index configuration.

  The new settings
  [`index.name.maxMergeCount`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.17/config-gerrit.html#index.name.maxMergeCount),
  [`index.name.maxThreadCount`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.17/config-gerrit.html#index.name.maxThreadCount) and
  [`index.name.enableAutoIOThrottle`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.17/config-gerrit.html#index.name.enableAutoIOThrottle)
  allow to manually configure the Lucene index, rather than using auto-detected
  values, to improve performance.

* [Issue 11358](https://bugs.chromium.org/p/gerrit/issues/detail?id=11358):
Clarify plugin revisions in the documentation.

* Clarify documentation of `sshd.backend`.

* Upgrade JGit to 4.11.9.201909030838-r.

  This version includes a fix for racy atomic ref updates.

* Upgrade elasticsearch-rest-client to 7.3.2.

* PolyGerrit UI Fixes:

  * Fix HTML in commentLink when canonical web URL includes a base link.

  * Add "Delete Changes" permission to the access editor.

  * Remove obsolete "Delete Drafts" and "View Drafts" permissions from the access editor.

### 2.15.16

* [Issue 11248](https://bugs.chromium.org/p/gerrit/issues/detail?id=11248):
Fix refresh of project hierarchy cache when parent project is updated.

* [Issue 11204](https://bugs.chromium.org/p/gerrit/issues/detail?id=11204):
Replication plugin: Fix creation of missing repository when replicating to a Gerrit server.

* Fix internal server error when rebasing a change onto a non-existing base change.

* Fix internal server error that occurred sometimes when unstarring a change.

* Fix detecting changes of parent trees when computing change kind for a merge commit.

* Fix internal server error when requesting files for merge commit with invalid parent.

* Add a method on the commit API to get the commit info.

* Add methods on the change API to get comments and draft comments as lists.

* Log all errors when migrating to schema version 130.

* Reduce log spam of "setting reductionLimit" debug messages in the Prolog engine.

* [Issue 9450](https://bugs.chromium.org/p/gerrit/issues/detail?id=9450):
Add a git-review configuration for developers.

  For developers used to using the [git-review tool](https://pypi.org/project/git-review/)
  for interacting with gerrit servers, it's necessary to have a `.gitreview` file
  in the repo in question pointing to where the gerrit is.

* Elasticsearch Updates:

  * [Issue 11266](https://bugs.chromium.org/p/gerrit/issues/detail?id=11266):
  Add support for Elasticsearch 6.8.

  * [Issue 11267](https://bugs.chromium.org/p/gerrit/issues/detail?id=11267):
  Add support for Elasticsearch 7.3.

  * Update elasticsearch-rest-client to 7.3.1.

* PolyGerrit UI Fixes:

  * [Issue 10733](https://bugs.chromium.org/p/gerrit/issues/detail?id=10733):
  Fix anchor tag for settings page.

  * [Issue 11344](https://bugs.chromium.org/p/gerrit/issues/detail?id=11344):
  Fix commentlink URL when canonical URL includes a base link.

  * [Issue 10281](https://bugs.chromium.org/p/gerrit/issues/detail?id=10281):
  Set XSRF token for `/` to avoid potential unauthenticated errors after redirects from `/login/`.

### 2.15.15

* Add support for Elasticsearch 7.2.

* Upgrade JGit to 4.11.8.201904181247-r.

  This version of JGit includes a fix in the resolve merger to handle conflicts
  in submodules. See [the upstream issue](https://bugs.eclipse.org/bugs/show_bug.cgi?id=494551)
  for details.

* [Issue 11016](https://bugs.chromium.org/p/gerrit/issues/detail?id=11016):
Fix failure to initialize on slave.

* [Issue 10664](https://bugs.chromium.org/p/gerrit/issues/detail?id=10664):
Fix duplicate key detection in MySQL patch review database.

* [Issue 10763](https://bugs.chromium.org/p/gerrit/issues/detail?id=10763):
Fix ACLs to allow regexes for tag and ref permissions.

  The documentation states that reference names can also be described with
  a regular expression by prefixing the reference name with `^`, but the UI
  only showed the creation field when a non-regex name was used.

* [Issue 11106](https://bugs.chromium.org/p/gerrit/issues/detail?id=11106):
Fix missing comment context for left side in email notifications.

* [Issue 11082](https://bugs.chromium.org/p/gerrit/issues/detail?id=11082):
Close changes oldest first when submitting by direct push.

* [Issue 11086](https://bugs.chromium.org/p/gerrit/issues/detail?id=11086):
Unset the WIP flag when a change is closed by direct push.

* [Issue 10499](https://bugs.chromium.org/p/gerrit/issues/detail?id=10499):
Set default number of shards according to Elasticsearch version.

  In Elasticsearch version 7.0 the default number of shards was reduced from
  5 to 1.

  See the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-concepts.html#getting-started-shards-and-replicas)
  for details.

* [Issue 10823](https://bugs.chromium.org/p/gerrit/issues/detail?id=10823):
Hooks plugin: Allow to configure the number of hook execution workers.

  By setting `hooks.executorThreads` the number of workers can be configured.
  If not set, it defaults to 1 which was the previously fixed value.

* Increase default number of SSHD threads to at least 4.

  The default value of the `sshd.threads` setting is changed to be either two
  times the number of available CPU cores, or 4, whichever is greater.

* Allow commit validation listeners to ignore the `skip-validation` push option.

  Gerrit allows certain users to skip validation of new commits by passing
  the `skip-validation` push option.

  A new method `shouldValidateAllCommits` is added on the
  `CommitValidationListener`, to allow plugin implemented validators to
  override this option and always be invoked for new commits. The new
  method has a default implementation that returns `false` meaning that
  existing implementations don't need to be modified and will behave the
  same as before.

* Optimize commit and ref operation validation for non-ff push.

  On a non-ff push all the commits were validated before the ref operation
  was validated. On a push with many commits, validating all the commits is
  wasteful in the case where the ref operation is rejected. The logic is
  changed so that the ref operation validation is performed before the commit
  validation.

* Disallow change index task duplication.

  It was possible for multiple index tasks to be queued for the same change.

* Fix error message when JRE is not found when starting Gerrit.

  The error message recommended to check for a JRE ">= 1.7", but Gerrit requires
  Java 8 minimum.

* Adapt `gerrit.sh` script to work on Alpine Linux.

* Expose the `createProject` method of the `CreateProject` class to plugins.

  This allows plugins to directly invoke the project creation, avoiding the
  checks that are performed when invoking via the `apply` method.

* Expose the jsr305 library in the plugin API.

* Expose Gerrit's GWT client library in the plugin API.

* [Issue 10855](https://bugs.chromium.org/p/gerrit/issues/detail?id=10855):
Fix transitive load of GWT_PLUGIN_DEPS for in-tree plugin builds.

* Make the wording of the "Change Merged" email templates consistent between the
HTML and text versions.

* Replication plugin fixes:

  * [Issue 10852](https://bugs.chromium.org/p/gerrit/issues/detail?id=10852):
    Make sure to always remove in-flight pushes.

  * Cancel pending replications upon shutdown.

  * Allow to configure timeout for SSH connections and SSH commands.

    The timeouts can be configured with `gerrit.sshConnectionTimeout` and
    `gerrit.sshCommandTimeout`, respectively.

* PolyGerrit UI fixes:

  * Fix hiding the HTTP password screen.

    It was possible for the HTTP password to be un-hidden using CSS.

  * Add an extension point to allow adding links to the user header.

  * Add an extension point to allow custom site footers.

  * [Issue 5791](https://bugs.chromium.org/p/gerrit/issues/detail?id=5791):
    Add an extension point to allow setting a site banner.


### 2.15.14

* Allow to disable log file rotation and compression.

  On sites where log file rotation and compression is done by an external
  service such as [logrotate](http://manpages.ubuntu.com/manpages/zesty/man8/logrotate.8.html),
  administrators may wish to disable Gerrit's default log rotation and
  compression.

  This can now be done by setting `log.rotate` and `log.compress` to `false`.

  The default value of both settings is `true`, to maintain consistent behavior
  with previous releases.

* Improve performance of migration of accounts to schema 146.

  * Migration of the accounts is parallelized. The default number of threads
    used is the number of available processors. This can be customized using
    the `threadcount` system property.

  * Before the migration, `gc --prune=now` is executed.

  * When hosted on `FileRepository`, refs are packed after migration of every
    1000 accounts.

  * A progress indicator counts every 100 accounts migrated.

* [Issue 10790](https://bugs.chromium.org/p/gerrit/issues/detail?id=10790):
Avoid evaluating submit rules twice for open changes.

  Prolog submit rules were evaluated twice per page view for an open change,
  which caused performance degradation on projects defining complex rules.

* [Issue 10943](https://bugs.chromium.org/p/gerrit/issues/detail?id=10943):
Set `References:` header on new change notification mail.

  GMail changed the way
  [emails are grouped in conversation view](https://gsuiteupdates.googleblog.com/2019/03/threading-changes-in-gmail-conversation-view.html),
  which, combined with the fact that
  [Amazon SES changes the `Message-ID` header](https://forums.aws.amazon.com/message.jspa?messageID=262855),
  resulted in the new change notification email not being grouped with
  subsequent emails related to the same change.

* [Issue 10952](https://bugs.chromium.org/p/gerrit/issues/detail?id=10952):
Fix definition of `PID` in `gerrit.sh`.

* Don't send "GPG keys added" notification when no GPG keys were added.

  A GPG key update can include both addition and removal of GPG keys. The
  notification email for addition of new keys was always sent, even if the
  update only removed keys.

* Update email notifications on changing security related settings.

  Email notifications are now sent when a GPG or SSH key is removed, and
  when the HTTP password is deleted or changed.

  An email notification is now always sent when an SSH key is added to an
  account, even when it was added by an administrator.

  These notifications allow to alert the user if their account is compromised
  and keys or password are altered by the attacker.

* Remove explicit dependency on protobuf_java.

  The protobuf_java library is now consumed from rules_closure.

* Add methods to generate and set the HTTP password on the accounts API.

* Elasticsearch fixes

  * [Issue 10496](https://bugs.chromium.org/p/gerrit/issues/detail?id=10496) and
  [Issue 10844](https://bugs.chromium.org/p/gerrit/issues/detail?id=10884):
  Fix usage of `include_type_name` in index creation.

  * Add support for Elasticsearch 7.1.

  * Upgrade elasticsearch-rest-client to 7.1.1.

* PolyGerrit UI fixes

  * [Issue 10549](https://bugs.chromium.org/p/gerrit/issues/detail?id=10549):
  Fix single tab indentation in PolyGerrit diff view.

  * [Issue 9409](https://bugs.chromium.org/p/gerrit/issues/detail?id=9409):
  Fix replacement of file content when navigating between files with `[` and `]`.

  * Upgrade polymer-resin to 2.0.1.

* Documentation Updates

  * [Issue 10897](https://bugs.chromium.org/p/gerrit/issues/detail?id=10897):
  Update links to Google individual and corporate CLA pages.

  * Clarify that account must have a username to be able to set HTTP password.

  * Fix formatting in project config documentation.

### 2.15.13

* [Issue 10695](https://bugs.chromium.org/p/gerrit/issues/detail?id=10695):
Upgrade JGit to 4.9.10.201904181027-r to fix regression in packfile list
handling.

  If `core.trustfolderstat` was set to `false`, an infinite loop could occur
  when an object was not found in the packfile.

* Add support for Elasticsearch 6.7.x and 7.0.x.

  The elasticsearch-rest-client is upgraded to 7.0.0.

* Add new `SshExecuteCommandInterceptor` extension point.

  The new extension point allows plugins to intercept ssh commands
  and block their execution.

* Don't abort auto-abandoning if one change failed.

  When failing to query a single change during auto-abandoning, the whole
  process was aborted. Now the failure is logged and the process continues
  to attempt to abandon subsequent changes.

* Install `AddKeyHtml.soy` template example during installation.

  The installation of this template into `$site_path/etc/mail` was
  omitted.

* Upgrade metrics-core to 4.0.5.

* PolyGerrit fixes:

  * [Issue 8644](https://bugs.chromium.org/p/gerrit/issues/detail?id=8644):
Display group UUID for group audit log if group name is missing.

  * [Issue 9000](https://bugs.chromium.org/p/gerrit/issues/detail?id=9000):
Fix adding groups created by the singleusergroup plugin.

  * Do not show the HTTP credentials screen when auth type is not HTTP.

### 2.15.12

* [Issue 10562](https://bugs.chromium.org/p/gerrit/issues/detail?id=10562):
Upgrade JGit to 4.9.9.201903122025-r to fix corruption of packfile
list due to concurrent access during GC.

  See [JGit issue 544199](https://bugs.eclipse.org/bugs/show_bug.cgi?id=544199)
  for details.

* [Issue 10531](https://bugs.chromium.org/p/gerrit/issues/detail?id=10531):
Fix LocalUsernamesToLowerCase program.

  The program failed with a "guice configuration error".

* [Issue 10564](https://bugs.chromium.org/p/gerrit/issues/detail?id=10564):
Fix case-insensitive searching of hashtags.

  The index field has always been stored lowercase, since we intended
  hashtag searches to be case-insensitive. However, we never converted the
  input string to lower case, with the unexpected result that searching
  for `hashtag:ACamelCaseTag` would not return results for changes who
  contain that exact hashtag.

  The documentation also incorrectly stated that the hashtag search was
  an exact match.

* [Issue 10568](https://bugs.chromium.org/p/gerrit/issues/detail?id=10568):
Add `is:submittable` to search suggestions.

* [Issue 10587](https://bugs.chromium.org/p/gerrit/issues/detail?id=10587):
Fix setting group visibility in PolyGerrit.

### 2.15.11

* [Issue 10106](https://bugs.chromium.org/p/gerrit/issues/detail?id=10106):
Fix internal server error when updating project access via REST API
without specifying 'action' entity.

* [Issue 10488](https://bugs.chromium.org/p/gerrit/issues/detail?id=10488):
Fix listing of GPG public keys.

  The GPG public keys were truncated in the output of the GPG key REST API
  endpoints.

* [Issue 10415](https://bugs.chromium.org/p/gerrit/issues/detail?id=10415):
PolyGerrit UI: Fix replacement of project name placeholder in download command.

* Fix authentication for LFS over SSH.

* Add logging of prolog rule reduction limits.

  The configured values of `rules.reductionLimit` and `rules.compileLimit`
  are logged at INFO level at server startup, and the effective value applied
  to a predicate is logged at DEBUG level.

* Improve error message when JRE cannot be found during site start.

* Upgrade elasticsearch-rest-client to 6.6.1.

### 2.15.10

* [Issue 10452](https://bugs.chromium.org/p/gerrit/issues/detail?id=10452):
Fix daemon startup in slave mode.

* [Issue 10428](https://bugs.chromium.org/p/gerrit/issues/detail?id=10428):
Fix binding of AuditListeners for plugin tests.

* Improve error messages emitted from commit validators.

* Add a method to get revision votes on the revision API.

* Add support for Elasticsearch 6.6.

* PolyGerrit fixes

  * Add warning that Javascript is required to use PolyGerrit.

  * [Issue 8740](https://bugs.chromium.org/p/gerrit/issues/detail?id=8740):
  Disable deps.js requests in the index template to fix page load delay.

### 2.15.9

* [Issue 10326](https://bugs.chromium.org/p/gerrit/issues/detail?id=10326):
Fix excessive heap and CPU usage when listing projects.

* [Issue 10021](https://bugs.chromium.org/p/gerrit/issues/detail?id=10021):
Encode and quote project name in download commands.

* [Issue 10317](https://bugs.chromium.org/p/gerrit/issues/detail?id=10317):
Don't show "Same Topic" for only one change.

  When there is only one change in the topic, it doesn't add any value
  to show the "Same Topic" tab/section because it will always only include
  the currently viewed change.

  The query used to get the changes is modified to exclude the current
  change. This means that the "Same Topic" tab/section now only shows other
  changes in the same topic, but never the current change.

* Create the `.git/hooks` folder in download commands.

* Add method to get related changes in the Changes API.

* Add method to get edit details in the Change Edit API.

  The new method allows to set the base revision, and request to include the
  files and download commands.

* Add method to set a file's "reviewed" flag on the File API.

* Fix internal server error when getting commit info for root commit.

* Add `--skip-project` option to the `MigrateToNoteDb` command.

  This is useful when only a few projects should be skipped but all others
  should be migrated.

* PolyGerrit fixes

  * [Issue 7669](https://bugs.chromium.org/p/gerrit/issues/detail?id=7669),
  [Issue 9614](https://bugs.chromium.org/p/gerrit/issues/detail?id=9614):
  Fix '/' getting typed in the search bar when pressed.

  * [Issue 10151](https://bugs.chromium.org/p/gerrit/issues/detail?id=10151):
  Fix support for deleting branches.

  * [Issue 10019](https://bugs.chromium.org/p/gerrit/issues/detail?id=10019):
  Fix deletion of branch that `HEAD` pointed to after `HEAD` was moved to a
  different branch.

### 2.15.8

* [Issue 10262](https://bugs.chromium.org/p/gerrit/issues/detail?id=10262):
Upgrade JGit to 4.9.8.201812241815-r to fix validation of `wants` in
`git-upload-pack` for protocol v0 stateless transports.

  AdvertiseRefsHook was not called for `git-upload-pack` in protocol v0
  stateless transports, meaning that `wants` were not validated and
  a user could fetch anything that is pointed to by any ref (using fetch-by-sha1),
  as long as they could guess the object name.

* [Issue 10242](https://bugs.chromium.org/p/gerrit/issues/detail?id=10242):
Fix regression that allows a user's account to be taken over when multiple
authentication providers are in use.

  A regression introduced in 2.14.7 allowed a user's account to be taken
  over by creating an account on a different provider with exactly the same
  username as the existing Gerrit account.

* [Issue 10082](https://bugs.chromium.org/p/gerrit/issues/detail?id=10082):
Decouple online reindex activation from index module.

  Plugins were not loaded before online indexing was triggered, resulting
  in plugin-contributed submit rules not being evaluated during indexing.

  Online reindex activation is now decoupled from the index module and
  thus postpones the triggering of online reindexing until after loading
  of the plugins.

* [Issue 9024](https://bugs.chromium.org/p/gerrit/issues/detail?id=9024):
Fix setting `PRIVATE` and `WIP` for updated changes in console report.

  In some cases the private and work-in-progress status indicator for
  changes updated by push was shown incorrectly.

* [Issue 10038](https://bugs.chromium.org/p/gerrit/issues/detail?id=10038):
Add support for Elasticsearch 6.5.

* [Issue 9768](https://bugs.chromium.org/p/gerrit/issues/detail?id=9768):
Explicitly set the number of shards and replicas for Elasticsearch, and
allow them to be configured.

  From Elasticsearch version 7 the default number of shards per node
  will be changed from 5 to 1.

  The number of shards and number of replicas are now explicitly set when
  creating the index.

  The new settings `elasticsearch.numberOfShards` and `elasticsearch.numberOfReplicas`
  allow the values to be configured. The default values are 5 and 1,
  respectively, which is the same as the default values used by Elasticsearch
  prior to version 7.

* Fix incorrect json in the example for the 'Set Access' REST endpoint.

* [Issue 10263](https://bugs.chromium.org/p/gerrit/issues/detail?id=10263):
Include edit ref in `EditInfo` element returned by the edit API.

  It was not possible for users of the Java API to get the edit ref.

* Upgrade elasticsearch-rest-client to 6.5.4.

* Discontinue support for Elasticsearch 2.4.

* Add preliminary support for Elasticsearch 7.

  Support for Elasticsearch 7 is added, and tested against the `alpha1`
  release.

* [Issue 10112](https://bugs.chromium.org/p/gerrit/issues/detail?id=10112):
Upgrade rules_closure to make Gerrit buildable with the latest Bazel version.

* [Issue 9781](https://bugs.chromium.org/p/gerrit/issues/detail?id=9781):
Allow to disable the groups relevance filtering for LDAP.

* Upgrade jackson-core to 2.9.8.

  [Version 2.9.8](https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.9.8)
  includes several bug fixes, including security fixes.

* Add a new method on the account API to set the account name.

* Add new methods on the project API to get/set the project's `HEAD`.

* Add a new method on the commit API to get "included in" information.

### 2.15.7

* [Issue 9952](https://bugs.chromium.org/p/gerrit/issues/detail?id=9952):
Upgrade dependencies to newer versions to fix CVEs.

  * [CVE-2015-1832](https://nvd.nist.gov/vuln/detail/CVE-2015-1832):
  Upgrade Apache Derby to 10.12.1.1
  * [CVE-2018-10936](https://nvd.nist.gov/vuln/detail/CVE-2018-10936):
  Upgrade postgresql to 42.2.5
  * [CVE-2017-12629](https://nvd.nist.gov/vuln/detail/CVE-2017-12629):
  Upgrade Lucene to 5.5.5
  * [CVE-2018-10237](https://nvd.nist.gov/vuln/detail/CVE-2018-10237):
  Upgrade guava to 24.1.1-jre
  * [CVE-2018-1000180](https://nvd.nist.gov/vuln/detail/CVE-2018-1000180),
  [CVE-2018-1000613](https://nvd.nist.gov/vuln/detail/CVE-2018-1000613):
  Upgrade Bouncycastle to 1.60
  * [CVE-2017-7656](https://nvd.nist.gov/vuln/detail/CVE-2017-7656),
  [CVE-2017-7657](https://nvd.nist.gov/vuln/detail/CVE-2017-7657),
  [CVE-2017-7658](https://nvd.nist.gov/vuln/detail/CVE-2017-7658),
  [CVE-2017-9735](https://nvd.nist.gov/vuln/detail/CVE-2017-9735),
  [CVE-2018-12536](https://nvd.nist.gov/vuln/detail/CVE-2018-12536):
  Upgrade Jetty to 9.3.24.v20180605

* [Issue 9969](https://bugs.chromium.org/p/gerrit/issues/detail?id=9969):
Fix incorrect dependency on httpcore-nio for Elasticsearch.

  The Elasticsearch REST client depends on version 4.4.5 of httpcore-nio,
  but the version provided by Gerrit was 4.4.1.

* Remove dependency on httpmime.

  httpmime was a dependency of Apache Solr, which was removed from Gerrit
  some time ago.

* Upgrade Elasticsearch REST client to 6.4.3.

* Fix logic for updating display name on authentication.

  The display name was only being updated in the case when the authentication
  realm did not allow updates.

* [Issue 9982](https://bugs.chromium.org/p/gerrit/issues/detail?id=9982):
Trigger audit for git over HTTP commands.

  `git-receive-pack` and `git-upload-pack` commands were only audited for
  git over SSH.

* [Issue 9974](https://bugs.chromium.org/p/gerrit/issues/detail?id=9974):
Fix redirection to documentation index page.

* [Issue 7306](https://bugs.chromium.org/p/gerrit/issues/detail?id=7306) and
[Issue 9321](https://bugs.chromium.org/p/gerrit/issues/detail?id=9321):
Fix URL routing.

### 2.15.6

* [Issue 9836](https://bugs.chromium.org/p/gerrit/issues/detail?id=9836):
Fix database connections leaks.

  The fix for [issue 9823](https://bugs.chromium.org/p/gerrit/issues/detail?id=9823)
  in 2.15.5 introduced a database connection leak.

* Update JGit to 4.9.7.201810191756-r.

  * Fixes a file handle leak in the LFS file server. Note: this fix requires the
    LFS plugin to be updated.
  * Allows the path or url to be absent in the validation of `.gitmodules` files.
  * Fixes malformed Javadoc.

* [Issue 9419](https://bugs.chromium.org/p/gerrit/issues/detail?id=9419):
Allow users to remove themselves as reviewer from an abandoned change.

* [Issue 9880](https://bugs.chromium.org/p/gerrit/issues/detail?id=9880):
Fix notifications when a WIP change is reviewed using the `review` ssh command.

  Instead of only the owner being notified, all reviewers were notified.

* Mark cherry-pick change as WIP if source change is WIP.

  If a work-in-progress change is cherry-picked to another branch the
  created cherry-pick change should be marked as work-in-progress too.

### 2.15.5

* Update JGit to 4.9.6.201810051924-r to fix
[CVE-2018-17456](https://nvd.nist.gov/vuln/detail/CVE-2018-17456).

  This release of JGit implements validation of `.gitmodules` files to protect
  unguarded tools against CVE-2018-17456.

* [Issue 9823](https://bugs.chromium.org/p/gerrit/issues/detail?id=9823):
Fix force push permission check for administrators and project owners over SSH.

  It was possible for an administrator or project owner to force push to
  a project over SSH without having the Force Push permission.

  This issue did not affect regular users, or pushes over HTTP.

* Update jackson-core to 2.9.7.

  There have been several releases since 2.6.6 including many bug fixes
  and security fixes.

* Update elasticsearch-rest-client to 6.4.2.

* [Issue 9705](https://bugs.chromium.org/p/gerrit/issues/detail?id=9705):
Fix blank dropdown for 'Only serve as parent for other repositories' option
when creating a new repository.

* [Issue 9610](https://bugs.chromium.org/p/gerrit/issues/detail?id=9610):
Add support for showing the 'effective' value of the max object size limit
setting.

* [Issue 9787](https://bugs.chromium.org/p/gerrit/issues/detail?id=9787):
Fix permission check for toggling WIP flag when posting review.

* [Issue 9655](https://bugs.chromium.org/p/gerrit/issues/detail?id=9655):
Fix support for setting owner of group to a single user.

### 2.15.4

* [Issue 7053](https://bugs.chromium.org/p/gerrit/issues/detail?id=7053):
Modify search autocompletion to include only email.

* [Issue 8859](https://bugs.chromium.org/p/gerrit/issues/detail?id=8859):
Skip plugin capability check for administrators.

* [Issue 7896](https://bugs.chromium.org/p/gerrit/issues/detail?id=7896) and
[Issue 9674](https://bugs.chromium.org/p/gerrit/issues/detail?id=9674):
Fix compatibility with MS Edge.

* [Issue 9642](https://bugs.chromium.org/p/gerrit/issues/detail?id=9642):
Fix rendering of 'Ready' and 'Start Review' buttons.

* [Issue 8472](https://bugs.chromium.org/p/gerrit/issues/detail?id=8472):
Count unresolved message threads within thread groups rather than by leaves.

* [Issue 7911](https://bugs.chromium.org/p/gerrit/issues/detail?id=7911)
and [Issue 9506](https://bugs.chromium.org/p/gerrit/issues/detail?id=9506):
Fix text overflow.

* [Issue 8202](https://bugs.chromium.org/p/gerrit/issues/detail?id=8202):
Add current patch set to `wip-state-changed` and `private-state-changed`
events.

* [Issue 9483](https://bugs.chromium.org/p/gerrit/issues/detail?id=9483):
Perform fonts preloads in "anonymous" cross-origin mode.

* [Issue 8582](https://bugs.chromium.org/p/gerrit/issues/detail?id=8582):
Turn off autoReindexIfStale by default.

* [Issue 7750](https://bugs.chromium.org/p/gerrit/issues/detail?id=7750):
Fix enforcing of signed push when 'Require signed push' is enabled.

* Remove unused font files.

* [Issue 9670](https://bugs.chromium.org/p/gerrit/issues/detail?id=9670):
Add support for Elasticsearch 6.4.0.
* [Issue 9711](https://bugs.chromium.org/p/gerrit/issues/detail?id=9711):
Add a change deleted event.

  Since 2.14 it is possible to delete changes, however there was no specific
  event emitted. A new change deleted event is added, which is notified to
  `stream-events` clients. The hooks plugin is updated to support a `change-deleted`
  hook.
* [Issue 9689](https://bugs.chromium.org/p/gerrit/issues/detail?id=9689):
Fix visibility of tag creation form on the project screen (GWT).

  The tag creation form was shown when the user had "Create Reference" permission
  on `refs/*` or `refs/heads/*` (but not `refs/tags/*`).
* [Issue 9528](https://bugs.chromium.org/p/gerrit/issues/detail?id=9528):
Allow project-level
[`receive.maxObjectSizeLimit`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.4/config-project-config.html#receive.maxObjectSizeLimit)
to be inherited from parent project.

  It is possible to set the limit per project in the `project.config` on
  `refs/meta/config`, and at global level in `$site/etc/gerrit.config`. The
  project setting may override the global setting if it is lower. Changing
  the global setting requires a server restart.

  A limitation of this implementation is that we cannot set the limit at a
  project level and have it inherited to its child projects; it is necessary
  to explicitly set the limit on each child project.

  A new global option
  [`receive.inheritProjectMaxObjectSizeLimit`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.15.4/config-gerrit.html#receive.inheritProjectMaxObjectSizeLimit)
  is added, and when this is enabled the project-level setting is inherited
  from the parent. This new setting is disabled by default to keep backwards
  compatibility with the original behavior.
* Allow more email RFC characters in the username.

  It was possible to set a username with an email-address-like string, but
  only as far as the fact that the `@` character was allowed. Most of the
  other characters allowed by [the RFC](https://www.mailboxvalidator.com/resources/articles/acceptable-email-address-syntax-rfc/)
  were not allowed.
* Ensure user authentication in `AllRequestFilter` filters.

  The order of filters made request authentication only work when the HTTP
  request was issued from the Gerrit UI, but not work when REST API was used.
* commit-message-length-validation plugin: Use "warning" prefix to allow
colorization of remote output.

  From version 2.19 of git, the "warning" keyword will be highlighted
  in the remote output when `color.remote` is enabled in the git config.
* Fix display of "Delete Changes" permission in access screen on GWT UI.
* Fix permission check when deleting a single branch with the "Delete Branches"
REST endpoint.
* Include cause in exception when failing to save config in the "Set Config"
REST endpoint.
* [Issue 9482](https://bugs.chromium.org/p/gerrit/issues/detail?id=9482):
Fix staleness checker for URL-encoded project names.
* Validate connections when sending a request to the database.

  In some cases it was possible to attempt to reuse an already closed
  connection, which resulted in an internal server exception.
* [Issue 9586](https://bugs.chromium.org/p/gerrit/issues/detail?id=9586) Reload
  change page to land on the latest patch set after change submission in
  PolyGerrit.
* Upgrade JGit to 4.9.5.201809180939-r.

  * [Issue 9153](https://bugs.chromium.org/p/gerrit/issues/detail?id=9153):
  Fix querying for filenames with special characters.
  * [Issue 9667](https://bugs.chromium.org/p/gerrit/issues/detail?id=9667):
  Fix handling of output stream in LFS server.

  * Fix errors during cleanup after deleting refs.

  * Fix errors during cleanup after running garbage collection.

  * Fix atomic lock file creation on NFS.

  * [Honor trustFolderStats also when reading packed-refs](https://git.eclipse.org/r/#/c/112015/).

    Users should note that for repositories with a high number of references
    (for example in excess of 300K refs) and in a server with high traffic,
    this solution may not scale well and should be tested carefully.

* Upgrade guice to 4.2.0.

  Guice [version 4.2.0](https://github.com/google/guice/wiki/Guice42)
  includes performance improvements.

* Upgrade elasticsearch-rest-client to 6.4.1.
* Upgrade Dropwizard Metrics to 4.0.3.
* Upgrade auto-value to 1.6.2.
* Upgrade PostgreSQL connector to 42.2.4.
* Upgrade MariaDB connector to 2.3.0.

### 2.15.3

* [Issue 8915](https://bugs.chromium.org/p/gerrit/issues/detail?id=8915):
Fix file handle leak when running GC.
  Upgrade JGit to 4.9.2.201712150930-r.15-g5fe8e31d4 which includes a
  [fix](https://git.eclipse.org/r/124285) to prevent the file handle
  leak.
* [Issue 8866](https://bugs.chromium.org/p/gerrit/issues/detail?id=8866):
Add project and account settings to create new changes as WIP by default.
* [Issue 6094](https://bugs.chromium.org/p/gerrit/issues/detail?id=6094)
and [Issue 9112](https://bugs.chromium.org/p/gerrit/issues/detail?id=9112):
Add support for Elasticsearch versions 5 and 6.
  Support is added for Elasticsearch versions 5.6 (tested with versions 5.6.9
  and 5.6.10), 6.2 (tested with version 6.2.4) and 6.3.1.
  Version 2.4 is still supported (tested with version 2.4.6).
  Instead of using the 'Jest' client to communicate with Elasticsearch, the
  Elasticsearch low level API is now used.
  Support for Elasticsearch is still considered experimental, and is not
  recommended for production use.
* [Issue 9372](https://bugs.chromium.org/p/gerrit/issues/detail?id=9372):
Simplify the configuration of Elasticsearch servers.
  Instead of specifying each server in a separate `[elasticsearch "name"]`
  section, with separate values `protocol`, `hostname`, and `port`, the
  servers are now configured as a list of `server` values in the
  `[elasticsearch]` section.
  This also fixes [Issue 9383](https://bugs.chromium.org/p/gerrit/issues/detail?id=9383)
  where a "default" server `http://localhost:9200` would be added by
  the site initialization even if other servers were already explicitly
  configured.
  During startup the list of configured Elasticsearch servers is logged
  at info level.
* [Issue 9146](https://bugs.chromium.org/p/gerrit/issues/detail?id=9146) and
[Issue 9147](https://bugs.chromium.org/p/gerrit/issues/detail?id=9147):
Fix Elasticsearch queries for results with substrings in keywords.
  Doing a query that involved the characters "." and "_" from full text fields
  did not include results with keywords as a substring. This behavior was
  different from Lucene, where these two characters are mapped to the space
  character (" ") so that the query returns keywords separated by them.
* Allow to omit the `elasticsearch.username` setting.
  If `elasticsearch.password` is specified, the `username` can be omitted and
  it will default to `elastic` which is the default username configured
  when running Elasticsearch with security enabled.
* Allow to assign "Delete Own Changes" permission to "Change Owners".
  It was only possible for a user to delete their own change if they were
  a member of a group that was assigned the "Delete Own Changes" permission.
  This was counter-intuitive as it was necessary to either create a specific
  group, or assign the permission to "Registered Users".
  It is now possible to assign this permission to the "Change Owners"
  virtual group.
* [Issue 9354](https://bugs.chromium.org/p/gerrit/issues/detail?id=9354):
Add "Delete Changes" permission.
  It was only possible for a user to delete another user's change if they
  were a member of a group that was assigned the "Administrate Server"
  permission.
  A new "Delete Changes" permission is added. This permission can be
  assigned to a group, or to the "Project Owners" virtual group.
* [Issue 9345](https://bugs.chromium.org/p/gerrit/issues/detail?id=9345):
Fix creation of plugin log file when `log4j.configuration` is set
  When the environment variable `log4j.configuration` is set, log files
  defined by plugins were not created because the appender couldn't be
  found.
* Fix repeated `Change-Id` in error message when `Change-Id` line is not
in the footer.
* [Issue 9245](https://bugs.chromium.org/p/gerrit/issues/detail?id=9245):
Return the correct information in JSON response after moving a change.
  When moving a change by the REST API, the JSON response contained the
  branch name of the original destination rather than the new destination.
* Fix internal error when moving a change to a branch that does not have a label.
  If a change had a score on a label that was only configured on the
  original branch, moving to a destination branch that did not have the
  label caused an internal error.
* Fix internal error when moving a change without specifying the destination.
  Omitting the destination branch in the input caused an internal error.
* Fix internal error when deleting a comment without providing input.
  The input is optional on the [Delete Comment](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15/rest-api-changes.html#delete-comment)
  REST endpoint, but calling it without input resulted in an internal error.
* Fix internal error when rebuilding Note DB and a change is missing from Review DB.
* Fix omission of 'branch' values when saving project config.
  The 'branch' values were omitted when saving the config, resulting in them
  being lost.
* [Issue 9195](https://bugs.chromium.org/p/gerrit/issues/detail?id=9195):
Strip comment lines out of commit message when creating change.
  When a change was created from the UI (or via the 'Create Change' REST
  API), and the commit message consisted of only a subject beginning with
  a hash character (`#`), the change was created with a zero Change-Id.
  This was because lines beginning with `#` are considered to be comments,
  and are stripped from the commit message by JGit before computing the
  Change-Id for the commit.
  Before attempting to create the change, Gerrit now strips out any comment
  lines from the commit message and returns an error if this results in
  the commit message being empty.
* [Issue 9389](https://bugs.chromium.org/p/gerrit/issues/detail?id=9389):
Fix support for syntax highlighting of Clojure source files in the PolyGerrit UI.
* [Issue 5316](https://bugs.chromium.org/p/gerrit/issues/detail?id=5316):
Fix incorrect relative URL paths in Gitiles links in the PolyGerrit UI.
* Fix internal server error when generating email sender name for
non-existing account.
* Add `--generate-http-password` option to the ssh `set-account` command.
  To bring the ssh command more in-line with the REST API for a user, it
  is now possible to generate a new HTTP password.
  This allows ordinary users to generate a new HTTP password via ssh when
  they cannot log in to the web UI (e.g. due to being a service account).
  Access to the `set-account` command is also relaxed; normal users may
  use it to set a new password on their own account.
* Sanitize values of `user.name` and `user.email` from `gerrit.config`.
  The `user.name` and `user.email` settings were being read as-is, which
  would allow them to be configured with values that may interfere with
  standard email name/address parsing.
* Fix the default text in the 'Password' field on the 'HTTP Password' screen
in the GWT UI.
  The default text said "(click 'generate' to revoke an old password)" but the
  label of the button is actually "Generate Password".
* Add reporting of work queue related metrics.
  Metrics are reported for core work queues. For work queues created by plugins,
  metrics are not reported.

### 2.15.2

* [Issue 8861](https://bugs.chromium.org/p/gerrit/issues/detail?id=8861):
Fix generation of change numbers to prevent duplicates.
  When migration to NoteDb was aborted, and then started again later,
  generated change numbers overlapped with change numbers created in
  ReviewDb in the meantime.
* [Issue 8931](https://bugs.chromium.org/p/gerrit/issues/detail?id=8931):
Pass the project name to 'change indexed' event listeners.
  When NoteDb is enabled, the change information is stored in the project's
  git repository. Without the project name, plugins were not able to retrieve
  the change information.
* [Issue 8742](https://bugs.chromium.org/p/gerrit/issues/detail?id=8742):
Fix infinite loop in intraline diff loader.
  A regression introduced in 2.15.1 caused excessive CPU usage when loading
  intraline diffs.
* [Issue 8697](https://bugs.chromium.org/p/gerrit/issues/detail?id=8697):
Restore the ability to ignore invalid review labels.
  In 2.15 the `strict_labels` attribute was removed from the review input
  entity, and Gerrit no longer silently ignores invalid label scores. This
  caused breakage in CI systems that submit reviews post-merge and don't
  have different configurations for if the change is already merged or not.
  For example the Gerrit Trigger Plugin was broken, as
  [discussed on the Gerrit mailing list](https://groups.google.com/forum/?hl=en#!topic/repo-discuss/nMZo3HMgJSY).
  A new configuration [`change.strictLabels`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.15.2/config-gerrit.html#change.strict_labels)
  is introduced. When enabled, Gerrit will reject invalid labels, otherwise
  will silently ignore them. By default it is disabled, for backwards
  compatibility with previous releases.
* [Issue 8728](https://bugs.chromium.org/p/gerrit/issues/detail?id=8728):
Allow percent encoding in patch set titles.
* [Issue 8850](https://bugs.chromium.org/p/gerrit/issues/detail?id=8850):
Fix `reviewerin:` search results when user is added as CC.
  The `reviewerin:` search should only return users that were added as a
  reviewer, but was also including users that were added as CC.
* [Issue 8817](https://bugs.chromium.org/p/gerrit/issues/detail?id=8817):
Fix internal server error when listing projects and a repository is not available.
  The new permission backend was throwing an error when a repository could
  not be found. Now it is simply omitted from the project list.
* [Issue 8643](https://bugs.chromium.org/p/gerrit/issues/detail?id=8643):
Properly display the status of "Work in Progress" changes.
  When a change was submittable (i.e. had all the necessary labels) but
  was still in the "Work in Progress" state, its status was displayed as
  "Merge Conflict" in the change list and the change screen in the GWT UI.
* [Issue 8936](https://bugs.chromium.org/p/gerrit/issues/detail?id=8936):
Add missing 'Hashtags' label on the change screen in the GWT UI.
* [Issue 8916](https://bugs.chromium.org/p/gerrit/issues/detail?id=8916):
Allow ownerin predicate to be evaluated by the index.
* Fix double creation of SSH command execution queues.
* Fix timestamp for submodule updates.
  When a submodule was updated by subscription, the same commit timestamp
  was always used due to the server identity being cached.
* Allow to include username in servlet response header.
  By setting `http.addUserAsResponseHeader`, the servlet response includes
  a 'User' header that contains the name of the logged in user, enabling
  reverse proxies to log the name of the user that issued the http request.
* Fix user permission checks in APIs when invoked via the GerritApi.
  Actions were incorrectly being denied because the user validation
  was comparing user object instances rather than the account ID that
  they represented.
* Allow to replace the default H2 persistent cache with a custom implementation.
  The default H2 persistent cache can be replaced by a module that implements
  the `CacheImpl` interface.
  An implementation is provided for postgresql.
* Various logging improvements.
* Hooks plugin
  * [Issue 9015](https://bugs.chromium.org/p/gerrit/issues/detail?id=9015):
  Add a `submit` hook
    The `submit` hook is invoked synchronously when a change is submitted. If
    it returns a non-zero exit status, a `MergeValidationException` is thrown
    and the submit is prevented.
    This adds back the ability to block submit by a hook which was removed in
    version 2.14 due to the reworking of the `ref-update` hook behavior.
  * Fix repeated instantiation of the `ref-update` and `commit-received` hooks.
    The hooks were not singletons, which caused new instances to be created
    on every invocation.
  * Wrap account ID in quotes when passing as hook argument.
  * Improve logging to make it easier to track down hook execution problems.
    When a hook exits with an error status (i.e. non-zero), or times out, an error
    is now emitted to the log. Previously there was no log on timeout, and the exit
    status was only logged at debug level.
    The configured hooks path and resolved path for hook files is logged at info
    level.
    When a hook file does not exist, a message is logged at debug level.
  * Improve documentation
    * Expand and improve documentation related to debugging hooks.
    * Restructure the hooks page to separate synchronous and asynchronous hooks, and
    add a table of contents.
* PolyGerrit fixes:
  * [Issue 8655](https://bugs.chromium.org/p/gerrit/issues/detail?id=8655):
  Clear suggestions on autocomplete input change.
  * [Issue 8237](https://bugs.chromium.org/p/gerrit/issues/detail?id=8237):
  Link account chips to owner search rather than user dashboard.
  * [Issue 8375](https://bugs.chromium.org/p/gerrit/issues/detail?id=8375):
  Add reset button to my menu in settings.
  * [Issue 7815](https://bugs.chromium.org/p/gerrit/issues/detail?id=7815):
  Don't curse over files with up/down keys.
  * [Issue 8722](https://bugs.chromium.org/p/gerrit/issues/detail?id=8722):
  Limit assignee suggestion to users that can see the change.
    This was fixed for the GWT UI in [2.15.1](#2.15.1).
  * [Issue 8940](https://bugs.chromium.org/p/gerrit/issues/detail?id=8940):
  Fix loading change edit on change screen.
  * [Issue 4552](https://bugs.chromium.org/p/gerrit/issues/detail?id=4552):
    Allow some sections of the change list to overflow
  * Add a link to group page in groups section of settings.
  * Make sure plugins are not double counted.
* Elasticsearch fixes
  * [Issue 8523](https://bugs.chromium.org/p/gerrit/issues/detail?id=8523):
  Fix configuration of elasticsearch during site initialization.
    When the site was initialized with Elasticsearch as the secondary index,
    the `elasticsearch.prefix` was not set, and Elasticsearch server-specific
    settings were not correctly set under `elasticsearch.name.protocol`, etc.
  * [Issue 8527](https://bugs.chromium.org/p/gerrit/issues/detail?id=8527):
Improve documentation of `index.maxLimit` for Elasticsearch.
    When using Elasticsearch, `index.maxLimit` should not exceed the value
    of `index.max_result_window` configured on the Elasticsearch server.
  * [Issue 8553](https://bugs.chromium.org/p/gerrit/issues/detail?id=8553):
  Fix reindexing of an already initialized site with Elasticsearch.
  * [Issue 8690](https://bugs.chromium.org/p/gerrit/issues/detail?id=8690):
  Allow to use the `index start` and `index activate` ssh commands with Elasticsearch.
  * [Issue 8525](https://bugs.chromium.org/p/gerrit/issues/detail?id=8525):
  Fix setting of changed lines in the change info.
  * [Issue 8588](https://bugs.chromium.org/p/gerrit/issues/detail?id=8588):
  Fix setting the star icon status in the change info.
  * [Issue 8806](https://bugs.chromium.org/p/gerrit/issues/detail?id=8806):
  Fix online reindex to new index version.
  * Change default Elasticsearch prefix to `gerrit_`.

### 2.15.1
* [Issue 8677](https://bugs.chromium.org/p/gerrit/issues/detail?id=8677):
Fix internal error when sending raw input to PUT and POST REST endpoints. In
particular, this caused errors when using the plugin manager to update or
install plugins.
* [Issue 5181](https://bugs.chromium.org/p/gerrit/issues/detail?id=5181):
Limit assignee suggestion to users that can see the change.
* [Issue 6112](https://bugs.chromium.org/p/gerrit/issues/detail?id=6112):
Add support for "Included In" in the PolyGerrit change screen.
* [Issue 6583](https://bugs.chromium.org/p/gerrit/issues/detail?id=6583):
Fix false negatives for edits due to rebase.
* [Issue 8574](https://bugs.chromium.org/p/gerrit/issues/detail?id=8574):
Fix refresh of PolyGerrit change list with "Shift + R".
* [Issue 8703](https://bugs.chromium.org/p/gerrit/issues/detail?id=8703):
Fix false warning in server log when creating a new project.
* [Issue 8252](https://bugs.chromium.org/p/gerrit/issues/detail?id=8252):
Improve error message in PolyGerrit when adding a group member to a group that
does not exist or is not viewable for the current user.
* Allow admins to toggle the WIP flag on all changes.
* Fix internal server error when group UUID cannot be resolved when getting audit log.
* Display group UUID in group audit log if group name is missing.
  The group name can be missing if there is no group backend that handles the
  group. This can happen for example if a plugin that handled the group was
  removed.
* Fix removal of email/password on external ID update.
* Replication plugin:
    * Fix creation of missing repository.
      When replicating to a destination where the repository does not exist,
      updating the `HEAD` reference failed because the passed reference name was
      not absolute.
    * Add documentation of how to exclude repositories from replication.
    * Fix logging of new project creation and project deletion.
      The "created" and "deleted" logs were emitted even when the operation
      failed.
* Allow graceful rolling restarts
  Set a graceful stop timeout for allowing Jetty to wait for incoming requests
  to be completed before shutting down its sockets.
