# Gerrit 2.12

Download: **[2.12.7](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.7.war)**
| [2.12.6](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.6.war)
| [2.12.5](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.5.war)
| [2.12.4](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.4.war)
| [2.12.3](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.3.war)
| [2.12.2](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.2.war)
| [2.12.1](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.1.war)
| [2.12](https://gerrit-releases.storage.googleapis.com/gerrit-2.12.war)

Documentation: **[2.12.7](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.7/index.html)**
| [2.12.6](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.6/index.html)
| [2.12.5](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.5/index.html)
| [2.12.4](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.4/index.html)
| [2.12.3](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.3/index.html)
| [2.12.2](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/index.html)
| [2.12.1](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.1/index.html)
| [2.12](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/index.html)

[TOC]

## Release Highlights

* New change submission workflows: 'Submit Whole Topic' and 'Submitted Together'.

* Support for GPG Keys and signed pushes.


## Important Notes

### Schema Changes

This release contains schema changes. To upgrade:

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

#### ‘value too long’ error in schema migration

As described in [Issue 4323](https://bugs.chromium.org/p/gerrit/issues/detail?id=4323),
a ’value too long for type character varying(255)’ error can occur in the
patch_sets table when migrating to schema version 108.

This error may occur under some circumstances when running the schema
migration from an earlier version of Gerrit.

On sites where this occurs, it can be fixed with a manual schema update
according to the comments in the issue.

#### Manual schema upgrade when updating from 2.12 to 2.12.x

When upgrading a site that is already running version 2.12 to 2.12.x, the
`patch_sets` table must be manually migrated using the `gerrit gsql` SSH
command or the `gqsl` site program.

For the default H2 database, execute the command:

``` sh
  alter table patch_sets modify push_certficate clob;
```

For MySQL, execute the command:

``` sh
  alter table patch_sets modify push_certficate text;
```

For PostgreSQL, execute the command:

``` sh
  alter table patch_sets alter column push_certficate type text;
```

For other database types, execute the appropriate equivalent command.

Note that the misspelled `push_certficate` is the actual name of the
column.

When upgrading from a version earlier than 2.12, this manual step is not
necessary and should be omitted.

### Online Reindexing

To use online reindexing when upgrading to 2.12.x, the server must
first be upgraded to 2.8 (or 2.9) and then through 2.10 and 2.11 to 2.12.x. If
reindexing will be done offline, you may ignore this warning and upgrade directly
to 2.12.x.

### Bouncy Castle Upgrade

When upgrading from version 2.8.4 or older with a site that uses
Bouncy Castle Crypto, new versions of the libraries will be downloaded. The old
libraries should be manually removed from site's `lib` folder to prevent the
startup failure described in [issue 3084](https://code.google.com/p/gerrit/issues/detail?id=3084).

### Solr Index Support

The Solr secondary index is no longer supported. With this release
the only supported secondary index is Lucene.

### `ref-updated` Event Format Change

The format of the `ref-updated` event has changed. Users of the
[Jenkins Gerrit Trigger plugin](https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger)
with jobs triggering on `ref-updated` should upgrade to at least
[version 2.15.1](https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger#GerritTrigger-Version2.15.1%28releasedSept142015%29).
If an upgrade of the plugin is not possible, a workaround is
to change the branch configuration to type `Path` with a pattern like
`refs/*/master` instead of `Plain` and `master`.


## New Features

### New Change Submission Workflows

* New 'Submit Whole Topic' setting.

  When the
  [`change.submitWholeTopic`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#change.submitWholeTopic)
  setting is enabled, all changes belonging to the same
  topic will be submitted at the same time.

  This setting should be considered experimental, and is disabled by default.

* Submission of changes may include ancestors.

  If a change is submitted that has submittable ancestor changes, those changes
  will also be submitted.

* The merge queue is removed.

  Changes that cannot be submitted due to missing dependencies will no longer
  enter the 'Submitted, Merge Pending' state.


### GPG Keys and Signed Pushes

Signed push can be enabled by setting
[`receive.enableSignedPush`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#receive.enableSignedPush)
to true. When a client pushes with `git push --signed`, Gerrit ensures that the push
certificate is valid and signed with a valid public key stored in the
`refs/meta/gpg-keys` branch of the `All-Users` repository.

When signed push is enabled, and
[`gerrit.editGpgKeys`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#gerrit.editGpgKeys)
is set to true, users may upload their public GPG
key via the REST API or UI. If this setting is not enabled, GPG keys may only be added by administrators
with direct access to the `All-Users` repository.

Administrators may also configure
[`receive.certNonceSeed`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#receive.certNonceSeed)
and
[`receive.certNonceSlop`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#receive.certNonceSlop).

### Secondary Index

* [Issue 3333](http://code.google.com/p/gerrit/issues/detail?id=3333):
Support searching for changes by author and committer.

  Changes are indexed by the git author and committer of the latest patch set,
  and can be searched with the `author:` and `committer:` operators.

  Changes are matched on either the exact whole email address, or on parts of the
  name or email address.

* Add `from:` search operator to match by owner of change or author of comments.

* Add `commentby:` search operator to search by author of comments.

* Change the `topic:` search operator to search by the exact topic name.

* Add `intopic:` search operator to search by topics containing the search term.

* [Issue 3291](http://code.google.com/p/gerrit/issues/detail?id=3291):
Add `has:edit` search operator to match changes that have edit revisions on them.

* Allow configuration of maximum query size.

  [`index.maxTerms`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#index.maxTerms)
  can be set to limit the number of leaf index terms.

* Expose Lucene index writers for plugins.

  Plugins can now reconfigure various Lucene performance related parameters
  at runtime.

* Make Lucene index writers auto-commit writers.

  Plugins can now temporarily turn on auto-committing in situations where it makes
  sense to enforce all changes to be written to disk ASAP.

### UI

#### General

* Edit and diff preferences can be modified from the user preferences screen.

  Previously it was only possible to edit these preferences from the actual
  diff and edit screens.

* Add 'Edits' to the 'My' dashboard menu to list changes on which the user
has an unpublished edit revision.

* Support for URL aliases.

  Administrators may define
  [URL aliases](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#urlAlias)
  to map plugin screens into the Gerrit URL namespace.

  Plugins may use user-specific URL aliases to replace certain screens for certain
  users.


#### Project Screen

* New tab to list the project's tags, similar to the branch list.


#### Inline Editor

* Store and load edit preferences in git.

  Edit preferences are stored and loaded to/from the `All-Users` repository.

* Add 'auto close brackets' feature.

* Add 'match brackets' feature.

* Make the cursor blink rate customizable.

* Add support for Emacs and Vim key maps.


#### Change Screen

* [Issue 3318](http://code.google.com/p/gerrit/issues/detail?id=3318):
Highlight 'Reply' button if there are draft comments on any patch set.

  If any patch set of the change has a draft comment by the current user,
  the 'Reply' button is highlighted.
 
  The icons depicting draft comments are removed from the revisions drop-down
  list.

* [Issue 1100](http://code.google.com/p/gerrit/issues/detail?id=1100):
Publish all draft comments when replying to a change.

  All draft comments, including those on older patch sets, are published when
  replying to a change.

* Show file size increase/decrease for binary files.

* Show uploader if different from change owner.

* Show push certificate status.

* Show change subject as tooltip on related changes list.

  This helps to identify changes when the subject is truncated in the list.


#### Side-By-Side Diff

* [Issue 3293](http://code.google.com/p/gerrit/issues/detail?id=3293):
Add syntax highlighting for Puppet.

* [Issue 3447](http://code.google.com/p/gerrit/issues/detail?id=3447):
Add syntax highlighting for VHDL.


#### Group Screen

* [Issue 1479](http://code.google.com/p/gerrit/issues/detail?id=1479): Group audit log.

  The group screen now includes an 'Audit Log' panel showing member additions,
  removals, and the user who made the change.

### API

Several new APIs are added.

#### Accounts

* Suggest accounts.

#### Tags

* List tags.

* Get tag.


### REST API

New REST API endpoints and new options on existing endpoints.


#### Accounts

* [Set Username](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#set-username):
Set the username of an account.

* [Get Account Details](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#get-detail):
Get the details of an account.

  In addition to the [AccountInfo](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#account-info)
  fields returned by the existing
  [Get Account endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-accounts.html#get-account),
  the new REST endpoint returns the registration date of the account and the
  timestamp of when contact information was filed for this account.


#### Changes

* [Set Review](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#set-review):
Add an option to omit duplicate comments.

* [Download Content](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#get-safe-content):
Download the content of a file from a certain revision, in a
safe format that poses no risk for inadvertent execution of untrusted code.

* [Get Submitted Together](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#submitted-together):
Get the list of all changes that will be submitted at
the same time as the change.

* [Issue 1100](http://code.google.com/p/gerrit/issues/detail?id=1100):
[Set Review](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-changes.html#set-review):
Add an option to publish draft comments on all revisions.

#### Config

* [Get Server Info](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-config.html#get-info):
Return information about the Gerrit server configuration.

* [Confirm Email](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-config.html#confirm-email):
Confirm that the user owns an email address.


#### Groups

* [List Groups](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-groups.html#list-group):
Add option to suggest groups, allowing group auto-completion to be used in a plugin's UI.

* [Get Audit Log](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-groups.html#get-audit-log):
Get the audit log of a Gerrit internal group, showing member
additions, removals, and the user who made the change.


#### Projects

* [Run GC](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-projects.html#run-gc):
Add `aggressive` option to specify whether or not to run an aggressive
garbage collection.

* [List Tags](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/rest-api-projects.html#list-tags):
Support filtering by substring and regex, and pagination with `--start` and `--end`.

### SSH

* Add support for ZLib Compression.

  To enable compression use the
  [`sshd.enableCompression` setting](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#sshd.enableCompression).

* Add support for hmac-sha2-256 and hmac-sha2-512 as MACs.

### Plugins

#### General

* Gerrit client can now pass JavaScriptObjects to extension panels.

* New UI extension point for header bar in change screen.

* New UI extension point to password screen.

* New UI extension points to project info screen.

* New UI extension point for pop down buttons on change screen.

* New UI extension point for buttons in header bar on change screen.

* New UI extension point at bottom of the user preferences screen.

* New UI extension point for the 'Included In' drop-down panel.

  By implementing the
  [Included In interface](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/dev-plugins.html#included-in),
  plugins may add entries to the 'Included In' dropdown menu on the change screen.

* Plugins can extend Gerrit screens with GWT controls.

* Plugins can add custom settings screens.

* Referencing groups in `project.config`.

  Plugins can refer to groups so that when they are renamed, the project
  config will also be updated in this section.

* API
    * Allow to use `CurrentSchemaVersion`.
    * Allow to use `InternalChangeQuery.query()`.
    * Allow to use `JdbcUtil.port()`.
    * Allow to use GWTORM `Key` classes.


### Other

* [Issue 3401](http://code.google.com/p/gerrit/issues/detail?id=3401):
Add option to
[disable registration of new email addresses](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#sendemail.allowRegisterNewEmail).

* [Issue 2061](http://code.google.com/p/gerrit/issues/detail?id=2061):
Add Support for `git-upload-archive`.

  This allows use the standard `git archive` command to create an archive
  of the content of a repository.

* Add a background job to automatically abandon inactive changes.

  The
  [changeCleanup](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/config-gerrit.html#changeCleanup)
  configuration can be set to periodically check for inactive changes and automatically abandon them.

* Add support for the
[DB2 database](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/database-setup.html#createdb_db2).

* [Issue 3441](http://code.google.com/p/gerrit/issues/detail?id=3441):
Add support for the
[Apache Derby database](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/database-setup.html#createdb_derby).

* Download commands plugin: Use commit IDs for download commands when change refs are hidden.

  Git has a configuration option to hide refs from the initial advertisement
  (`uploadpack.hideRefs`). This option can be used to hide the change refs from
  the client. As consequence this prevented fetching changes by change ref from
  working.

  Setting `download.checkForHiddenChangeRefs` in the `gerrit.config` to true
  allows the download commands plugin to check for hidden change refs.

* Add a new 'Maintain Server' global capability.

  Members of a group with the 'Maintain Server' capability may view caches, tasks,
  and queues, and invoke the index REST API on changes.

## Bugfixes

* [Issue 3499](http://code.google.com/p/gerrit/issues/detail?id=3499):
Fix syntax highlighting of raw string literals in go.

* [Issue 3643](http://code.google.com/p/gerrit/issues/detail?id=3643):
Fix syntax highlighting of ES6 string templating using backticks.

* [Issue 3653](http://code.google.com/p/gerrit/issues/detail?id=3653):
Correct timezone in sshd log after DST change.

  When encountering a DST switch, the timezone wasn't updated until
  the server was reloaded.

* [Issue 3306](http://code.google.com/p/gerrit/issues/detail?id=3306):
Allow admins to read, push and create on `refs/users/default`.

* [Issue 3212](http://code.google.com/p/gerrit/issues/detail?id=3212):
Fix failure to run `init` when `--site-path` option is not explicitly given.

* Make email validation case insensitive.

  While [RFC 5321 section 2.3.11](https://tools.ietf.org/html/rfc5321#section-2.3.11)
  allows for the local-part (the part left of the '@') of an email address to be case
  sensitive, the domain portion is case insensitive according to
  [RFC 1035 section 3.1](https://tools.ietf.org/html/rfc1035#section-3.1),
  and in practice, even the local-part is typically case insensitive also.

* `commit-msg` hook: Don't add `Change-Id` line on temporary commits.

  Commits created with `git commit --fixup` or `git commit --squash` are not
  intended to be pushed to Gerrit, and don't need a `Change-Id` line.

  This also prevents changes from being accidentally uploaded, at least for
  projects that have the 'Require Change-Id' configuration enabled.

* [Issue 3444](http://code.google.com/p/gerrit/issues/detail?id=3444):
download-commands plugin: Fix clone with commit-msg hook when project name
contains '/'.

* Use full ref name in `refName` attribute of `ref-updated` events.

  The [refUpdate attribute](https://gerrit-documentation.storage.googleapis.com/Documentation/2.12/json.html#refUpdate)
  in `ref-updated` events did not include the full name
  of the ref in the `refName` attribute, i.e. `master` was used instead of
  `refs/heads/master`.

  Support for the new format is added in
  [version 2.15.1 of the Jenkins Gerrit Trigger plugin](https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger#GerritTrigger-Version2.15.1%28releasedSept142015%29).

  Users who are unable to upgrade the plugin may instead change the
  trigger's branch configuration to type `Path` with a pattern like
  `refs/*/master` instead of `Plain` and `master`.

* [Issue 3714](https://code.google.com/p/gerrit/issues/detail?id=3714):
Improve visibility of comments on dark themes.

* Fix highlighting of search results and trailing whitespaces in intraline
diff chunks.

* Fix server error when listing annotated/signed tag that has no tagger info.

* Don't create new account when claimed OAuth identity is unknown.

  The Claimed Identity feature was enabled to support old Google OpenID accounts,
  that cannot be activated anymore. In some corner cases, when for example the URL
  is not from the production Gerrit site, for example on a staging instance, the
  OpenID identity may deviate from the original one. In case of mismatch, the lookup
  of the user for the claimed identity would fail, causing a new account to be
  created.

* Suggest to upgrade installed plugins per default during site initialization
to new Gerrit version.

  The default was 'No' which resulted in some sites not upgrading core
  plugins and running the wrong versions.

* [Issue 3698](https://code.google.com/p/gerrit/issues/detail?id=3698):
Fix creation of the administrator user on databases with pre-allocated
auto-increment column values.

  When using a database configuration where auto-increment column values are
  pre-allocated, it was possible that the 'Administrators' group was created
  with an ID other than `1`. In this case, the created admin user was not added
  to the correct group, and did not have the correct admin permissions.

* [Issue 3018](https://code.google.com/p/gerrit/issues/detail?id=3018):
Fix query for changes using a label with a group operator.

  The `group` operator was being ignored when searching for changes with labels
  because the search index does not contain group information.

* Fix online reindexing of changes that don't already exist in the index.

  Changes are now always reloaded from the database during online reindex.

* Fix reading of plugin documentation.

  Under some circumstances it was possible to fail with an IO error.

## Documentation Updates

* [Issue 412](https://code.google.com/p/gerrit/issues/detail?id=412):
Update documentation of `commentlink.match` regular expression to clarify
that the expression is applied to the rendered HTML.

* Remove warning about unstable change edit REST API endpoints.

  These endpoints should be considered stable since version 2.11.

* Document that `ldap.groupBase` and `ldap.accountBase` are repeatable.

## Dependency Updates

* Upgrade Asciidoctor to 1.5.2

* Upgrade AutoValue to 1.1

* Upgrade Bouncy Castle to 1.52

* Upgrade CodeMirror to 5.7

* Upgrade gson to 2.3.1

* Upgrade guava to 19.0-RC2

* Upgrade gwtorm to 1.14-20-gec13fdc

* Upgrade H2 to 1.3.176

* Upgrade httpcomponents to 4.4.1

* Upgrade Jetty to 9.2.13.v20150730

* Upgrade JGit to 4.1.1.201511131810-r

* Upgrade joda-time to 2.8

* Upgrade JRuby to 1.7.18

* Upgrade jsch to 0.1.53

* Upgrade JUnit to 4.11

* Upgrade Lucene to 5.3.0

* Upgrade Prolog Cafe 1.4.1

* Upgrade servlet API to 8.0.24

* Upgrade Truth to version 0.27

## Bugfix Releases

### 2.12.8 {#2.12.8}

* [Issue 5759](https://bugs.chromium.org/p/gerrit/issues/detail?id=5759):
  Fix `intopic:` search with regular expression.

* Fix database connection pool verification.

  A broken connection could be returned from the connection pool and this
  caused an internal server error when trying, for example, to read a change
  from the database.

* Do not check visibility of parent when creating 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 merging a merge commit that refers to commits not submitted as changes.

* Update `commit-msg` hook to Add `Change-Id` line after `Depends-On:` footer.

### 2.12.7 {#2.12.7}

* [Issue 4930](https://bugs.chromium.org/p/gerrit/issues/detail?id=4930)
Allow submit of merge commit of a branch that is not a change.

  A regression introduced in 2.12.6 prevented a merge commit from being
  submitted if it merges a branch that is not associated to a change.

* Avoid unnecessary group visibility checks in list-groups REST endpoint.

  The list-groups REST API call checked group visibility even for those
  groups which were filtered out. In a system with 10-20K of groups, this
  could cause 30-60 seconds delay when checking if the current user can see
  a group.

* Download Commands plugin: Fix HTTP clone command inconsistency.

  When cloning a project using HTTP schema, the `/a` in the URL was added
  only when choosing to clone without the commit hook. Now the URL is the
  same in both cases.

### 2.12.6 {#2.12.6}

* [Issue 4158](https://bugs.chromium.org/p/gerrit/issues/detail?id=4158):
Notice merged commits even if they appear on a different branch.

  If a change was pushed to a topic branch, and then pushed to another
  branch for review, merging it did not result in it appearing in the
  repository.

* [Issue 4887](https://bugs.chromium.org/p/gerrit/issues/detail?id=4887):
Fix submission of multiple changes by cherry-pick.

  When submitting multiple changes by cherry-pick, update the merge tip
  for each change such that each subsequent change is cherry-picked onto
  the updated tip of the target branch.

* [Issue 4647](https://bugs.chromium.org/p/gerrit/issues/detail?id=4647):
Fix copying text in Internet Explorer.

* Prevent double closing of repository when merging changes.

### 2.12.5 {#2.12.5}

* New preference to enable line wrapping in diff screen and inline editor.

* Fix the diff and edit preference dialogs for smaller screens.

  On smaller screens the options at the bottom of the dialogs would
  get cut off, making it difficult to change them.

* [Issue 4521](https://bugs.chromium.org/p/gerrit/issues/detail?id=4521):
Fix internal server error during validation of email addresses.

  When creating a new account or adding a new email address to an existing
  account, the email validation crashed.

* Lucene stability improvements.

  Each Lucene index is now written using a dedicated background thread. Lucene
  threads may not be cancelled, to prevent interruptions while writing.

* Don't try to change username that is already set.

  Since Gerrit version 2.1.4 it is not allowed to change the username once
  it has been set, and attempting to do so results in an exception.

  If `ldap.accountSshUserName` is set in the `gerrit.config` using
  `${userPrincipalName.localPart}` to initialize the username from the user's
  email address, and then the email address is changed, the username gets
  resolved to something different and the account manager tried to change it.
  As a result, an exception was raised and the user could no longer log in.

  Instead of trying to change the username, a warning is logged.

* [Issue 4006](https://bugs.chromium.org/p/gerrit/issues/detail?id=4006):
Prevent search limit parameter from exceeding maximum integer value.

* Fix internal server error when generating task names.

* Print proper names for query tasks in the output of the `show-queue` command.

* Double-check change status when auto-abandoning changes.

  It was possible that changes could be updated in the time between the query
  results being returned and the change being abandoned.

### 2.12.4 {#2.12.4}

* [Issue 4400](https://bugs.chromium.org/p/gerrit/issues/detail?id=4400):
Fix `AlreadyClosedException` in Lucene index.

  If a Lucene indexing thread was interrupted by an SSH connection being
  closed, this would also close file handles being used to read the index.

  Lucene queries are now executed on background threads to isolate them
  from SSH threads.

  This may also reduce latency for user dashboards on a multi-core system as
  each query for the different sections can now run on separate threads and
  return results when ready.

* [Issue 4249](https://bugs.chromium.org/p/gerrit/issues/detail?id=4249):
Fix 'Duplicate stages not allowed' error during indexing.

* [Issue 4238](https://bugs.chromium.org/p/gerrit/issues/detail?id=4238):
Fix 'not found' error when browsing tree in gitweb.

  The `refs/heads/` prefix was incorrectly being added to `HEAD`, causing a
  '404 Not Found' error.

* Allow to read repositories that do not end with `.git`.

* [Issue 4262](https://bugs.chromium.org/p/gerrit/issues/detail?id=4262):
Fix GPG push certificate for first patch set of new changes.

  The GPG certificate was not being set for the first patch set of new
  changes.

* [Issue 4296](https://bugs.chromium.org/p/gerrit/issues/detail?id=4296):
Fix internal error when a query does not contain any token.

* [Issue 4241](https://bugs.chromium.org/p/gerrit/issues/detail?id=4241):
Fix 'Cannot format velocity template' error when sending notification emails.

* Fix `sshd.idleTimeout` setting being ignored.

  The `sshd.idleTimeout` setting was not being correctly set on the SSHD
  backend, causing idle sessions to not time out.

* [Issue 4324](https://bugs.chromium.org/p/gerrit/issues/detail?id=4324):
Set the correct uploader on new patch sets created via the inline editor.

* Log a warning instead of failing when invalid commentlinks are configured.

* [Issue 4136](https://bugs.chromium.org/p/gerrit/issues/detail?id=4136):
Fix support for `HEAD` requests in the REST API.

  Sending a `HEAD` request failed with '404 Not Found'.

* Return proper error response when trying to confirm an email that is already
used by another user.

* [Issue 4318](https://bugs.chromium.org/p/gerrit/issues/detail?id=4318)
Fix 'Rebase if Necessary' merge strategy to prevent introducing a duplicate
commit when submitting a merge commit.

* [Issue 4332](https://bugs.chromium.org/p/gerrit/issues/detail?id=4332):
Allow `local` as a valid TLD for outgoing emails.

* Bypass hostname verification when `sendemail.sslVerify` is disabled.

* [Issue 4398](https://bugs.chromium.org/p/gerrit/issues/detail?id=4398):
Replication: Consider ref visibility when scheduling replication.

  It was possible for refs to be replicated to remotes despite not being
  visible to groups mentioned in the `authGroup` setting.

* [Issue 4036](https://bugs.chromium.org/p/gerrit/issues/detail?id=4036):
Fix hanging query when using `is:watched` without authentication.

### 2.12.3 {#2.12.3}

* Fix SSL security issue in the SMTP email relay.

  The hostname of the SSL socket was not verified. This made the read
  from the socket insecure since without verifying the hostname it may
  be [vulnerable to a man-in-the-middle attack](https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf).

* [Issue 3895](https://bugs.chromium.org/p/gerrit/issues/detail?id=3895):
Fix failure to submit with 'Rebase if Necessary' after changes were reordered
with interactive rebase.

* [Issue 4052](https://bugs.chromium.org/p/gerrit/issues/detail?id=4052):
Fix failure to start server after upgrade from version 2.9.4.

* [Issue 3891](https://bugs.chromium.org/p/gerrit/issues/detail?id=3891):
Fix query with `label:` operator and zero value.

* [Issue 4112](https://bugs.chromium.org/p/gerrit/issues/detail?id=4112):
Fix failure to submit changes caused by empty user edit ref.

* [Issue 4087](https://bugs.chromium.org/p/gerrit/issues/detail?id=4087):
Fix failure to submit change when a branch is created on the change ref.

* [Issue 4155](https://bugs.chromium.org/p/gerrit/issues/detail?id=4155):
Fix tags REST API to correctly return all tags.

* [Issue 4154](https://bugs.chromium.org/p/gerrit/issues/detail?id=4154):
Add support for `.team` and several more TLDs in email address validation.

  Update commons-validator to 1.5.1.

* [Issue 4163](https://bugs.chromium.org/p/gerrit/issues/detail?id=4163):
Prevent removal of non-voting reviewers on submit of change.

* [Issue 2647](https://bugs.chromium.org/p/gerrit/issues/detail?id=2647):
Fix usage of `CTRL-C` on change screen.

* [Issue 4236](https://bugs.chromium.org/p/gerrit/issues/detail?id=4236):
Fix internal error when pushing an amended commit with the `%edit` option.

* [Issue 3426](https://bugs.chromium.org/p/gerrit/issues/detail?id=3426):
Fix pushing changes with `%base` option or `newChangeForAllNotInTarget` option.

* Show 'Submitted Together' tab for changes with same topic.

* Improve submit button tooltip messages shown when change is not submittable.

* Fix firing of the `topic-changed` hook.

* Remove `--dry-run` option from the `Reindex` site program.

  The implementation of the option was removed, but the option was mistakenly
  added back to the command and did not actually work.

* Print proper task names in the output of the `show-queues` command.

* Replication plugin: Double check if a ref is missing locally before deleting
from remote.

* Show an error message when trying to add a non-existent group to an ACL.


### 2.12.2 {#2.12.2}

* Upgrade Apache commons-collections to version 3.2.2.

  Includes a fix for a [remote code execution exploit](https://issues.apache.org/jira/browse/COLLECTIONS-5800).

* [Issue 3919](https://code.google.com/p/gerrit/issues/detail?id=3919):
Explicitly set parent project to 'All-Projects' when a project is created
without giving the parent.

* Don't add message twice on abandon or restore via ssh review command.

  When abandoning or reviewing a change via the ssh `review` command, and
  providing a message with the `--message` option, the message was added to
  the change twice.

* Clear the input box after cancelling add reviewer action.

  When the action was cancelled, the content of the input box was still
  there when opening it again.

* Fix internal server error when aborting ssh command.

* [Issue 3969](https://code.google.com/p/gerrit/issues/detail?id=3969):
Fix internal server error when submitting a change with 'Rebase If Necessary'
strategy.

### 2.12.1 {#2.12.1}

#### General

* Fix column type for signed push certificates.

  The column type `VARCHAR(255)` was too small, preventing some PGP push
  certificates from being stored.

* Add the `DRAFT_COMMENTS` option to the list changes REST API endpoint
and mark it as deprecated.

  It was removed in version 2.12 because it's not needed any more by the UI,
  but this caused failures for clients that still use it.

  Now it is added back, although it does not do anything and is marked as
  deprecated.

* [Issue 3669](https://code.google.com/p/gerrit/issues/detail?id=3669):
Fix schema migration when migrating to 2.12.x directly from a version
earlier than 2.11.

* [Issue 3733](https://code.google.com/p/gerrit/issues/detail?id=3733):
Correctly detect symlinked log directory on startup.

  If `$site_path/logs` was a symlink, the server would not start.

* [Issue 3871](https://code.google.com/p/gerrit/issues/detail?id=3871):
Throw an explicit exception when failing to load a change from the database.

  If a change could not be loaded from the database, for example if it was
  manually removed from the changes table but references to it were remaining
  in other tables, a null change was returned which would then lead to an
  'Internal Server Error' that was difficult to track down. Now an error is
  raised earlier which will help administrators to find the root cause.

* [Issue 3743](https://code.google.com/p/gerrit/issues/detail?id=3743):
Use submitter identity as committer when using 'Rebase if Necessary' merge
strategy.

  When submitting a change that required rebase, the committer was being
  set to 'Gerrit Code Review' instead of the name of the submitter.

* [Issue 3758](https://code.google.com/p/gerrit/issues/detail?id=3758):
Fix serving of static resources when deployed in application container.

  When deployed in a container, for example Tomcat, it was not possible to
  load the UI because static content could not be loaded from the WAR file.

* [Issue 3790](https://code.google.com/p/gerrit/issues/detail?id=3790):
Fix documentation link when deployed in application container.

  When deployed in a container, for example Tomcat, the 'Documentation' menu
  was missing.

* [Issue 3786](https://code.google.com/p/gerrit/issues/detail?id=3786):
Fix SQL statement syntax in schema migration.

  An extra semicolon was preventing migration from 2.11.x to 2.12 when using
  an Oracle database.

* Send email using email queue instead of the default queue.

  Some emails sent asynchronously were already being sent using that queue
  but some were not. This was confusing for a gerrit administrator because
  if there is a build up of `send-email` tasks in the queue, he would
  think that increasing `sendemail.threadPoolSize` would help but it did not
  because some of the email were sent using the default queue which is
  configurable using `execution.defaultThreadPoolSize`.

* Fix XSRF token cookie to honor `auth.cookieSecure` setting.

* [Issue 3767](https://code.google.com/p/gerrit/issues/detail?id=3767):
Fix replication of first patch set for new changes.

  When new changes were pushed from the command line, the first patch
  set did not get replicated to destinations.

* [Issue 3771](https://code.google.com/p/gerrit/issues/detail?id=3771):
Remove `index.defaultMaxClauseCount` configuration option.

  When `index.maxTerms` was either not set (thus no limit) or set to a value
  higher than `index.defaultMaxClauseCount` it was possible that viewing the
  related changes tab could cause a 'Too many clauses' error for changes that
  have a lot of related changes.

  The `index.defaultMaxClauseCount` configuration option is removed, and the
  existing `index.maxTerms` is reused. The default value of `index.maxTerms`
  is reduced from 'no limit' to 1024.

* [Issue 3919](https://code.google.com/p/gerrit/issues/detail?id=3919):
Explicitly set parent project to 'All-Projects' when a project is created
without giving the parent.

* [Issue 3948](https://code.google.com/p/gerrit/issues/detail?id=3948):
Fix submit of project parent updates on `refs/meta/config`.

  When submitting a change on `refs/meta/config` to update a project's parent,
  the error 'The change must be submitted by a Gerrit administrator' was being
  displayed even when the submitter was an admin. The submit was successful
  when clicking 'Submit' a second time.

* [Issue 3811](https://code.google.com/p/gerrit/issues/detail?id=3811):
Fix submittability of merge commits that resolve merge conflicts.

  If a series of changes contained a change that conflicted with the destination
  branch, but the conflict was solved by a merge commit at the tip of the
  series, the series was not submittable.

* [Issue 3883](https://code.google.com/p/gerrit/issues/detail?id=3883):
Respect the `core.commentchar` setting from `.gitconfig` in `commit-msg` hook.

#### UI

* [Issue 3894](https://code.google.com/p/gerrit/issues/detail?id=3894):
Fix display of 'Related changes' after change is rebased in web UI:

* [Issue 3071](https://code.google.com/p/gerrit/issues/detail?id=3071):
Fix display of submodule differences in side-by-side view.

* [Issue 3718](https://code.google.com/p/gerrit/issues/detail?id=3718):
Hide avatar images when no avatars are available.

  The UI was showing a transparent empty image with a border.

* [Issue 3731](https://code.google.com/p/gerrit/issues/detail?id=3731):
Fix syntax higlighting of tcl files.

* [Issue 3863](https://code.google.com/p/gerrit/issues/detail?id=3863):
Fix display of active row marker in tag list.

  Clicking on one of the rows would cause the tag name to disappear.

* [Issue 1207](https://code.google.com/p/gerrit/issues/detail?id=1207):
Fix keyboard shortcuts for non-US keyboards on side-by-side diff screen.

  The forward/backward navigation keys `[` and `]` only worked on keyboards where
  these characters could be typed without using any modifier key (like CTRL, ALT,
  etc..).

  Note that the problem still exists on the unified diff screen.

* Improve tooltip on 'Submit' button when 'Submit whole topic' is enabled
and the topic can't be submitted due to some changes not being ready.

#### Plugins

* [Issue 3821](https://code.google.com/p/gerrit/issues/detail?id=3821):
Fix repeated reloading of plugins when running on OpenJDK 8.

  OpenJDK 8 uses nanotime precision for file modification time on systems that
  are POSIX 2008 compatible. This leads to precision incompatibility when
  comparing the plugin's JAR file timestamp, resulting in the plugin being
  reloaded every minute.

* [Issue 3741](https://code.google.com/p/gerrit/issues/detail?id=3741):
Fix handling of merge validation exceptions emitted by plugins.

  If a plugin raised an exception, it was reported to the user as 'Change is
  new', rather than 'Missing dependency'.

* Allow plugins to get the caller in merge validation requests.

  Plugins that implement the `MergeValidationListener` interface now get the
  caller (the user who initiated the merge) in the `onPreMerge` method.

  Existing plugins that implement this interface must be adapted to the new
  method signature.

* [Issue 3892](https://code.google.com/p/gerrit/issues/detail?id=3892):
Allow plugins to suggest reviewers based on either change or project
resources.

#### Documentation

* Update documentation of `commentlink` to reflect changed search URL.

* Add missing documentation of valid `database.type` values.

#### Upgrades

* Upgrade JGit to 4.1.2.201602141800-r.
