# Gerrit 2.13

Download: **[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.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)

[TOC]

## Release Highlights

* 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
```

### 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-review.googlesource.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)

* [Elastic Search](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. Clicking the annotation opens the relevant change.

#### 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 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.7 {#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.

### 2.13.6 {#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 {#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 {#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 {#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 {#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 {#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.
