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

Download: **[2.13.14](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.14.war)**
| [2.13.13](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.13.war)
| [2.13.12](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.12.war)
| [2.13.11](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.11.war)
| [2.13.10](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.10.war)
| [2.13.9](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.9.war)
| [2.13.8](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.8.war)
| [2.13.7](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.7.war)
| [2.13.6](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.6.war)
| [2.13.5](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.5.war)
| [2.13.4](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.4.war)
| [2.13.3](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.3.war)
| [2.13.2](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.2.war)
| [2.13.1](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.1.war)
| [2.13](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.war)

Documentation: **[2.13.14](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.14/index.html)**
| [2.13.13](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.13/index.html)
| [2.13.12](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.12/index.html)
| [2.13.11](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.11/index.html)
| [2.13.10](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.10/index.html)
| [2.13.9](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.9/index.html)
| [2.13.8](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.8/index.html)
| [2.13.7](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.7/index.html)
| [2.13.6](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.6/index.html)
| [2.13.5](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.5/index.html)
| [2.13.4](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.4/index.html)
| [2.13.3](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.3/index.html)
| [2.13.2](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.2/index.html)
| [2.13.1](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.1/index.html)
| [2.13](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/index.html)

## Release Highlights
* Suport for multiple database backends for "reviewed" flags (from 2.13.8)
* Support for Large File Storage (LFS)
* Metrics interface
* Hooks plugin
* Secondary index for accounts
* File annotations (blame) in side-by-side diff

## Important Notes

### Schema Changes
This release contains schema changes. To upgrade:
``` sh
  java -jar gerrit.war init -d site_path
```

### HTTPS TLS1.1 support discontinued by Maven Central.
As of June 18th 2018, Maven Central
[discontinued support for TLS v1.1 and below](https://central.sonatype.org/articles/2018/May/04/discontinue-support-for-tlsv11-and-below/).
When initializing a new site with Java 7, this causes download of third
party dependencies such as the MySQL connector to fail. It is therefore
necessary to explicitly enable TLS v1.2 on the invocation of java:

``` sh
  java -Dhttps.protocols=TLSv1.2 gerrit.war init -d site_path
```

This does not affect Java 8, which enables TLS v1.2 by default.

### Workaround for deprecated/removed Bower repository.
In October 2017, Bower
[removed the repository used for binary distributions](https://twitter.com/bower/status/918073147789889536),
which causes clean builds of Gerrit to fail.

To workaround this problem, either cherry-pick
[this commit](https://gerrit-review.googlesource.com/c/gerrit/+/188097), or
add a `.bowerrc` file to the source root directory with the following content:

``` json
{
  "registry": "https://registry.bower.io"
}
```

### Manual Schema Update for Reviewed Flags

Sites that have already upgraded to version 2.13 may want to migrate from the
default H2 database to MySQL or PostgreSQL. This can be done using the
[MigrateAccountPatchReviewDb](http://gerrit-documentation.storage.googleapis.com/Documentation/2.13.8/pgm-MigrateAccountPatchReviewDb.html)
program.

Sites that have already upgrade to version 2.13 before 2.13.8 need to manually
migrate the reviewed flags database to change the `file_name` column length.
After stopping Gerrit, enter the H2 console:

``` sh
java -jar /path/to/h2.jar -url jdbc:h2:path/to/review_site/db/account_patch_reviews
```

and then execute the following statement:

``` sql
ALTER TABLE account_patch_reviews ALTER COLUMN file_name VARCHAR(4096) DEFAULT '' NOT NULL
```

Depending on the number of rows, this operation may take some time. For
example, one million rows may take up to 1 minute.

### Online Reindexing
To use online reindexing for the `changes` secondary index when upgrading
to 2.13.x, the server must first be upgraded to 2.8 (or 2.9) and then through
2.10, 2.11 and 2.12. Skipping a version will prevent the online reindexer from
working.
Gerrit 2.13 introduces a new secondary index for accounts, and this must be
indexed offline before starting Gerrit:

``` sh
  java -jar gerrit.war reindex --index accounts -d site_path
```

If reindexing will be done offline, you may ignore these warnings and upgrade
directly to 2.13.x using the following command that will reindex both `changes`
and `accounts` secondary indexes:

``` sh
  java -jar gerrit.war reindex -d site_path
```

### Hooks Plugin
The server side hooks functionality is moved to a core plugin. Sites
that make use of server side hooks must install this plugin during site init.

## New Features

### Large File Storage (LFS)
Gerrit provides an [extension point](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/dev-plugins.html#lfs-extension)
that enables development of plugins implementing the
[LFS protocol](https://github.com/github/git-lfs/blob/master/docs/api/v1/http-v1-batch.md).
By setting
[`lfs.plugin`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#lfs.plugin)
the administrator can configure the name of the plugin which handles LFS requests.

### Access control for git submodule subscriptions
To prevent potential security breaches as described in
[issue 3311](https://bugs.chromium.org/p/gerrit/issues/detail?id=3311), it is now
only possible for a project to subscribe to a submodule if the submodule
explicitly allows itself to be subscribed.
Please see the
[submodules user guide](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-submodules.html)
for details.
Note that when upgrading from an earlier version of Gerrit, permissions for
any existing subscriptions will be automatically added during the database
schema migration.

### Metrics
Metrics about Gerrit's internal state can be sent to external
monitoring systems.
Plugins can provide implementations of the metrics interface to
report metrics to different monitoring systems. The following
plugins are available:
* [JMX](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-jmx)
* [Graphite](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-graphite)
* [Elasticsearch](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-elasticsearch)
Plugins can also provide their own metrics.
See the
[metrics documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/metrics.html)
for further details.

### Hooks
Server side hooks are moved to the
[hooks plugin](https://gerrit-review.googlesource.com/#/admin/projects/plugins/hooks).
Sites that make use of server side hooks should install this
plugin. After installing the plugin, no additional configuration is needed.
The plugin uses the same configuration settings in `gerrit.config`.

### Secondary Index
* The secondary index now supports indexing of accounts.
  The
  [reindex program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/pgm-reindex.html)
  by default reindexes all changes and accounts. A new
  option allows to explicitly specify whether to reindex changes or accounts.
  The `suggest.fullTextSearch`, `suggest.fullTextSearchMaxMatches` and
  `suggest.fullTextSearchRefresh` configuration options are removed. Full text
  search is supported by default with the account secondary index.
* New ssh command to
[reindex changes](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/cmd-index-changes.html).

### User Interface
* The UI can now be loaded in an iFrame by enabling
[`gerrit.canLoadInIFrame`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#gerrit.canLoadInIFrame)
in the site configuration.

#### Change Screen
* [Issue 106](https://bugs.chromium.org/p/gerrit/issues/detail?id=106):
Allow to select merge commit's parent for diff base in change screen.
* [Issue 3035](https://bugs.chromium.org/p/gerrit/issues/detail?id=3035):
Allow to remove specific votes from a change, while leaving the reviewer on the
change.
* [Issue 3487](https://bugs.chromium.org/p/gerrit/issues/detail?id=3487):
Use 'Ctrl-Alt-e' instead of 'e' to open edit mode.

#### Diff Screens
* Add all syntax highlighting available in CodeMirror.
* Improve search experience in diff screen.
  Ctrl-F, Ctrl-G and Shift-Ctrl-G now bind to the search dialog box provided by
  CodeMirror's search add-on. Enter and Shift-Enter navigate among the search
  results from the CodeMirror search, just like they do in a normal browser
  search. Esc now clears the search result.
  If the user sets `Render` to `Slow` in the diff preferences and the file is less
  than 4000 lines (huge), then Ctrl-F, Ctrl-G and Shift-Ctrl-G fall back to the
  browser search.
* [Issue 2968](https://bugs.chromium.org/p/gerrit/issues/detail?id=2968):
Allow to go back to change list by keyboard shortcut from diff screens.
* Blame annotations.
  By enabling
  [`change.allowBlame`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#change.allowBlame),
  blame annotations can be shown in the side-by-side diff
  screen gutter.

#### User Preferences
* [Issue 989](https://bugs.chromium.org/p/gerrit/issues/detail?id=989):
New option to control email notifications.
  Users can now choose between 'Enabled', 'Disabled' and 'CC Me on Comments I Write'.
* New option to control adding 'Signed-off-by' footer in commit message of new changes
created online.
* New option to control auto-indent width in inline editor.
* [Issue 890](https://bugs.chromium.org/p/gerrit/issues/detail?id=890):
New diff option to control whether to skip unchanged files when navigating to
the previous or the next file.

### Changes
In order to avoid potentially confusing behavior, when submitting changes in a
batch, submit type rules may not be used to mix submit types on a single branch,
and trying to submit such a batch will fail.

### REST API

#### Accounts
* [Issue 3766](https://bugs.chromium.org/p/gerrit/issues/detail?id=3766):
Allow users with the
['ModifyAccount' capability](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/access-control.html#capability_modifyAccount)
to get the preferences for other users via the
[Get User Preferences endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-user-preferences).
* Rename 'Suggest Account' to
['Query Account'](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#query-account)
and add support for arbitrary account queries.
  The `_more_accounts` flag is set on the last result when there are more results
  than the limit. The `DETAILS` and `ALL_EMAILS` options may be set to control
  whether the results should include details (full name, email, username, avatars)
  and all emails, respectively.
* New endpoint:
[Get Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-watched-projects).
* New endpoint:
[Set Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#set-watched-projects).
* New endpoint:
[Delete Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#delete-watched-projects).
* New endpoint:
[Get Star Labels from Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-stars).
* New endpoint:
[Update Star Labels on Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#set-stars).
* New endpoint:
[Get OAuth Access Token](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-oauth-token).
* New endpoint:
[List Contributor Agreements](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#list-contributor-agreements).
* New endpoint:
[Sign Contributor Agreement](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#sign-contributor-agreement).

#### Changes
* [Issue 3579](https://bugs.chromium.org/p/gerrit/issues/detail?id=3579):
Append submitted info to ChangeInfo.
* New endpoint:
[Move Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-changes.html#move-change).

#### Groups
* Add `-s` as an alias for `--suggest` on the
[Suggest Group endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-groups.html#suggest-group).

#### Projects
* Add `async` option to the
[Run GC endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#run-gc)
to allow garbage collection to run asynchronously.
* New endpoint:
[List Access Rights](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#get-access).
* New endpoint:
[Add, Update and Delete Access Rights](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#set-access).
* New endpoint:
[Create Tag](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#create-tag).
* New endpoint:
[Get Mergeable Information](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#get-mergeable-info).

### Plugins
* Secure settings
  Plugins may now store secure settings in `etc/$PLUGIN.secure.config` where they
  will be decoded by the Secure Store implementation.
* Exported dependencies
  Gson is now an exported dependency. Plugins no longer need to explicitly add
  a dependency on it.

### Misc
* New project option to reject implicit merge commits.
  The 'Reject Implicit Merges' option can be enabled to prevent non-merge commits
  from implicitly bringing unwanted changes into a branch. This can happen for
  example when a commit is made based on one branch but is mistakenly pushed to
  another, for example based on `refs/heads/master` but pushed to `refs/for/stable`.
* New
[Add Patch Set capability](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/access-control.html#category_add_patch_set)
to control who is allowed to upload a new patch set to an existing change.
* [Issue 4015](https://bugs.chromium.org/p/gerrit/issues/detail?id=4015):
Allow setting a
[comment message](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-upload.html#message)
when uploading a change.
* Allow to specify
[who should be notified by email](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-upload.html#notify)
when uploading a change.
* [Issue 3220](https://bugs.chromium.org/p/gerrit/issues/detail?id=3220):
Append approval info to every comment-added stream event and hook.
* The `administrateServer` capability can be assigned to groups by setting
[`capability.administrateServer`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#capability.administrateServer)
in the site configuration.
  Configuring this option can be a useful fail-safe to recover a server in the
  event an administrator removed all groups from the `administrateServer`
  capability, or to ensure that specific groups always have administration
  capabilities.
* New configuration options to configure JGit repository cache parameters.
  [core.repositoryCacheCleanupDelay](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#core.repositoryCacheCleanupDelay)
  and [core.repositoryCacheExpireAfter](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#core.repositoryCacheExpireAfter)
  can be configured.
* Accept `-b` as an alias of `--batch` in the
[init program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/pgm-init.html).

## Bugfixes
* Don't add the same SSH key multiple times.
  If an already existing SSH key was added, a duplicate entry was added to the
  list of user's SSH keys.
* Respect the 'Require a valid contributor agreement to upload' setting
when creating changes via the UI.
  If a user had not signed a CLA, it was still possible for them to create a new
  change with the 'Revert' or 'Cherry Pick' button.
* Make Lucene index more stable when being interrupted.
* Don't show the `start` and `idle` columns in the `show-connections`
output when the ssh backend is NIO2.
  The NIO2 backend doesn't provide the start and idle times, and the
  values being displayed were just dummy values. Now these values are
  only displayed for the MINA backend.
* [Issue 6965](https://bugs.chromium.org/p/gerrit/issues/detail?id=6965):
Fix 'missing tree' on repos where `git prune` has been run.
* [Issue 4150](https://bugs.chromium.org/p/gerrit/issues/detail?id=4150):
Deleting a draft inline comment no longer causes the change's `Updated` field to
be bumped.
* [Issue 4099](https://bugs.chromium.org/p/gerrit/issues/detail?id=4099):
Fix SubmitWholeTopic does not update subscriptions.
* [Issue 3603](https://bugs.chromium.org/p/gerrit/issues/detail?id=3603):
Fix editing a submodule via inline edit.
* [Issue 4069](https://bugs.chromium.org/p/gerrit/issues/detail?id=4069):
Fix highlights in scrollbar overview ruler not moved when extending the
displayed area.
* [Issue 3446](https://bugs.chromium.org/p/gerrit/issues/detail?id=3446):
Respect the `Skip Deleted` diff preference.
* [Issue 3445](https://bugs.chromium.org/p/gerrit/issues/detail?id=3445):
Respect the `Skip Uncommented` diff preference.
* [Issue 4051](https://bugs.chromium.org/p/gerrit/issues/detail?id=4051):
Fix empty `From` email header.
* [Issue 3423](https://bugs.chromium.org/p/gerrit/issues/detail?id=3423):
Fix intraline diff for added spaces.
* [Issue 1867](https://bugs.chromium.org/p/gerrit/issues/detail?id=1867):
Remove `no changes made` error case when the only difference between a new
commit and the previous patch set of the change is the committer.
* [Issue 3831](https://bugs.chromium.org/p/gerrit/issues/detail?id=3831):
Prevent creating groups with the same name as a system group.
* [Issue 3754](https://bugs.chromium.org/p/gerrit/issues/detail?id=3754):
Fix `View All Accounts` permission to allow accounts REST endpoint to access
email info.
* Make `gitweb.type` default to `disabled` when not explicitly set.
  Previously the behavior was not documented and it would default to type
  `gitweb`. In cases where there was no gitweb config at all, this would
  result in broken links due to `null` being used as the URL.
* [Issue 4488](https://bugs.chromium.org/p/gerrit/issues/detail?id=4488):
Improve error message when `Change-Id` line is missing in commit message.
  The error message now includes the sha1 of the commit, so that it is
  easier to track down which commit failed validation when multiple commits
  are pushed at the same time.
* Don't check mergeability of draft changes.
  Draft changes can be deleted but not abandoned so there is no way for
  an administrator to get rid of the them on behalf of the users. This can
  become a problem when there many draft changes because the mergeability
  check can be costly.
  The mergeability check is no longer done for draft changes, but will be
  done when the draft change is published.
* Fix internal server error when plugin-provided file history weblink
is null.
  It is valid for a plugin to provide a null weblink, but doing so resulted
  in an internal server error.

## Dependency Updates
* Add dependency on blame-cache 0.1-9
* Add dependency on guava-retrying 2.0.0
* Add dependency on jsr305 3.0.1
* Add dependency on metrics-core 3.1.2
* Upgrade auto-value to 1.3-rc1
* Upgrade commons-net to 3.5
* Upgrade CodeMirror to 5.17.0
* Upgrade Guava to 19.0
* Upgrade Gson to 2.7
* Upgrade Guice to 4.1.0
* Upgrade gwtjsonrpc to 1.9
* Upgrade gwtorm to 1.15
* Upgrade javassist to 3.20.0-GA
* Upgrade Jetty to 9.2.14.v20151106
* Upgrade JGit to 4.5.0.201609210915-r
* Upgrade joda-convert to 1.8.1
* Upgrade joda-time to 2.9.4
* Upgrade Lucene to 5.5.0
* Upgrade mina to 2.0.10
* Upgrade sshd-core to 1.2.0

## Bugfix Releases

### 2.13.14

* **WARNING:** with this release Gerrit requires Java 8.

  Gerrit now requires Java Runtime Environment (JRE) version 8. It is no longer
  possible to run Gerrit on JRE 7.

  Official support for Java 7 was
  [discontinued in April 2015](https://www.java.com/en/download/faq/java_7.xml).

* [Issue 10695](https://bugs.chromium.org/p/gerrit/issues/detail?id=10695):
Upgrade JGit to 4.5.7.201904151645-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.

* Upgrade SSHD to 1.4 and mina core to 2.0.16.

  These versions move to Java 8 and fix several bugs.

### 2.13.13

* [Issue 10562](https://bugs.chromium.org/p/gerrit/issues/detail?id=10562):
Upgrade JGit to 4.5.6.201903121547-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.

### 2.13.12

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

  See the following section for details.

* Upgrade JGit to 4.5.5.201812240535-r.

  This upgrade includes several versions since 4.5.2 used in Gerrit
  version 2.13.11. Important fixes are summarized below. Please refer to the
  corresponding JGit release notes for full details.

  * [JGit 4.5.5](https://projects.eclipse.org/projects/technology.jgit/releases/4.5.5):

    * [Issue 10262](https://bugs.chromium.org/p/gerrit/issues/detail?id=10262):
    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.

  * [JGit 4.5.4](https://projects.eclipse.org/projects/technology.jgit/releases/4.5.4):

    * Fix LockFile semantics when running on NFS.
    * Honor trustFolderStats also when reading packed-refs.

  * [JGit 4.5.3](https://projects.eclipse.org/projects/technology.jgit/releases/4.5.3):

    * Fix exception handling for opening bitmap index files.

### 2.13.11
* Upgrade jsch to 0.1.54 to fix [CVE-2016-5725](https://nvd.nist.gov/vuln/detail/CVE-2016-5725):
Directory traversal vulnerability.
  Versions of jsch prior to 0.1.54 have a directory traversal vulnerability
  on Windows. When the mode is `ChannelSftp.OVERWRITE`, it allows remote SFTP
  servers to write to arbitrary files via a `..\` (dot dot backslash) in a
  response to a recursive `GET` command.
  For other fixes in jsch since 0.1.53, please refer to the
  [jsch change log](http://www.jcraft.com/jsch/ChangeLog).
* Fix null pointer exception in event dispatcher when event contains a null account
attribute.
  The account attribute can be null for example in the `change-abandoned` event
  generated for changes abandoned by Gerrit's auto cleanup.

### 2.13.10
* [Issue 7425](https://bugs.chromium.org/p/gerrit/issues/detail?id=7425):
Add `sshd.waitTimeout` configuration to set `WAIT_FOR_SPACE_TIMEOUT`.
  In sshd a new channel property,
  [channel-output-wait-for-space-timeout](https://issues.apache.org/jira/browse/SSHD-565),
  was introduced with a default value of 30 seconds.
  This was not being set, causing any clone operations lasting longer
  than 30 seconds to fail.
  Administrators may now increase this value by setting
  [`sshd.waitTimeout`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.13.10/config-gerrit.html#sshd.waitTimeout).
* [Issue 8279](https://bugs.chromium.org/p/gerrit/issues/detail?id=8279):
Always check for `Change-Id` in subject line during commit validation:
  A commit with an empty commit message except for a `Change-Id` line in
  the subject was only rejected if "Require Change-Id" was enabled.
* [Issue 8280](https://bugs.chromium.org/p/gerrit/issues/detail?id=8280):
Fix validation of `Change-Id` line when creating changes from the UI:
  When a change was created via the UI (or via the REST API), the `Change-Id`
  footer line was not validated. This resulted in it being possible to
  create a change with an invalid `Change-Id`.
* [Issue 8284](https://bugs.chromium.org/p/gerrit/issues/detail?id=8284):
Fix unnecessary addition of `Change-Id` to changes created from the UI:
  When a change was created via the UI (or via the REST API), a `Change-Id`
  line was added without first checking if one already existed.
* [Issue 8299](https://bugs.chromium.org/p/gerrit/issues/detail?id=8299):
Fix insertion of `Signed-off-by` line after existing footer lines in changes
created from the UI.
  When a change was created via the UI (or via the REST API) and the
  commit message included a `Change-Id` line or any other footer line,
  the `Signed-off-by` footer was appended to the end of the last footer
  instead of on a new line.
* Fix parsing of permissions when expanding parameters.
* Keep old timestamps during data migration.
  In some cases the "created on" field was updated to the time of the migration
  when replacing the "Submitted" state with "New".
* Don't use account index to look up external IDs when authenticating with
OAuth or OpenID.
  The account index is not available on slaves, causing authentication
  with OAuth and OpenID to fail.
* Replication plugin: Fix replication retries when `maxRetries` is set to 0.

### 2.13.9
* [Issue 6176](https://bugs.chromium.org/p/gerrit/issues/detail?id=6176):
Fix internal server error when old patch set is not found.
* [Issue 6605](https://bugs.chromium.org/p/gerrit/issues/detail?id=6605):
Fix searching for change by Change-Id triplet when project name matches Change-Id pattern.
  For projects whose name matched the Change-Id pattern, i.e. named something
  like `iabcde`, it was not possible to search for changes using the Change-Id
  triplet `project~branch~changeId`.
* [Issue 3345](https://bugs.chromium.org/p/gerrit/issues/detail?id=3345):
Preserve line endings in inline editor.
  When a file with Windows line endings was edited all the line ending
  characters were replaced by Unix style line endings.
* Fix line wrapping in inline editor.
  The line wrapping preference was respected for the diff screens, but not
  for the inline editor.
* Fix cyclic dependency when using `site_path` from `system_config` table.
  The starting mode where `site_path` is not specified (as a system property)
  and Gerrit first connects to the database using the ReviewDb JNDI property
  from the servlet container was broken since version 2.13 due to a cyclic
  dependency in Guice bindings.
* Extend upload validation interface to allow listening to negotiation start.
  This can be used to check rate limits for fetch requests. Rate limits
  should be checked before git transport negotation starts to avoid
  unnecessary work in case the limit is already reached.
* Allow to set Jetty HTTPD socket timeout.
  A new setting [`httpd.idleTimeout`](http://gerrit-documentation.storage.googleapis.com/Documentation/2.13.9/config-gerrit.html#httpd.idleTimeout)
  makes the Jetty HTTPD socket timeout configurable so to tailor the socket
  and thread consumption to the needs of setups with different latencies and
  bandwidth.
* Add metrics for reviewer suggestion.
  The metrics `reviewer_suggestion/query_accounts` and `reviewer_suggestion/query_groups`
  record the latency of querying accounts and groups for reviewer suggestion.

### 2.13.8
* Improvements in "reviewed" flags cache
    * [Issue 5906](https://bugs.chromium.org/p/gerrit/issues/detail?id=5906):
    Fix performance regression.
    * Fix SQL statements used to clear "reviewed" flags.
        The SQL statements were using `+` rather than `=` which resulted in
        more entries than expected being deleted.
    * Fix `file_name` column length.
* Upgrade JGit to 4.5.2.201704071617-r.
  This includes more fixes for handling of invalid packfiles. See
  [JGit bug 514170](https://bugs.eclipse.org/bugs/show_bug.cgi?id=514170)
  for details.
* [Issue 5817](https://bugs.chromium.org/p/gerrit/issues/detail?id=5817):
Be more consistent about object ids used in ref operation validation.
  The `ReceiveCommand` passed to `RefOperationValidationListener` did not
  always have the old and new objectd Ids set, which could result in crashes
  when dereferenced by plugins.
* Fix potential server error when extracting footer lines from commits.
* Fix merging a merge commit that refers to commits not submitted as changes.
* Fix redundant notifications on change screen.
* Allow project owner to use set-project ssh command.
  REST API and UI allow project owner to change the project settings so
  inconsistency is fixed by allowing the same in the ssh command.
* Add an `account indexed` extension point.
  Similar to the existing `change indexed` extension point, this allows plugins
  to be notified when an account has been indexed.

### 2.13.7
* Prevent circular module dependency when running in external container.
  Since 2.13 it was not possible to run Gerrit in an external container
  due to circular dependency between the database module and the note DB
  migration module.
  This is fixed, but the site path must be explicitly set in a system
  property: `-Dgerrit.site_path=/path/to/gerrit`.
* Use submitter's identity for merge commit in Rebase if Necessary.
  When a merge commit was not fast-forward, gerrit created a "merge of merge"
  commit with its server identity instead of the submitter's identity.
* [Issue 4637](https://bugs.chromium.org/p/gerrit/issues/detail?id=4637):
Fix "Class not found" errors when running on IBM JDK.
  The metrics module had a dependency on com.sun internal classes that
  are not available in the JRE from other providers such as IBM, resulting
  in ClassNotFound exceptions when initializing the CPU usage metric.
* [Issue 5689](https://bugs.chromium.org/p/gerrit/issues/detail?id=5689):
Fix internal server error when directory in git root is inaccessible.
  If a directory in the site's git root was not accessible, an internal
  server error prevented the list of projects from being populated.
* [Issue 5652](https://bugs.chromium.org/p/gerrit/issues/detail?id=5652):
reviewnotes plugin: Fix export of review notes.
* [Issue 5190](https://bugs.chromium.org/p/gerrit/issues/detail?id=5190):
Fix email notifications when adding new reviewers.
* [Issue 5055](https://bugs.chromium.org/p/gerrit/issues/detail?id=5055):
Fix cache eviction order when linking new external IDs.
* [Issue 5727](https://bugs.chromium.org/p/gerrit/issues/detail?id=5727):
Fix failure to start when JVM does not support CPU and file descripto metrics.
* Allow to continue reindex despite failures.
  If indexing a change failed for some reason, indexing would be stopped
  and remaining changes would not be indexed. Now an error message will
  be displayed and indexing will continue.
* Allow user with "Maintain Server" permission to find all changes.
  Allowing users delegated to maintain the server to find non-visible
  changes in the CLI allows them to perform ad-hoc indexing.
* Fix deletion of the last file from config branch.
  If the last file was deleted from the config branch, the file was not
  actually deleted and the original content was kept. For example this
  occurred when deleting all project watches when the `watch.config` file
  was the only file on the branch.
* Support at-sign (`@`) in usernames.
  Some federated identity systems, such as [Shibboleth](https://shibboleth.net/),
  use login names including the at-sign.
* Enable systemd socket activation.
  By setting
  [`httpd.inheritChannel`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#httpd.inheritchannel)
  to true, the server can be socket activated by `systemd` or `xinetd`.
* Be more consistent about object ids used in ref operation validation.
  In some cases the new and old Ids were not set, which could cause null
  pointer exceptions in ref operation validations listeners trying to
  dereference them.
* Upgrade JGit to 4.5.1.201703201650-r.
  Among other bug fixes, this version includes a fix for packfile list
  inconsistency in memory due to temporary lack of system resources during
  read, which caused transient "file not found" errors.

### 2.13.6
* Allow Git LFS to authenticate via SSH.
  LFS plugins can now provide an implementation of `git-lfs-authenticate`
  which allows the Git LFS client to use the SSH protocol to either obtain
  the LFS endpoint URL or authorize the following LFS upload/download
  operation.
* Allow Git LFS to authenticate via HTTP.
  Git LFS requests include the authorization as HTTP Basic but
  this was ignored and the user was treated as anonymous.
* Don't require Add Patch Set permission for submit by rebase.
  When the submit strategy was Rebase If Necessary and
  a rebase was needed for the submit, the submit failed if the user
  didn't have the Add Patch Set permission. However for submitting a
  change the Submit permission alone should be sufficient.
  The behavior is now consistent with the Cherry-Pick submit strategy
  which also doesn't require the Add Patch Set permission if a
  cherry-pick is done on submit.
* Add a [passwd program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.6/pgm-passwd.html)
to set values in the `secure.config` file when a secure store implementation
is used.
* Allow plugins to define their own prefix for metrics reporting.
  By setting `plugin.name.metricsPrefix` plugins can set the root
  name under which their metrics are reported.
* Allow HTTP password when using LDAP and basic authentication.
  It was not possible to use HTTP password to validate git over
  HTTP and REST API requests if LDAP was used along with HTTP basic
  authentication.
* Allow callers to define notify handling when adding reviewers to a
  change by REST API.
* [Issue 4563](https://bugs.chromium.org/p/gerrit/issues/detail?id=4563):
Only send one email when reviewers are added to a change in bulk.
* [Issue 5237](https://bugs.chromium.org/p/gerrit/issues/detail?id=5237):
Don't truncate long lines in diff screens.
* [Issue 5298](https://bugs.chromium.org/p/gerrit/issues/detail?id=5298):
Fix history token in Groups screen's "Members" tab.
* Fix garbled text with Unicode display names obtained from HTTP headers.
* Make error message for rejecting Egit placeholder Change-Id consistent.
* Fix naming and prompt message for password entry in init steps.
* Fix Gitweb review link generation.
* Hooks plugin: emit metrics for hook execution latency, count, and errors.
* Submodule fixes
    * Don't use fast-forward to update submodule subscription when superproject
    has a merge submit strategy.
    * Fix sorting of subscribed branches in submodule update.
    * Fix handling of submodule config entries.
    * Fix ordering of projects in submodule update.

### 2.13.5
* [Issue 5200](https://bugs.chromium.org/p/gerrit/issues/detail?id=5200):
Ensure that indexes are closed properly on shutdown.
  The indexes were not closed on shutdown, which caused data to be lost
  due to not being flushed to disk.
* Enable the 'Delete Edit' button for merged changes.
  If a merged change has an edit revision, it should still be possible
  to delete the edit.
* Do not check visibility of parent project when creating a new project.
  A project can be visible to a user but not necessarily its parent. To
  be consistent, a user with create-project permission should be able to
  create a project with a parent that exists even if the parent is not
  visible to the user.
* Fix 'Can't insert change/patch set' error when prior patch set has no
parent, but next patch set has 1 parent.
* [Issue 5179](https://bugs.chromium.org/p/gerrit/issues/detail?id=5179):
Make startup timeout configurable.
  By setting `container.startupTimeout` it is possible to configure the
  maximum time to wait for the `gerrit.sh start` command to run a new
  Gerrit daemon successfully.
* [Issue 4715](https://bugs.chromium.org/p/gerrit/issues/detail?id=4715):
Add missing reviewers visibility check for suggestions from account index.
* Fix Gitweb HTTP URL generation.
  The generated Gitweb URL contained an invalid 'p' character, and did
  not require authentication for projects not visible to anonymous users.

### 2.13.4
* [Issue 5090](https://bugs.chromium.org/p/gerrit/issues/detail?id=5090):
Fix overwriting of another user's account external Id.
* [Issue 4909](https://bugs.chromium.org/p/gerrit/issues/detail?id=4909):
Fix broken Gitweb weblink for config history on project access page.
* [Issue 4908](https://bugs.chromium.org/p/gerrit/issues/detail?id=4908):
Add back support for parent revision weblinks.
  Support for weblinks for the parent revision(s) was removed in 2.13 but
  this functionality is still wanted by some users. Support is added back,
  by allowing plugins to provide a specific link for parent revisions. For
  the built-in Gitweb links, the link template provided by the `revision`
  setting is used.
* Add DB connection pool verification.
  There was no verification of the connection pool, so a broken connection
  would result in an internal server error when trying to read a change
  from the database.
* Add support for moving a change's destination branch with the SSH `review`
command.
  Version 2.13 introduced the 'move change' REST endpoint, but support via ssh
  was omitted.
* Add REST endpoint to reindex a single account.
  The new endpoint is useful to manually reindex a single account that has
  become stale in the index.

### 2.13.3
* [Issue 4633](https://bugs.chromium.org/p/gerrit/issues/detail?id=4633):
Filter out unrelated projects when getting project watches from index.
* [Issue 4848](https://bugs.chromium.org/p/gerrit/issues/detail?id=4848):
Upgrade Postgresql JDBC driver to 9.4.1211.jre7.
  Older versions of Postgresql JDBC driver rely on finalize() methods in
  order to avoid leaking unclosed database objects. Given finalize
  methods are unpredictable (no guarantee about prompt execution, if at
  all), in some high load environments this could lead to a memory leak
  with millions of JDBC objects pending finalization.
* [Issue 4841](https://bugs.chromium.org/p/gerrit/issues/detail?id=4841):
Hooks plugin: Make sure `GIT_DIR` environment variable is set in `ref-update`
hook.
* [Issue 4911](https://bugs.chromium.org/p/gerrit/issues/detail?id=4911):
Fix internal server error when providing an invalid Change-Id to the
index ssh command.
* [Issue 4643](https://bugs.chromium.org/p/gerrit/issues/detail?id=4643):
Strip newlines out of ssh public keys.
  If an ssh public key contained newlines, each line was migrated to the
  git backend as a separate key, each of which was considered invalid. Now,
  newlines are stripped out. Note that this fix is not effective for sites
  that have already been migrated to 2.13.x from an earlier version.
* Restore the `--format` option on the list plugins REST API endpoint.
  Removing the `--format` option from the REST API had the side effect of
  also removing it from the corresponding ssh command, which was a breaking
  change for some users.
* Fix classpath collision with Servlet API for GWT plugins.
* Hooks plugin: Always return the output from the `ref-update` hook.
  The output of the `ref-update` hook is now sent back to the client.
* Fix migration to schema version 127 on case-sensitive file systems.
* Fix internal server error when using `has:draft` search predicate.
* Fix internal server error caused by plugin returning null for
external included-in.
* Fix internal server error in `set-members` command when a group
to be added is not visible to the caller.
* Fix reindexing change by ssh command.
  When reindexing a change by ssh, the change was loaded from the
  index rather than from the database.
* Export prolog runtime in plugin API.

### 2.13.2
* Allow to delete caches if not empty when initializing site during upgrade.
  Caches may be stale during upgrade, so the init program now offers to
  delete them.
  A new `--delete-caches` option is added to allow force delete of all
  caches.
* [Issue 4797](https://bugs.chromium.org/p/gerrit/issues/detail?id=4797):
Fix internal server error in OAuth extension point when E-Mail is not set.
* [Issue 4784](https://bugs.chromium.org/p/gerrit/issues/detail?id=4784):
Allow to edit user name for OAuth providers that don't expose user names.
* [Issue 4627](https://bugs.chromium.org/p/gerrit/issues/detail?id=4627):
Fix internal server error in OAuth extension point when user name is not set.
* [Issue 4466](https://bugs.chromium.org/p/gerrit/issues/detail?id=4466):
Fix deadlock during Lucene index shutdown.
* Index account on account creation
  This prevents creation of new accounts on every logout/login sequence.
* Add support for Microsoft Internet Explorer 10 and 11, and Microsoft Edge.
* [Issue 4630](https://bugs.chromium.org/p/gerrit/issues/detail?id=4630):
Fix server error when navigating up to change while 'Working' is displayed.
* [Issue 4631](https://bugs.chromium.org/p/gerrit/issues/detail?id=4631):
Read project watches from database.
  Project watches were being read from the git backend by default, but the
  migration to git is not yet completed.
* [Issue 4632](https://bugs.chromium.org/p/gerrit/issues/detail?id=4632):
Fix server error when deleting multiple SSH keys from the Web UI.
  Attempting to delete multiple keys in parallel resulted in a lock failure
  when removing the keys from the git backend.
* [Issue 4645](https://bugs.chromium.org/p/gerrit/issues/detail?id=4645):
Fix malformed account suggestions.
  If the query contained several query terms and one of the query terms was
  a substring of 'strong', the suggestion was malformed.
* Hooks plugin: Fix incorrect value passed to `--change-url` parameter.
  The URL was being generated using the change's Change-Id rather than the
  change number.
* Replication plugin: Fix Guava ProvisionException when replicating from slave.
* Check for CLA when creating project config changes from the web UI.
  If contributor agreements were enabled and required for a project, and
  the user had not signed a CLA, it was still possible to upload changes
  for review on `refs/meta/config` by making changes in the project access
  editor and pressing 'Save for Review'.
* Fix server errors in 'Set Access' and 'Get Access' REST enpoints.
* Stability improvements in event dispatch mechanism.

### 2.13.1
* [Issue 4618](https://bugs.chromium.org/p/gerrit/issues/detail?id=4618):
Fix internal server error after online reindexing completed.
* Fix internal server error when cloning from slaves and not all refs are
visible.
* Fix JSON deserialization error causing stream event client to no longer receive
events.
