= Release notes for Gerrit 2.11


Gerrit 2.11 is now available:

link:https://www.gerritcodereview.com/download/gerrit-2.11.war[
https://www.gerritcodereview.com/download/gerrit-2.11.war]

Gerrit 2.11 includes the bug fixes done with
link:ReleaseNotes-2.10.1.html[Gerrit 2.10.1],
link:ReleaseNotes-2.10.2.html[Gerrit 2.10.2] and
link:ReleaseNotes-2.10.3.html[Gerrit 2.10.3].
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].

=== 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

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


=== 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

==== Change List

* link:http://code.google.com/p/gerrit/issues/detail?id=3304[Issue 3304]:
Always show a tooltip on the label column entries.

==== 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 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.
