Release notes for Gerrit 2.8
============================


Gerrit 2.8 is now available:

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


Schema Change
-------------


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

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

*WARNING:* The replication plugin now automatically creates missing repositories
on the destination if during the replication of a ref the target repository is
found to be missing. This is a change in behavior of the replication plugin. To go
back to the old behavior, set the parameter `remote.NAME.createMissingRepositories`
in the `replication.config` file to `false`.

*WARNING:* The deprecated `approve` alias for the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-review.html[
review] SSH command has been removed. This is important for all users
of the Jenkins link:https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger[
Gerrit Trigger Plugin] since this plugin by default uses the `approve`
command to vote and comment on changes in Gerrit. If you use the Gerrit
Trigger Plugin, go to its global configuration in Jenkins and adapt the
Gerrit commands to use the `review` command instead of the `approve`
command.

*WARNING:* The new change screen only displays download commands if the
`download-commands` core plugin or any other plugin providing download
commands is installed. The `download-commands` plugin provides the
standard download schemes and commands. It is packaged together with
Gerrit and can be installed during the
link:https://gerrit-review.googlesource.com/Documentation/pgm-init.html[
site initialization].


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


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/intro-change-screen.html[
New change screen] with completely redesigned UI and fully using the REST API.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#__a_id_index_a_section_index[
Secondary indexing with Lucene and Solr].

* Lots of new link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api.html[
REST API endpoints].

* New
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#ui_extension[
UI extension] and
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/js-api.html[
JavaScript API] for plugins.

* New build system using Facebook's link:http://facebook.github.io/buck/[Buck].

* New core plugin: Download Commands.


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

Build
~~~~~

* Gerrit is now built with
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-buck.html[
Buck].

* Documentation is now built with Buck and link:http://asciidoctor.org[Asciidoctor].


Indexing and Search
~~~~~~~~~~~~~~~~~~~

Gerrit can be configured to use a
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#__a_id_index_a_section_index[
secondary index] with Lucene or Solr.

Existing search operations use the secondary index, when enabled, to increase
performance and reduce resource usage.

The following additional search operations are possible when secondary indexing
is enabled:

* New
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/user-search.html#comment[
`comment` search operator].

* The link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/user-search.html#file[
`file` operator] can be used to find changes on the specified file.

* Regular expressions are allowed in `file` searches.


*WARNING:* After enabling the secondary index, the index must be built using the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/pgm-reindex.html[
reindex program] before restarting the Gerrit server.


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

* Project owners can define `receive.maxObjectSizeLimit` in the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#receive.maxObjectSizeLimit[
project configuration] to further reduce the global setting.

* Site administrators can define a
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-mail.html#_footer_vm[
footer template] that will be appended to the end of all outgoing emails after
the 'ChangeFooter' and 'CommentFooter'.

* New `topic-changed` hook and stream event is fired when a change's topic is
edited from the Web UI or via a REST API.

* New options `--list-plugins` and `--install-plugins` on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/pgm-init.html[
site initialization command].

* New `auth.httpDisplaynameHeader` and `auth.httpEmailHeader` in the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#__a_id_auth_a_section_auth[
authentication configuration].
+
When using HTTP-based authentication, the SSO can be delegated to check not only
the user credentials but also to fetch the full user-profile.
+
With the config properties `auth.httpDisplaynameHeader` and `auth.httpEmailHeader`
it is possible to configure the name of the headers used for propagating this extra
information and enforce them on the user profile during login and beyond.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#__a_id_httpd_a_section_httpd[
Customizable registration page for HTTP authentication].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#__a_id_httpd_a_section_httpd[
Configurable external `robots.txt` file].

* Support for
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/database-setup.html#createdb_oracle[
Oracle database].

* New bash completion script for autocompletion of parameters to the gerrit.sh wrapper.

* The site can be
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-auto-site-initialization.html[
auto-initialized on server startup].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#httpd.filterClass[
Configurable filtering of HTTP traffic through Gerrit's HTTP protocol].

* Labels can be
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-labels.html#httpd.label_copyAllScoresIfNoCodeChange[
configured to copy scores forward to new patch sets if there is no code change].

* Labels can be
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-labels.html#httpd.label_copyAllScoresOnTrivialRebase[
configured to copy scores forward to new patch sets for trivial rebases].

Web UI
~~~~~~


Global
^^^^^^

* The change status is shown in a separate column on dashboards and search results.

Change Screens
^^^^^^^^^^^^^^


* New change screen with completely redesigned UI, using the REST API.
+
Site administrators can
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#gerrit.changeScreen[
configure which change screen is shown by default].
+
Users can choose which one to use in their personal preferences, either using
the site default or explicitly choosing the old one or new one.

* link:https://code.google.com/p/gerrit/issues/detail?id=141[Issue 141]:
In the new change screen, comments can be added on a range of lines.

* New button to cherry-pick the change to another branch.

* When issuing a rebase via the Web UI, the committer is now the logged in
  user, rather than "Gerrit Code Review".
+
If the user has more than one email address, the preferred email address will
be used.

* Default user's full name to git committer name if user has not configured a
full name in their profile.

* Include comment author attributes in comment panels.
+
Comment author's email address and name are included as attributes in comment
panels.  This makes it easier to filter out CI-based comments using user
scripts.

* Copy reviewed flag to new patch sets for identical files.
+
If a user has already seen and reviewed a file, the 'reviewed' flag is forwarded
on to the next patch set when the content of the file in the next patch set is
identical to the reviewed file.

* "Uploaded Patch Set 1" change message is added on changes when they
are uploaded.


REST API
~~~~~~~~

* Several new link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api.html[
REST API endpoints] are added.

* REST views can determine how long their response should be cached.

* REST views can handle 'HTTP 422 Unprocessable Entity' responses.

Access Rights
^^^^^^^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-access.html#list-access[
List access rights for project(s)]

Accounts
^^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#create-account[
Create account]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-account-name[
Get account full name]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#set-account-name[
Set account full name]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#delete-account-name[
Delete account full name]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#list-account-emails[
List account email addresses]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-account-email[
Get account email address]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#set-preferred-email[
Set account preferred email address]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#create-account-email[
Create account email]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#delete-account-email[
Delete account email]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-active[
Get account state]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#set-active[
Set account state to active]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#delete-active[
Set account state to inactive]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-http-password[
Get account HTTP password]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#set-http-password[
Set or generate account HTTP password]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#delete-http-password[
Delete account HTTP password]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#list-ssh-keys[
List account SSH keys]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-ssh-key[
Get account SSH key]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#add-ssh-key[
Add account SSH key]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#delete-ssh-key[
Delete account SSH key]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-username[
Get account username]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#get-starred-changes[
Get starred changes]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#star-change[
Star change]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-accounts.html#unstar-change[
Unstar change]

Changes
^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#rebase-change[
Rebase change]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#cherry-pick[
Cherry-pick revision]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#get-content[
Get content of a file in a revision]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#get-patch[
Get revision as a formatted patch]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#get-diff[
Get diff of a file in a revision]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#get-commit[
Get parsed commit of a revision]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#publish-draft-change[
Publish draft change]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#delete-draft-change[
Delete draft change]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#suggest-reviewers[
Suggest reviewers]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-changes.html#get-included-in[
Get included in]


Config
^^^^^^

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-config.html#get-capabilities[
Get capabilities]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-config.html#get-version[
Get version] (of the Gerrit server)


Projects
^^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#list-branches[
List branches]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#get-branch[
Get branch]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#create-branch[
Create branch]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#delete-branch[
Delete branch]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#list-child-projects[
List child projects]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#get-child-project[
Get child project]

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/rest-api-projects.html#set-config[
Set configuration]


Capabilities
~~~~~~~~~~~~


New global capabilities are added.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/access_control.html#capability_generateHttpPassword[
Generate Http Password] allows non-administrator users to generate HTTP
passwords for users other than themselves.
+
This capability would typically be assigned to a non-interactive group
to be able to generate HTTP passwords for users from a tool or web service
that uses the Gerrit REST API.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/access_control.html#capability_runAs[
Run As] allows users to impersonate other users by setting the `X-Gerrit-RunAs`
HTTP header on REST API calls.
+
Site administrators do not inherit this capability;  it must be granted
explicitly.


Emails
~~~~~~

* The `RebasedPatchSet` template is removed.  Email notifications for rebased
changes are now sent with the `ReplacePatchSet` template.

* Comment notification emails now include context of comments that are replied
to, and links to the file(s) in which comments are made.


Plugins
~~~~~~~


Global
^^^^^^


* Plugins may now contribute buttons to various parts of the UI using the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#ui_extension[
UI extension] and
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/js-api.html[
JavaScript API].

* Plugins may now provide an 'About' section on their documentation index page.

* Plugins may now provide separate sections for REST API and servlet
documentation on their index page.

* Plugins may now provide
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-validation.html#pre-merge-validation[
pre-merge validation steps].

* Plugins may now provide
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#capabilities[
Global capabilities].

* Plugins may now
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#plugin_name[
define their own name] and get the name injected at runtime.

* The "hello world" plugin is replaced with the "cookbook plugin" which has more
examples of the plugin API's usage.

* Plugins may now trigger and listen to a "project deleted"
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#events[
event].

* link:https://code.google.com/p/gerrit/issues/detail?id=2101[Issue 2101]:
Plugins implementing LifecycleListener can use auto registration.

* Plugins may bind REST endpoints with empty view names.

* Plugins may now provide
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#top-menu-extensions[
entries in Gerrit's top menu].

* Plugins may now
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#stream-events[
send events to the events stream].

* Plugins may now bind multiple SSH commands to the same implementation class.

* Plugins may now provide
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/dev-plugins.html#download-commands[
download schemes and download commands].
+
Commonly used download schemes and commands are moved out of core
Gerrit and are now implemented by a new core plugin, `download-commands`.



Commit Message Length Checker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


* Commits whose subject or body length exceeds the limit can be rejected.

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

* Automatically create missing repositories on the destination.
+
If during the replication of a ref the target repository is found to be missing,
the repository is automatically created.
+
This is a change in behavior of the replication plugin. To go back to the old
behavior, set the parameter `remote.NAME.createMissingRepositories` in the
`replication.config` file to `false`.

* Support for replication of project deletions.
+
The replication plugin can now be configured to listen to project deletion events
and to replicate the project deletions. By default project deletions are *not*
replicated.

* link:http://code.google.com/p/gerrit/issues/detail?id=1880[Issue 1880]:
Make `{name}` placeholder optional when replicating a single project.
+
The `{$name}` placeholder is optional when replicating a single project,
allowing a single project to be replicated under a different name.

* Project names can be matched with wildcard or regex patterns in `replication.config`.

* The `replication start` command does not exit until replication is finished
when the `--wait` option is used.

* The `replication start` command displays a summary of the replication status.

* Retry counts are added to replication task names, so they can be seen in the
output of the `show-queue` command.

* The `remoteNameStyle` option can be set to `basenameOnly` to replicate projects
using only the basename on the target server.

* The `startReplication` global capability is now provided by the plugin.

* Pushes to each destination URI are serialized.
+
Scheduling a retry to avoid collision with an in-flight push is differentiated
from a retry due to a transport error.  In the case of collision avoidance, the
job is rescheduled according to the replication delay, rather than the retry
delay.


ssh
~~~


* The `commit-msg` hook installation command is now
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-gerrit.html#gerrit.installCommitMsgHookCommand[
configurable].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-ls-members.html[
New `ls-members` command].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-set-members.html[
New `set-members` command].
+
New command to manipulate group membership. Members can be added or removed
and groups can be included or excluded in one specific group or number of groups.

* The full commit message is now included in the data sent by the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-stream-events.html[
`stream-events` command].

* The link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-show-queue.html[
`show-queue` command] now shows the time that a task was added to the queue.

* The deprecated `approve` alias of the `review` command is removed.

* The 'CHANGEID,PATCHSET' format for specifying a patch set in the `review` command
is no longer considered to be a 'legacy' feature that will be removed in future.

Daemon
~~~~~~


* Add `--init` option to Daemon to initialize site on daemon start.
+
The `--init` option will also upgrade an already existing site and is processed in
non-interactive (batch) mode.


Bug Fixes
---------


General
~~~~~~~


* Use the parent change on the same branch for rebases.
+
Since there can be multiple changes with the same commit on different branches,
use the parent change on the same branch during rebase.

* link:https://code.google.com/p/gerrit/issues/detail?id=600[Issue 600]:
Fix change stuck in SUBMITTED state but actually merged.

* link:https://code.google.com/p/gerrit/issues/detail?id=1699[Issue 1699]:
Fix handling of projects with trailing ".git" suffix.

* Limit retrying of submitted changes to 12 hours.

* Don't allow project owners to delete branches if force push is blocked.

* Allow usernames to begin with digit.

* Verify access to source ref during add branch operation.
+
Previously Gerrit didn't check access to source ref during add branch
operation. Because of that users could create a branch from any known
commit SHA1, even when they didn't have access to that commit.

* Fix Gerrit API sources JAR contents.
+
The gerrit-extension-api-X.Y-all-sources.jar did not actually contain any
sources.

* Generate javadoc for Gerrit Extension and Plugin APIs.

* link:https://code.google.com/p/gerrit/issues/detail?id=2244[Issue 2244]:
Update patch status before skipping duplicate emails.

* link:https://code.google.com/p/gerrit/issues/detail?id=1640[Issue 1640]:
Catch missing LDAP accounts in group membership.

* Use `rev-parse` to find gitdir when generating commit-msg hook hint.

* Performance Fix: Minimize number of advertisedHaves.
+
By filtering the refs before the objectIds are added to advertisedHaves,
lots of time can be saved when pushing to complex Gits.


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


* Do not persist default project state in `project.config`.

* Honor the `gerrit.canonicalWebUrl` setting when opening the browser after init.

* Fix 'query disabled' error when Query Limit is set.

* Honor the `gerrit.createChangeId` setting from the git config in the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-hook-commit-msg.html[
`commit-msg` hook].

* link:https://code.google.com/p/gerrit/issues/detail?id=2045[Issue 2045]:
Define user scope when parsing server config.

* link:https://code.google.com/p/gerrit/issues/detail?id=1990[Issue 1990]:
Support optional Certificate Revocation List (CRL) with `CLIENT_SSL_CERT_LDAP`.

* Do not override error and gc logging configuration provided by the
`-Dlog4j.configuration` parameter.

* Fix JdbcSQLException when numbers are read from cache.

Web UI
~~~~~~


Global
^^^^^^


* link:https://code.google.com/p/gerrit/issues/detail?id=1574[Issue 1574]:
Correctly highlight matches of text in escaped HTML entities in suggestion results.

* link:https://code.google.com/p/gerrit/issues/detail?id=1996[Issue 1996]:
The "Keyboard Shortcuts" help popup can be closed by pressing the Escape key.

* link:https://code.google.com/p/gerrit/issues/detail?id=2013[Issue 2013]:
Correctly populate the list of watched changes when watching more than one project.

* Display "Working..." when header is hidden.

* link:https://code.google.com/p/gerrit/issues/detail?id=2125[Issue 2125]:
Correctly shows '-1' instead of '1' for label score.
+
If a user voted '-1', and then another user voted '+1' for a label, the
label was shown as a red '1' in the change list instead of red '-1'.

Change Screens
^^^^^^^^^^^^^^


* Default review comment visibility is changed to expand all recent.
+
By default all comments within the last week are expanded, rather than
only the most recent.

* link:https://code.google.com/p/gerrit/issues/detail?id=1814[Issue 1814]:
Sort labels alphabetically by name in the approval table.

* Don't add "This patchset was cherry picked to ..." for the same change.
+
If a patchset is cherry-picked to the same destination branch and
ends up on the same change, it does not make sense to add the "This
patchset was cherry picked to change ..." message.
+
In this case, it makes more sense for the message to say "Uploaded
patch set N" instead.

* Make links appear with consistent colors.

* Prevent duplicate permitted_labels from being shown in labels list.

Diff Screens
^^^^^^^^^^^^


* link:https://code.google.com/p/gerrit/issues/detail?id=1233[Issue 1233]:
Prevent expansion when whole file isn't loaded.

* link:https://code.google.com/p/gerrit/issues/detail?id=2122[Issue 2122]:
Show review comments for unchanged files.
+
When comparing patch sets and some comment was put in one side,
that comment was not shown if there was no code changed between
the two patch sets

Project Screens
^^^^^^^^^^^^^^^


* Only enable the delete branch button when branches are selected.

* Disable the delete branch button while branch deletion requests are
still being processed.

User Profile Screens
^^^^^^^^^^^^^^^^^^^^


* The preferred email address field is shown as empty if the user has no
preferred email address.


REST API
~~~~~~~~


* Support raw input also in POST requests.

* Show granted date for labels/all when using `/changes/`.

* Return all revisions when `o=ALL_REVISIONS` is set on `/changes/`.

ssh
~~~


* The `--force-message` option is removed from the
The link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-review.html[
`review` command].

* link:https://code.google.com/p/gerrit/issues/detail?id=1908[Issue 1908]:
Provide more informative error messages when rejecting updates.

* Remove the limit in the query of patch sets by revision.

* Add `isDraft` in the `patchSet` attribute of `stream-events` data.
+
This allows consumers of the event stream to determine whether or not
the event is related to a draft patch set.

* Normalize the case of review labels submitted via the
The link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/cmd-review.html[
`review` command].

* The `@CommandMetaData(descr)` annotation is deprecated in favor of `@CommandMetaData(description)`.

* Improve the error message when rejecting upload for review to a read-only project.


Plugins
~~~~~~~

Global
^^^^^^

* Better error message when a Javascript plugin cannot be loaded.

* Plugin documentation links are opened in a new tab.

* The GitReferenceUpdatedListener.Event API is simplified.
+
The Event exposed the getUpdates method which implied that one Event
could contain updates of more than one reference. However, this feature
was never used.
+
The API is simplified in the sense that one Event now corresponds to
one ref update only.

* Make plugin servlet's context path authorization aware.


Review Notes
^^^^^^^^^^^^

* Do not try to create review notes for ref deletion events.

* Fix committing the notes from the export command.

* link:https://code.google.com/p/gerrit/issues/detail?id=2087[Issue 2087]:
Fix note creation when the same commit exists in another Git repository.

* Improve the export command performance.

* Create review note also when newObjectId already present in another branch.

* Correct documentation of the export command.

Emails
~~~~~~

* Email notifications are sent for new changes created via actions in the
Web UI such as cherry-picking or reverting a change.


Tools
~~~~~


* git-exproll.sh: return non-zero on errors


Documentation
-------------


* The link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/index.html[
documentation index page] is rewritten in a hierarchical structure.

* Documentation of
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8/config-project-config.txt[
project configuration] is added.

* Various spelling mistakes are corrected in the documentation and previous
release notes.

* link:https://code.google.com/p/gerrit/issues/detail?id=2144[Issue 2144]:
Documentation of the query operator is fixed.


Upgrades
--------

* Update JGit to 3.1.0.201310021548-r
* Update gwtorm to 1.7
* Update guice to 4.0-beta
* Update guava to 15.0
* Update H2 to 1.3.173
* Update bouncycastle to 1.44
* Update Apache Mina to 2.0.7
* link:https://code.google.com/p/gerrit/issues/detail?id=2232[Issue 2232]:
Update Apache SSHD to 0.9.0.201311081
* asciidoctor 0.1.4 is now required to build the documentation
* jsr305 library was removed
* link:https://code.google.com/p/gerrit/issues/detail?id=2232[Issue 2232]:
Update Jsch to 1.5.0
