blob: cf782e7ad07457fdaf6c95deb42e7457bf4047d1 [file] [log] [blame] [view]
---
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.