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


Gerrit 2.8 is now available:

link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.8.war[
http://code.google.com/p/gerrit/downloads/detail?name=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`.


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


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

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config-gerrit.html#index[
Secondary indexing with Lucene and Solr].

* Lots of new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api.html[
REST API endpoints].

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

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


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

Build
~~~~~

* Gerrit is now built with
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-buck.html[
Buck].

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


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

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

* Site administrators can define a
link:http://gerrit-documentation.googlecode.com/svn/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:[http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/pgm-init.html[
site initialization command].

* New `auth.httpDisplaynameHeader` and `auth.httpEmailHeader` in the
link:[http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_gerrit.html#_a_id_httpd_a_section_httpd[
Customizable registration page for HTTP authentication].

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_gerrit.html#_a_id_httpd_a_section_httpd[
Configurable external `robots.txt` file].

* Support for
link:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config-auto-site-initialization.html[
auto-initialized on server startup].

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_gerrit.html#httpd.filterClass[
Configurable filtering of HTTP traffic through Gerrit's HTTP protocol].

* Labels can be
link:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-access.html#list-access[
List access rights for project(s)]

Accounts
^^^^^^^^


* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#create-account[
Create account]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#get-account-name[
Get account full name]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#set-account-name[
Set account full name]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#delete-account-name[
Delete account full name]

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

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#get-account-email[
Get account email address]

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

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#create-account-email[
Create account email]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#delete-account-email[
Delete account email]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#get-active[
Get account state]

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

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

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

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

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

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

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

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

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

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-accounts.html#get-username[
Get account username]

Changes
^^^^^^^


* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#rebase-change[
Rebase change]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#cherry-pick[
Cherry-pick revision]

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

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

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

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

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#publish-draft-change[
Publish draft change]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#delete-draft-change[
Delete draft change]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#suggest-reviewers[
Suggest reviewers]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#get-included-in[
Get included in]


Config
^^^^^^

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-config.html#get-capabilities[
Get capabilities]

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


Projects
^^^^^^^^


* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#list-branches[
List branches]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#get-branch[
Get branch]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#create-branch[
Create branch]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#delete-branch[
Delete branch]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#list-child-projects[
List child projects]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#get-child-project[
Get child project]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-projects.html#set-config[
Set configuration]


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


New global capabilities are added.

* link:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#ui_extension[
UI extension] and
link:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config-validation.html#pre-merge-validation[
pre-merge validation steps].

* Plugins may now provide
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#capabilities[
Global capabilities].

* Plugins may now
link:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#top-menu-extensions[
entries in Gerrit's top menu].

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


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.

* 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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_gerrit.html#gerrit.installCommitMsgHookCommand[
configurable].

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/cmd-ls-members.html[
New `ls-members` command].

* link:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/cmd-stream-events.html[
`stream-events` command].

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


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.


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


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

* Honor the `gerrit.cannonicalWebUrl` 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
The link:http://gerrit-documentation.googlecode.com/svn/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.

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.

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.

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:http://gerrit-documentation.googlecode.com/svn/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:http://gerrit-documentation.googlecode.com/svn/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.


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.

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:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/index.html[
documentation index page] is rewritten in a hierarchical structure.

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


Upgrades
~~~~~~~~

* Update JGit to 3.0.0.201306101825-r.41-g84d2738
* 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
* asciidoctor 0.1.4 is now required to build the documentation
* jsr305 library was removed
