Release notes for Gerrit 2.11
=============================


Gerrit 2.11 is now available:

link:https://gerrit-releases.storage.googleapis.com/gerrit-2.11.war[
https://gerrit-releases.storage.googleapis.com/gerrit-2.11.war]

Gerrit 2.11 includes the bug fixes done with
link:ReleaseNotes-2.10.1.html[Gerrit 2.10.1] and
link:ReleaseNotes-2.10.2.html[Gerrit 2.10.2].
These bug fixes are *not* listed in these release notes.


Important Notes
---------------


*WARNING:* This release contains schema changes.  To upgrade:
----
  java -jar gerrit.war init -d site_path
----

Gerrit 2.11 requires a secondary index, which can be created offline
by running the `reindex` program:

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

If the site that is upgraded already has a secondary index, the
secondary index can be upgraded online. This is important for large
sites since running the `reindex` program can take a long time and
contributes significantly to the downtime that is required for the
upgrade.

Gerrit 2.11 supports online reindexing only from the index version `11`
which is the index version of Gerrit 2.10. This means if you come from
an older release it makes sense to first upgrade to 2.10 and then do
the upgrade to 2.11 so that you can profit from online reindexing.

In case you are upgrading from 2.10 it is *important* to check *before*
the upgrade to 2.11 that the index version of your Gerrit 2.10 site is
`11`. You can check the index version in
`$site_path/index/gerrit_index.config`. Your Gerrit 2.10 site may run
with an older index version (e.g. if online reindexing to index version
`11` is still running or if online reindexing to version `11` has
failed). In this case you first need to successfully migrate your index
version of your Gerrit 2.10 site to `11` and only then start with the
2.11 upgrade. If you start the 2.11 upgrade when the schema version of
your Gerrit 2.10 site is older than `11`, online reindexing is no longer
possible and you need to reindex offline by using the `reindex` program.

*WARNING:* Upgrading to 2.11.x requires the server be first upgraded to 2.8 (or
2.9) and then to 2.11.x. If you are upgrading from 2.8.x or later, you may ignore
this warning and upgrade directly to 2.11.x.

*WARNING:* 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
link:https://code.google.com/p/gerrit/issues/detail?id=3084[Issue 3084].

*WARNING:* The 'Generate HTTP Password' capability has been
link:#remove-generate-http-password-capability[removed].

*WARNING:* Google will
link:https://developers.google.com/+/api/auth-migration[shut down their OpenID
service on 20th April 2015]. Administrators of sites whose users are registered
with Google OpenID accounts should encourage the users to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-sso.html#_multiple_identities[
add an alternative identity to their account] before this date. Users who do
not add an alternative identity before this date will need to create a new
account and ask the site administrator to
link:https://code.google.com/p/gerrit/wiki/SqlMergeUserAccounts[merge it].

*WARNING:* The
link:https://gerrit-review.googlesource.com/Documentation/2.10/rest-api-changes.html#message[
Edit Commit Message] REST API endpoint is removed

*WARNING:* The deprecated '/query' URL is removed and will now return `Not Found`.

Release Highlights
------------------


* link:http://code.google.com/p/gerrit/issues/detail?id=505[Issue 505]:
Changes can be created and edited directly in the browser. See the
link:#inline-editing[Inline editing] section for more details.

* Many improvements in the new change screen.

* The old change screen is removed.


New Features
------------


Web UI
~~~~~~

[[inline-editing]]
Inline Editing
^^^^^^^^^^^^^^

Refer to the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/user-inline-edit.html[
inline editing user guide] for detailed instructions.

* New changes can be created directly in the browser via a 'Create Change'
button on the project info screen.

* New follow-up changes can be created via a 'Follow-Up' button on the change
screen.

* File content can be edited in a full screen CodeMirror editor with support for
themes and syntax highlighting.

* The CodeMirror screen can be configured in the same way as the side-by-side
diff screen.

* The file table in the change screen supports seamless navigation to the
CodeMirror editor.

* Edit mode can be started from the side-by-side diff screen with seamless
navigation to the CodeMirror editor.

* The commit message must now be changed in the context of a change edit. The
'Edit Message' button is removed from the change screen.

* Files can be added, deleted, restored and modified directly in browser.

Change Screen
^^^^^^^^^^^^^

* Remove the 'Edit Message' button from the change screen.
+
The commit message is now edited using the inline edit feature.

* Add support for changing parent revision with the 'Rebase' button.
+
Using the 'Rebase' button it is now possible to rebase a change onto a
different change (on the same destination branch), rather than only onto the
head of the destination branch or the latest patch set of the predecessor change.

* Show the parent commit's subject as a tooltip.

* link:http://code.google.com/p/gerrit/issues/detail?id=2541[Issue 2541],
link:http://code.google.com/p/gerrit/issues/detail?id=2974[Issue 2974]:
Allow the 'Reply' button's
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#change.replyLabel[
label and tooltip] to be configured.

* Improve file sorting for C and C++ files.
+
Header files are now listed before implementation files.

* link:http://code.google.com/p/gerrit/issues/detail?id=3148[Issue 3148]:
Allow display of colored size bars to be enabled or disabled per user.
+
The 'Show Change Sizes As Colored Bars In Changes Table' setting is renamed to
'Show Change Sizes As Colored Bars' and is now used to also control how the
change size is shown per file in the file table.
+
When enabled (which is the default), the change size per file is shown as a sum
of lines added/removed, and also representated by a colored bar showing the
proportion of added/removed lines.
+
When disabled, the colored bar is not shown and the change size per file is shown
in the same way as it used to be in the old change screen.

* Show changes across all projects and branches in the `Same Topic` tab.


Side-By-Side Diff
^^^^^^^^^^^^^^^^^

* New button to switch between side-by-side diff and unified diff.

* New preference setting to toggle auto-hiding of the diff table header.
+
The setting determines whether or not the diff table header with the patch set
selection should be automatically hidden when scrolling down more than half of
a page.

* Highlight search results on scrollbar.
+
Search results in vim mode are highlighted in the scrollbar with gold
colored annotations.

* Set line length to 72 characters for commit messages.

* Add syntax highlighting for several new modes:

** link:https://code.google.com/p/gerrit/issues/detail?id=2848[Issue 2848]: CSharp
** Dart
** Dockerfile
** GLSL shader
** Go
** Objective C
** RELAX NG
** link:http://code.google.com/p/gerrit/issues/detail?id=2779[Issue 2779]: reStructured text
** Soy


Projects Screen
^^^^^^^^^^^^^^^

* Add pagination and filtering on the branch list page.

* Add an 'Edit Config' button on the project info page.
+
The button creates a new change on the `refs/meta/config` branch and opens the
`project.config` file in the inline editor.
+
This allows project owners to easily edit the `project.config` file from the
browser, which is useful since it is possible that not all configuration options
are available in the UI.

REST
~~~~

Accounts
^^^^^^^^

* Add new link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-accounts.html#suggest-account[
Suggest Account endpoint].

Changes
^^^^^^^

* The link:https://gerrit-review.googlesource.com/Documentation/2.10/rest-api-changes.html#message[
Edit Commit Message] endpoint is removed in favor of the new
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#put-change-edit-message[
Change commit message in Change Edit] and
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#publish-edit[
Publish Change Edit] endpoints.

* Add new
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#check-change[
Check Change endpoint].
+
In the past, Gerrit bugs, lack of transactions, and unreliable NoSQL backends
have at various times produced a bewildering variety of corrupt states.
+
This endpoint can be used to detect, explain, and repair some of these possible
states of a change.

* Add new
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#get-revision-actions[
Get Revision Actions endpoint].

* Add
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#change-actions[
`CHANGE_ACTIONS`] option on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#get-change-detail[
Get Change Detail] endpoint.


Change Edits
^^^^^^^^^^^^

Several new endpoints are added to support the inline edit feature.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#get-edit-detail[
Get Edit Detail].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#put-edit-file[
Change file content in Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#post-edit[
Restore file content in Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#put-change-edit-message[
Change commit message in Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#delete-edit-file[
Delete file in Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#get-edit-file[
Retrieve file content from Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#get-edit-message[
Retrieve commit message from Change Edit or current patch set of the change].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#publish-edit[
Publish Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#rebase-edit[
Rebase Change Edit].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#delete-edit[
Delete Change Edit].


Projects
^^^^^^^^

* Add new
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-projects.html#delete-branches[
Delete Branches] endpoint.

* Add filtering and pagination options on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-projects.html#list-branches[
List Branches] endpoint.

* Add new
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-projects.html#list-tags[
List Tags] endpoint.

* Add new
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-projects.html#get-tag[
Get Tag] endpoint.


Configuration
~~~~~~~~~~~~~

* Add support for
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#auth.httpExternalIdHeader[
HTTP external ID header].
+
This can be used when authenticating with a federated identity token from
an external system, e.g. GitHub's OAuth 2.0 authentication.

* Add
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-labels.html#label_copyAllScoresIfNoChange[
`copyAllScoresIfNoChange`] setting for labels.
+
Allows to copy scores forward when a new patch set is uploaded that has the same
parent tree, code delta, and commit message as the previous patch set.

* link:https://code.google.com/p/gerrit/issues/detail?id=2786[Issue 2786]:
Allow non-administrators to modify user accounts.
+
A new global capability,
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/access-control.html#capability_modifyAccount[
'Modify Account'], which allows the granted group members to modify user account
settings via the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-set-account.html[
`set-account` SSH command].
+
Modification of users' SSH keys is still restricted to administrators.

* Add support for
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#ldap.useConnectionPooling[
LDAP connection pooling].

* link:https://code.google.com/p/gerrit/issues/detail?id=699[Issue 699]: Allow to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#receive.maxBatchChanges[
limit max number of changes pushed in a batch].
+
Can be overridden by members of groups that are granted the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/access-control.html#capability_batchChangesLimit[
Batch Changes Limit] capability.

* Allow to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#gerrit.disableReverseDnsLookup[
disable reverse DNS lookup].
+
This option can be set to improve push time from hosts without a reverse DNS
entry.

* Allow to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#cache.projects.loadOnStartup[
load the project cache at server startup].

* Allow members of groups granted the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/access-control.html#capability_accessDatabase[
AccessDatabase capability] to view metadata refs.

* Allow to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#http.addUserAsRequestAttribute[
add the user to the http request attributes].

* Allow to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#suggest.fullTextSearch[
enable full text search in memory for review suggestions].
+
The maximum number of reviewers evaluated can be limited with
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#suggest.fullTextSearchMaxMatches[
suggest.fullTextSearchMaxMatches].

* Allow to provide an alternative
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#gerrit.secureStoreClass[
secure store implementation].

* link:https://code.google.com/p/gerrit/issues/detail?id=1195[Issue 1195]:
Allow projects to be configured to create a new change for every uploaded commit that is not in the target branch.

* Allow to configure
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#container.daemonOpt[
options to pass to the daemon].

* Allow to configure
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#sshd.rekeyBytesLimit[
SSHD rekey parameters].

Daemon
~~~~~~

* Allow to enable the http daemon when running in slave mode.
+
The `--enable-httpd` option can be used in conjunction with the `--slave` option
to allow clients to fetch from the slave over the http protocol.
+
HTTP Authentication may also be used when running in slave mode.

* Include the submitter's name in the change message when a change is submitted.

* Add a message to changes created via cherry pick.
+
When a change is cherry-picked to another branch using the cherry-pick action,
the message 'Patch Set <number>: Cherry Picked from branch <name>.' is added as
a change message on the created change.

* Don't send 'new patch set' notification emails for trivial rebases.


SSH
~~~

* link:https://code.google.com/p/gerrit/issues/detail?id=2797[Issue 2797]:
Add support for ECDSA based public key authentication.

* Add new commands
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-logging-ls-level.html[
`logging ls-level`] and
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-logging-set-level.html[
`logging set-level`] to show and set the logging level at runtime.

* link:https://code.google.com/p/gerrit/issues/detail?id=602[Issue 602]:
Add `--json` option to the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-review.html[
`review` SSH command].
+
Review input can be given to the `review` command in JSON format corresponding
to the REST API's
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#review-input[
ReviewInput] entity.

*  link:https://code.google.com/p/gerrit/issues/detail?id=2824[Issue 2824]:
Add `--rebase` option to the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-review.html[
`review` SSH command].

* Add `--clear-http-password` option to the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-set-account.html[
`set-account` SSH command].

* Add `--preferred-email` option to the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/cmd-set-account.html[
`set-account` SSH command].

Email
~~~~~

* Add `$change.originalSubject` field for email templates.
+
GMail threads messages together by subject and ignores the list headers included
by Gerrit.
+
Site administrators that run servers whose end-user base is mostly on GMail can
modify the site's `ChangeSubject.vm` template to use `$change.originalSubject` to
improve threading for GMail inboxes.
+
The `originalSubject` field is automatically taken from the existing subject
field during first use.


Plugins
~~~~~~~

General
^^^^^^^

* Plugins can listen to account group membership changes.
+
The audit log service allows to register listeners to group member added and
group member deleted events. A default listener logs these events to the database
as before, but additional listeners may now be registered for these events using
the `GroupMemberAuditListener` interface.

* Plugins can validate ref operations.
+
Plugins implementing the `RefOperationValidationListener` interface can
perform additional validation checks against ref creation/deletion operations
before they are applied to the git repository.

* Plugins can provide project-aware top menu extensions
+
Plugins can provide sub-menu items within the 'Projects' context. The
'${projectName}' placeholder is replaced by the project name.

* Auto register static/init.js as JavaScript plugin.
+
When a plugin does not expose Guice Modules explicitly, auto discover and
register static/init.js as WebUi extension if found by the plugin content
scanner.

* Plugins can validate outgoing emails.
+
Plugins implementing `OutgoingEmailValidationListener` interface can filter
and modify outgoing emails before they are sent.

* Plugins that provide initialization steps may now use functionality
from InitUtil in core Gerrit.

* Plugins can post change reviews with historic timestamps.
+
This allows, for example, to write a plugin that can import a project including
review information from another Gerrit server.

* New extensions in the Java Plugin API:

** Set/Put topic.
** Get mergeable status.
** link:https://code.google.com/p/gerrit/issues/detail?id=461[Issue 461]:
Get current user.
** Get file content.
** Get file diff.
** Get comments and drafts.
** Get change edit.

Replication
^^^^^^^^^^^

* Projects can be specified with wildcard in the `start` command.


Bug Fixes
---------

Daemon
~~~~~~

* Change 'Merge topic' to 'Merge changes from topic'.
+
When multiple changes from a topic are submitted resulting in a merge commit,
the title of the merge commit is now 'Merge changes from topic' instead of
'Merge topic'.

* Fix visibility checks for `refs/meta/config`.
+
Under some conditions it was possible for the `refs/meta/config` branch to be
erroneously considered not visible to the user.

* Sort list of updated changes in output from push.

* link:https://code.google.com/p/gerrit/issues/detail?id=2940[Issue 2940]:
Improve warning messages when `Change-Id` is missing in the commit message.

** Add a hint to amend the commit after installing the commit-msg hook.
** Don't show 'Suggestion for commit message' when `Change-Id` is missing.

* Allow to publish draft patch sets even when `allowDrafts` is false.
+
If a user uploaded a change while `allowDrafts` was enabled, and then it was
disabled by the administrator, the uploaded change could not be published and
was stuck in the draft state.

* link:https://code.google.com/p/gerrit/issues/detail?id=3249[Issue 3249]:
Fix server error when checking mergeability of a change.

* Workaround Guice bug "getPathInfo not decoded".
+
Due to link:https://github.com/google/guice/issues/745[Guice issue 745], cloning
of a repository with a space in its name was impossible.

* Print proper names for tasks in output of `show-queue` command.
+
Some tasks were not displayed with the proper name.

* Prevent wrong content type for CSS files.
+
The mime-util library contains two content type mappings for .css files:
`application/x-pointplus` and `text/css`.  Unfortunately, using the wrong one
will result in most browsers discarding the file as a CSS file.  Ensure we only
use the correct type for CSS files.

SSH
~~~

* Prevent double authentication for the same public key.


Secondary Index / Search
~~~~~~~~~~~~~~~~~~~~~~~~

* link:https://code.google.com/p/gerrit/issues/detail?id=2822[Issue 2822]:
Improve Lucene analysis of words linked with underscore or dot.
+
Instead of treating words linked with underscore or dot as one word, Lucene now
treats them as separate words.

* Fix support for `change~branch~id` in query syntax.


Configuration
~~~~~~~~~~~~~

[[remove-generate-http-password-capability]]
* Remove the 'Generate HTTP Password' capability.
+
The 'Generate HTTP Password' capability has been removed to close a security
vulnerability.  Now only administrators are allowed to generate and delete other
users' http passwords via the REST or SSH interface.
+
It is encouraged to clean up your `project.config` settings after upgrading.

* Fix support for multiple `footer` tokens in tracking ID config.
+
Contrary to
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#trackingid[
the documentation], if more than one `footer` token was specified in the
`trackingid` section, only the first was used.

* Treat empty
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#hooks[
`hooks.*`] values as missing, rather than trying to execute the hooks
directory.

* Fix `changed-merged` hook configuration.
+
Contrary to the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/config-gerrit.html#hooks[
documentation], the changed-merged hook configuration value was being
read from `hooks.changeMerged`. Fix to use `hooks.changeMergedHook` as
documented.

Web UI
~~~~~~

* link:http://code.google.com/p/gerrit/issues/detail?id=3044[Issue 3044]:
Remove stripping `#` in login redirect.

Change Screen
^^^^^^^^^^^^^

* link:http://code.google.com/p/gerrit/issues/detail?id=3147[Issue 3147]:
Allow to disable muting of common path prefixes in the file list.
+
In the file table, parts of the file path that are common to the file previously
listed are muted. The purpose of this is to make it easier to see files that all
belong under the same path, but some users find it annoying.
+
This feature can now be enabled or disabled, per user, with the 'Mute Common
Path Prefixes In File List' setting.

* link:http://code.google.com/p/gerrit/issues/detail?id=3130[Issue 3130]:
Remove special handling of 'LGTM' in review comments
+
Typing 'LGTM' in the review cover message no longer automatically selects the
highest available Code-Review score.

* Show a confirmation dialog before deleting a draft change or patch set.
+
Previously there was no confirmation and a draft change or revision patch
set would be lost if the button was accidentally clicked.

* link:https://code.google.com/p/gerrit/issues/detail?id=2533[Issue 2533]:
Improve the layout and color scheme of buttons.
+
Several improvements have been made:
+
** Move 'Publish' and 'Delete Change/Revision' buttons into header.
+
If a change/revision is a draft the natural next step is to publish (or delete)
it, hence these buttons should be displayed in a more prominent place.

** Highlight the 'Publish' button in blue.
+
If a change is a draft the natural next step is to publish it, hence
the 'Publish' button should be highlighted similar to the quick
approve button.

** Fix the border color of buttons on the reply popup.
+
The buttons are blue but had white borders, which was inconsistent with the
buttons on the change screen.

** Remove red color for 'Abandon' and 'Restore' buttons.
+
There is nothing dangerous about these operations that justifies
highlighting the buttons in red color. When the buttons are clicked
there is a popup where the user must confirm the operation, so it can
still be canceled.

** Hide quick approve button for draft changes.
+
A draft change cannot be submitted, hence quick approving it is not that
important. Hiding the quick approve button on draft changes makes space in the
header for displaying more important actions such as 'Publish'.

* Differentiate between conflicts and already merged errors in cherry-pick
+
When a cherry-pick operation failed with 'Cherry pick failed' error, there was no
way to know the reason for the failure: merge conflict or the commit is already
on the target branch.  These failures are now differentiated and an appropriate
error is reported.

* link:https://code.google.com/p/gerrit/issues/detail?id=2837[Issue 2837]:
Improve display of long user names for collapsed comments in history.
+
If there were several users with long user names with the same prefix, e.g.
'AutomaticGerritVoterLinux' and 'AutomaticGerritVoterWindows', they would both
be shown as 'AutomaticGerritVo...' and users had to expand the comment to see
the full user name.
+
The ellipsis is now inserted in the middle of the user name so that the start
and end of the user name are always visible, e.g. 'AutomaticG...VoterLinux' and
'AutomaticG...terWindows'.

* link:https://code.google.com/p/gerrit/issues/detail?id=2992[Issue 2992]:
Fix display of review comments for Chrome on Android.
+
Chrome for Android has Font Boosting, which caused the review comments to
be displayed too large.

* link:https://code.google.com/p/gerrit/issues/detail?id=2909[Issue 2909]:
Make change owner votes removable.
+
If a change owner voted on a change, it was not possible for anyone other
than the owner to remove the vote.

* Preserve topic when cherry-picking.
+
When a change is cherry-picked, the topic from the source change is preserved
on the newly created change.

* link:http://code.google.com/p/gerrit/issues/detail?id=3007[Issue 3007]:
Make the selected tab persistent.
+
If a change from the 'Same Topic' tab was clicked, the selected tab would reset
to the default tab ('Related Changes').

* Left-align column titles in the file list.

* Increase right margin of download box to make space for scrollbar.
+
Under some circumstances the browser's scrollbar would be shown over the
copy-to-clipboard icons in the download dropdown.

* Display +1 score's text next to the checkbox for simple boolean labels.
+
In the reply box, the text of the label score is displayed on the right hand
side when a score is selected, but this was missing for simple boolean labels.

* Don't show missing accounts as reviewer suggestions.

* Show the email address that matched the search in reviewer suggestions.
+
When matching accounts by email address against an external account, results
now show the email address that matched, not the preferred email address.

* Fix accidental reviewer selection on slow networks.

* link:http://code.google.com/p/gerrit/issues/detail?id=3120[Issue 3120]:
Align parent weblinks with parent commits in the commit box.


Side-By-Side Diff
^^^^^^^^^^^^^^^^^

* Return to normal mode after editing a draft comment.
+
Previously it would remain in visual mode.

* Fix C++ header and source syntax highlighting
+
cpp and hpp files were sometimes rendered with C mode and not the extended C++
mode.  This prevented keywords like `class` from being colored by the
highlighter.


Project Screen
^^^^^^^^^^^^^^

* Fix alignment of checkboxes on project access screen.
+
The 'Exclusive' checkbox was not aligned with the other checkboxes.

REST API
~~~~~~~~

Changes
^^^^^^^

* Remove the administrator restriction on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#index-change[
index change] endpoint.
+
The endpoint can now be used by any user who has visibility of the change.

* Only include account ID in responses unless `DETAILED_ACCOUNTS` option is set.
+
The behavior was inconsistent with the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-accounts.html#account-info[
documentation]. In the default case it was including only the account name,
rather than only the account ID.

* Include revision's ref in responses.
+
The ref of a revision was only returned as part of the fetch info, which is only
available if the download commands are installed.

* Correctly set the limit to the default when no limit is given in the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-changes.html#suggest-reviewers[
suggest reviewers] endpoint.

* Return correct response from 'delete draft' endpoints.
+
When the `change.allowDrafts` setting is False, it is not allowed to delete
draft changes or patch sets.
+
In this case the response `405 Method Not Allowed` is now returned, instead of
`409 Conflict`.


Projects
^^^^^^^^

* Make it mandatory to specify at least one of the `--prefix`, `--match` or `--regex`
options in the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.11/rest-api-projects.html#list-projects[
list projects] endpoint.

* link:https://code.google.com/p/gerrit/issues/detail?id=2706[Issue 2706]:
Do not delete branches concurrently.
+
Deleting multiple branches from the UI was resulting in a server error when
branches were in the packed-refs.

* Add retry logic for lock failure when deleting a branch.

* link:http://code.google.com/p/gerrit/issues/detail?id=3153[Issue 3153]:
Fix handling of project names ending with `.git`.
+
The projects REST API documentation states that the `.git` suffix will be
stripped off the input project name, if present.
+
This was working for the 'Create Project' endpoint, but not for any of the
others.


Plugins
~~~~~~~

Replication
^^^^^^^^^^^

* Create missing repositories on the remote when replicating with the git
protocol.

* Make `createMissingRepositories = false` take effect on `project-created` event.
+
Previously `createMissingRepositories = false` would prevent the replication
plugin from trying to create a new project when a `ref-updated` event was fired,
but when a `project-created` event was fired the replication plugin would try to
create a project on the remote.


Upgrades
--------

* Update Antlr to 3.5.2.

* Update ASM to 5.0.3.

* Update Bouncycastle to 1.51.

* Update CodeMirror to 4.10.0-6-gd0a2dda.

* Update Guava to 18.0.

* Update Guice to 4.0-beta5.

* Update GWT to 2.7.

* Update gwtjsonrpc to 1.7-2-g272ca32.

* Update gwtorm to 1.14-14-gf54f1f1.

* Update Jetty to 9.2.9.v20150224.

* Update JGit to 3.7.0.201502260915-r.58-g65c379e.

* Update Lucene to 4.10.2.

* Update Parboiled to 1.1.7.

* Update Pegdown to 1.4.2.

* Update SSHD to 0.14.0.
