= Release notes for Gerrit 2.5

Gerrit 2.5 is now available:

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

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

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

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

=== Warning on upgrade to schema version 68

The migration to schema version 68, may result in a warning, which can
be ignored when running init in the interactive mode.

E.g. this warning may look like this:

----
Upgrading database schema from version 67 to 68 ...
warning: Cannot create index for submodule subscriptions
Duplicate key name 'submodule_subscriptions_access_bySubscription'
Ignore warning and proceed with schema upgrade [y/N]?
----

This migration is creating an index for the
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-submodules.html[submodule feature] in
Gerrit. When the submodule feature was introduced the index was only
created when a new site was initialized, but not when Gerrit was
upgraded. This migration tries to create the index, but it will only
succeed if the index does not exist yet. If the index exists already,
the creation of the index will fail. There was no database independent
way to detect this case and this is why this migration leaves it to the
user to decide if a failure should be ignored or not. If from the error
message you can see that the migration failed because the index exists
already (as in the example above), you can safely ignore this warning.

== Upgrade Warnings

[[replication]]
=== Replication

Gerrit 2.5 no longer includes replication support out of the box.
Servers that reply upon `replication.config` to copy Git repository
data to other locations must also install the replication plugin.

=== Cache Configuration

Disk caches are now backed by individual H2 databases, rather than
Ehcache's own private format. Administrators are encouraged to clear
the `'$site_path'/cache` directory before starting the new server.

The `cache.NAME.diskLimit` configuration variable is now expressed in
bytes of disk used. This is a change from previous versions of Gerrit,
which expressed the limit as the number of entries rather than bytes.
Bytes of disk is a more accurate way to size what is held. Admins that
set this variable must update their configurations, as the old values
are too small. For example a setting of `diskLimit = 65535` will only
store 64 KiB worth of data on disk and can no longer hold 65,000 patch
sets. It is recommended to delete the diskLimit variable (if set) and
rely on the built-in default of `128m`.

The `cache.diff.memoryLimit` and `cache.diff_intraline.memoryLimit`
configuration variables are now expressed in bytes of memory used,
rather than number of entries in the cache. This is a change from
previous versions of Gerrit and gives administrators more control over
how memory is partitioned within a server. Admins that set this variable
must update their configurations, as the old values are too small.
For example a setting of `memoryLimit = 1024` now means only 1 KiB of
data (which may not even hold 1 patch set), not 1024 patch sets.  It
is recommended to set these to `10m` for 10 MiB of memory, and
increase as necessary.

The `cache.NAME.maxAge` variable now means the maximum amount of time
that can elapse between reads of the source data into the cache, no
matter how often it is being accessed. In prior versions it meant how
long an item could be held without being requested by a client before
it was discarded. The new meaning of elapsed time before consulting
the source data is more useful, as it enables a strict bound on how
stale the cached data can be. This is especially useful for slave
servers account and permission data, or the `ldap_groups` cache, where
updates are often made to the source without telling Gerrit to reload
the cache.

== New Features

=== Plugins

The Gerrit server functionality can be extended by installing plugins.
Depending on how tightly the extension code is coupled with the Gerrit
server code, there is a distinction between
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#plugin[plugins] and
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#extension[extensions].

* link:#replication[Move replication logic to replication plugin]
+
This splits all of the replication code out of the core server
and moves it into a standard plugin.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html[Documentation about
  plugin development] including instructions for:
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#getting-started[how to get
   started with plugin development]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#deployment[plugin
   deployment/installation]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#API[API for plugins and
  extensions]

* Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#ssh[SSH command
  plugins]
+
Allows plugin developers to declare additional SSH commands.

* Enable link:#ssh-alias[aliases for SSH commands]
+
Site administrators can alias SSH commands from a plugin into the
`gerrit` namespace.
+
The aliases are configured statically at server startup, but are
resolved dynamically at invocation time to the currently loaded
version of the plugin. If the plugin is not loaded, or does not
define the command, "not found" is returned to the user.

* Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#http[HTTP
  plugins]
+
Plugins may contribute to the /plugins/NAME/ URL space.

* Automatic registration of plugin bindings
+
If a plugin has no modules declared in the manifest, automatically
generate the modules for the plugin based on the class files that
appear in the plugin and the `@Export` annotations that appear on
these concrete classes.
+
For any non-abstract command that extends SshCommand, plugins may
declare the command with `@Export("name")` to
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#ssh[bind the implementation
as that SSH command].
+
Likewise link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#http[HTTP servlets
can also be bound to URLs].

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#data-directory[Support a data
  directory for plugins on demand]

* Support serving static/ and Documentation/ from plugins
+
The static/ and Documentation/ resource directories of a plugin can be
served over HTTP for any loaded and running plugin, even if it has no
other HTTP handlers. This permits a plugin to supply icons or other
graphics for the web UI, or documentation content to help users learn
how to use the plugin.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#documentation[Auto-formatting
  of plugin HTTP pages from Markdown files]
+
If Gerrit detects that a requested plugin resource does not exist, but
instead a file with a `.md` extension does exist, Gerrit opens the
`.md` file and reformats it as html.

* Support of link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#macros[macros in
  Markdown plugin documentation]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#auto-index[Automatic
  generation of an index for the plugin documentation]

* Support for audit plugins
+
Plugins can implement an `AuditListener` to be informed about auditable
actions:
+
----
  @Listener
  public class MyAuditTrail extends AuditListener
----
+
The plugin must define a plugin module that binds the implementation of
the audit listener in the `configure()` method:
+
----
  DynamicSet.bind(binder(), AuditListener.class).to(MyAuditTrail.class);
----

* Web UI for plugins
+
Administrators can see the list of installed plugins in the WebUI
under `Admin` > `Plugins`. For each plugin the plugin status is shown
and it is possible to navigate to the plugin documentation.

* Servlet to list plugins
+
Administrators can retrieve plugin information from a REST interface
by loading `<server-url>/a/plugins/`.

* Support SSH commands to
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-ls.html[list the installed
   plugins]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-install.html[install plugins]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-enable.html[enable plugins]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-remove.html[disable plugins]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-reload.html[reload plugins]

* Support installation of core plugin on site initialization

* Automatically load/unload/reload plugins
+
The PluginScanner thread runs every 1 minute by default and loads any
newly created plugins, unloads any deleted plugins, and reloads any
plugins that have been modified.
+
The check frequency can be configured by setting
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#plugins.checkFrequency[
plugins.checkFrequency] in the Gerrit config file. By configuration
the scanner can also be disabled.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#classpath[Loading of plugins
  in own ClassLoader]

* Plugin cleanup in the background
+
When a plugin is stopped, schedule a Plugin Cleaner task to run
1 minute later to try and clean out the garbage and release the
JAR from `$site_path/tmp`.

* Export `LifecycleListener` as extension point
+
Extensions may need to know when they are starting or stopping.
Export the interface that they can use to learn this information.

* Support injection of `ServerInformation` into extensions and plugins
+
Plugins can take this value by injection and learn the current
server state during their own LifecycleListener. This enables a
plugin to determine if it is loading as part of server startup, or
because it was dynamically installed or reloaded by an administrator.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#getting-started[Maven
  archetype for creating gerrit plugin projects]

* Enables the use of session management in Jetty
+
This enables plugins to make use of servlet sessions.

=== REST API
Gerrit now supports a REST like API available over HTTP. The API is
suitable for automated tools to build upon, as well as supporting some
ad-hoc scripting use cases.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html[Documentation of the REST API]

* Support REST endpoints to
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-changes.html[query changes]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-projects.html[list projects]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-projects.html#suggest-projects[suggest
   projects]
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-accounts.html#list-account-capabilities[query
   the global capabilities of the calling user]

* Support link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html#authentication[anonymous
  and authenticated access] to the REST endpoints

* Support link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html#output[JSON output
  format] for the REST endpoints

The new REST API is used from the Gerrit WebUI.

Some of the methods from the old internal JSON-RPC interface were
completely replaced by the new REST API and got deleted:

* `ProjectAdminService.visibleProjects(AsyncCallback<ProjectList>)`
* `ProjectAdminService.suggestParentCandidates(AsyncCallback<List<Project>>)`
* `ChangeListService.myStarredChangeIds(AsyncCallback<Set<Change.Id>>)`
* `ChangeListService.allQueryNext(String, String, int, AsyncCallback<SingleListChangeInfo>)`
* `ChangeListService.allQueryPrev(String, String, int, AsyncCallback<SingleListChangeInfo>)`
* `ChangeListService.forAccount(Account.Id, AsyncCallback<AccountDashboardInfo>)`

[[query-deprecation]]
In addition the `/query` API has been deprecated. By default it is
still available but server administrators may disable it by setting
the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#site.enableDeprecatedQuery[
`site.enableDeprecatedQuery`] parameter in the Gerrit config file. This
allows to enforce tools to move to the new API.

=== Web

==== Change Screen

* Display commit message in a box
+
The commit message on the change screen is now placed in a box with a
title and emphasis on the commit summary. The star icon and the
permalink are displayed in the box header. The header from the change
screen is removed as it only held duplicate information.

* Open the dependency section automatically when the change is needed
  by an open change

* Only show a change as needed by if its current patch set depends on
  the change

* Show only changes of the same project in the 'Depends On' section
+
If two projects share the same history it can happen that the same
commit is pushed for both projects, resulting in two changes. If now
a successor commit is pushed for one of the projects, the resulting
successor change was wrongly listing both changes in the 'Depends On'
section. Now only the predecessor change of the own project is listed.

* link:http://code.google.com/p/gerrit/issues/detail?id=1383[issue 1383]:
  Display the approval table on the PublishCommentsScreen.
+
So far the approval table that shows the reviewers and their current
votes was only shown on the ChangeScreen. Now it is also shown on the
PublishCommentScreen. This allows the reviewer to see all existing
votes and reviewers when doing their own voting and publishing of
comments. Seeing the existing votes helps the reviewer in
understanding which votes are still required before the change can be
submitted.

* link:http://code.google.com/p/gerrit/issues/detail?id=1380[issue 1380]:
  Display time next to change comments
+
When a comment was posted yesterday, or any time older than 1 day but
less than 1 year ago, display the time too. Display "May 2 17:37" rather
than just "May 2".

* Only show "Can Merge" when the change is new or draft

* Allow auto suggesting reviewers to draft changes
+
Auto completing users for draft changes did't work as the other
users didn't have access to the drafts. The visibility check for
the reviewer suggestion is now skipped.

* link:http://code.google.com/p/gerrit/issues/detail?id=1294[issue 1294]:
  Shorten subject of parent commit for displaying in the UI
+
If the parent commit has a very long subject (> 80 characters) shorten
the subject for displaying it in the Gerrit web UI on the change screen.
This avoids that the 'Parent(s)' cell for the patch set becomes very
wide.

* If subject is shortened for displaying in the UI indicate this by '...'
+
If a commit has a very long subject line (> 80 characters) it is
shortened when it is displayed in the Gerrit Web UI. Indicate to the
user that the subject was shortened by appending '...' to the shortened
subject.
+
Also the subject is now cropped after a whitespace if possible.

* Insert Change-Id for revert commits
+
The 'Revert Change' action on a merged change allows to create a new
change that reverts the merged change. The commit message of the revert
commit now contains a Change-Id.
+
It is convenient if a Change-Id is automatically created and inserted
into the commit message of the revert commit since it makes rebasing of
the revert commit easier.

* Use more gentle shade of red to highlight outdated dependencies

==== Patch Screens

* New patch screen header
+
A new patch screen header was added that is displayed above both the
side-by-side and unified views. The new header contains actual links to
the available patchsets and shows which patchset is being currently
displayed.

* link:http://code.google.com/p/gerrit/issues/detail?id=1192[issue 1192]:
  Add download links to the unified diff view

* Improvement of the side-by-side viewer table
+
The line number column for the right side was moved to be on the far
right of the table, so that the layout now looks like this:
+
----
  1 |  foo       |       bar   | 1
  2 |  hello     |       hello | 2
----
+
This looks nicer when reading a lot of code, as the line numbers are
less relevant than the code itself which is now in the center of the
UI.
+
Line numbers are still links to create comment editors, but they
use a light shade of gray and skip the underline decoration, making
them less visually distracting.
+
Skip lines now use a paler shade of blue and also hide the fact they
contain anchors, until you hover over them and the anchor shows up.
+
The expand before and after are changed to be arrows showing in
which direction the lines will appear above or below the skip
line.

* link:http://code.google.com/p/gerrit/issues/detail?id=626[issue 626]:
  Option to display line endings
+
There is a new user preference that allows to display Windows EOL/Cr-Lf.
'\r' is shown in a dotted-line box (similar to how '\r' is displayed in
GitWeb).

* Streamlined review workflow
+
A link was added next to the "Reviewed" checkbox that marks the current
patch as reviewed and goes to the next unreviewed patch.

* Add key commands to mark a patch as reviewed
+
Add key commands
+
. to toggle the reviewed flag for a patch ('m')
+
and
+
. to mark the patch as reviewed and navigate to the next unreviewed
patch ('M').

* Use download icons instead of the `Download` text links

==== User Dashboard
* Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-custom-dashboards.html[custom
  dashboards]

* link:http://code.google.com/p/gerrit/issues/detail?id=1407[issue 1407]:
  Improve highlighting of unreviewed changes in the user's dashboard
+
A change will be highlighted as unreviewed if
+
. the user is reviewer of the change but hasn't published any change
  message for the current patch set
. the user has published a change message for the current patch set,
  but afterwards the change owner has published a change message on
  the change

* Sort outgoing reviews in the user dashboard by created date

* Sort incoming reviews in the user dashboard by updated date
+
Sorting the incoming reviews by last updated date, descending, places
the most recently updated reviews at the top of the list for a user,
and the oldest stale at the bottom. This may help users to identify
items to take immediate action on, as they appear closer to the top.

==== Access Rights Screen

* Display error if modifying access rights for a ref is forbidden
+
If a user is owner of at least one ref he is able to edit the access
rights on a project. If he adds access rights for other refs, these
access rights were silently ignored on save. Instead of this now an
error message is displayed to inform the user that he doesn't have
permissions to do the update for these refs.
+
In case of such an error the project access screen stays in the edit
mode so that the unsaved modifications are not lost. The user may now
propose the changes to the access rights through code review.

* Allow to propose changes to access rights through code review
+
Users that are able to upload changes for code review for the
`refs/meta/config` branch can now propose changes to the project access
rights through code review directly from the ProjectAccessScreen.
+
When editing the project access rights there is a new button
'Save for Review' which will create a new change for the access
rights modifications. Project owners are automatically added as
reviewer to this change. If a project owner agrees to the access rights
modifications he can simply approve and submit the change.

* Show all access rights in WebUI if user can read `refs/meta/config`
+
Users who can read the `refs/meta/config` branch, can see all access
rights by fetching this branch and looking at the `project.config`
file. Now they can see the same information in the web UI.

* Allow extra group suggestions for project owners
+
When suggesting groups to a user, only groups that are visible to the
user are suggested. These are those group that the user is member of.
For project owners now also groups to which they are not a member are
suggested when editing the access rights of the project.

==== Other

* link:http://code.google.com/p/gerrit/issues/detail?id=1592[issue 1592]:
  Ask user to login if change is not found
+
Accessing a change URL was failing with 'Application Error - The page
you requested was not found, or you do not have permission to view this
page' if the user was not signed in and the change was not visible to
`Anonymous Users`. Instead Gerrit now asks the user to login and
afterwards shows the change to the user if it exists and is visible.
If the change doesn't exist or is not visible, the user will still get
the NotFoundScreen after sign in.

* Link to owner query from user names
+
Instead of linking from a user name to the user's dashboards, link to
a search for changes owned by that user.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#gerrit.reportBugUrl[Allow
  configuring the `Report Bug` URL]
+
Let site administrators direct users to their own ticket queue, as for
many servers most of the reported bugs are small internal problems like
asking for a repository to be created or updating group memberships.

* On project creation allow choosing the parent project from a popup
+
In the create project UI a user can now browse all projects and select
one as parent for the new project.

* Check for open changes on branch deletion
+
Check for open changes when deleting a branch in the Gerrit WebUI.
Delete a branch only if there are no open changes for this branch.
This makes users aware of open changes when deleting a branch.

* Enable ProjectBranchesScreen for the `All-Projects` project
+
This allows to see the branches of the `All-Projects` project in the
web UI.

* Show for each project in the project list a link to the repository
  browser (e.g. GitWeb).

* Move the project listing menu items to a new top-level item
+
Finding the project listing was very opaque to end users. Nobody
expected to look under `Admin` and furthermore, anonymous users were
unable to find that link at all.
+
Introduced a new top-level `Projects` menu that has `List` in it to
take you to the project listing.
+
In addition the `Create new project` link from the top of that listing
was moved to this new menu.

* Move the Groups and Plugins menu items to the top level
+
The top-level Admin menu is removed as it is now unnecessary after the
Projects, Groups and Plugins menu items were moved to the top-level.

* Move form for group creation to own screen
+
Move the form for the group creation from the GroupListScreen to an
own new CreateGroupScreen and add a link to this screen at the
beginning of the GroupListScreen. The link to the CreateGroupScreen is
only visible if the user has the permission to create new groups.

* Drop the `Owners` column from the group list screen
+
The `Owners` column on the group list screen has been dropped in order
to link:#performance-issue-on-showing-group-list[speed up the loading
of the group list screen].

* Drop the `Group Type` column from the group list screen
+
Since link:#migrate-ldap-groups[the LDAP group type was removed] there
is no need to display the group type on the group list screen anymore.
There are only 3 `SYSTEM` groups using well known names, and everything
else has the type `INTERNAL`.

* When adding a user to a group create an account for the user if needed
+
Trying to add a user to a group that doesn't have an account fails with
'... is not a registered user.'. Now adding a user to a group does not
immediately fail if there is no account for the user, but it tries to
authenticate the user and if the authentication is successful a user
account is automatically created, so that the user can be added to the
group. This only works if LDAP is used as user backend.
+
This allows to add users to groups that did not log in into Gerrit
before.

* Differentiate between draft changes and draft comments
+
Show the draft changes of the user when he clicks on `My` > `Drafts`.
The user's draft comments are now available under `My` >
`Draft Comments`.

* Show NotFoundScreen if a user that can't create projects tries to
  access the ProjectCreationScreen

* Add Edit, Reload next to non-editable Full Name field
+
If the user database is actually an external system users might need go
to another server to edit their account data, and then re-import their
account data by going through a login cycle. This is highly similar to
LDAP where the directory provides account data and its refreshed every
time the user visits the `/login/` URL handler.
+
The URL for the external system can be configured for the
link:#custom-extension[`CUSTOM_EXTENSION`] auth type.

=== Access Rights

* Restrict rebasing of a change in the web UI to the change owner and
  the submitter

* Add a new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_rebase[
  access right to permit rebasing changes in the web UI]

* link:http://code.google.com/p/gerrit/issues/detail?id=930[issue 930]:
  Add new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_abandon[
  access right for abandoning changes]

* Check if user can upload in order to restore
+
Restoring a change is similar to uploading a new change. If a branch
gets closed by removing the access rights to upload new changes it
shouldn't be possible to restore changes for this branch.

[[hide-config]]
* Make read access to `refs/meta/config` by default exclusive to
  project owners
+
When initializing a new site a set of default access rights is
configured on the `All-Projects` project. These default access rights
include read access on `refs/*` for `Anonymous Users` and read access
on `refs/meta/config` for `Project Owners`. Since the read access on
`refs/meta/config` for `Project Owners` was not exclusive,
`Anonymous users` were able to access the `refs/meta/config` branch
which by default should only be accessible by the project owners.

=== Search
* Offer suggestions for the search operators in the search panel
+
There are many search operators and it's difficult to remember all of
them. Now the search operators are suggested as the user types the
query.

* Support alias `self` in queries
+
Writing an expression like "owner:self status:open" will now identify
changes that the caller owns and are still open. This `self` alias
is valid in contexts where a user is expected as an argument to a
query operator.

* Add parent(s) revision information to output of query command

* Add owner username to output of query command

* `/query` API has been link:#query-deprecation[deprecated]

=== SSH
* link:http://code.google.com/p/gerrit/issues/detail?id=1095[issue 1095]
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-set-account.html[SSH command to manage
  accounts]

* On link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-account.html[account creation] a
  password for HTTP can be specified.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-set-project.html[SSH command to manage
  project settings]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-test-submit-rule.html[SSH command to test
  submit rules]
+
The command creates a fresh Prolog environment and loads a Prolog
script from stdin. `can_submit` is then queried and the results are
returned to the user.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ban-commit.html[SSH command to ban
  commits]

[[ssh-alias]]
* Enable aliases for SSH commands
+
Site administrators can define aliases for SSH commands in the
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#ssh-alias[`ssh-alias` section]
of the Gerrit configuration.

* Add submit records to the output of the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-query.html[query] SSH command:
+
Add a command line option to the `query` SSH command to include submit
records in the output.
+
This facilitates the querying of information relating to the submit
status from the command line and by API clients, including information
such as whether the change can be submitted as-is, and whether the
submission criteria for each review label has been met.

* Support JSON output format for the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ls-projects.html[ls-projects] SSH command

* Support creation of multiple branches in
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-project.html[create-project] SSH
  command
+
In case if a project has some kind of waterfall automerging
a->b->c it is convenient to create all these branches at the
project creation time.
+
e.g. '.. gerrit create-project -b master -b foo -b bar ...'

* Add verbose output option to
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ls-groups.html[ls-groups] command
+
The verbose mode enabled by the new option makes the ls-groups
command output a tab-separated table containing all available
information about each group (though not its members).

=== Documentation

==== Commands

* document for the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-group.html[`create-group`]
  command that for unknown users an account is automatically created if
  the LDAP authentication succeeds

* Update documentation and help text for the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-review.html[`review`] SSH command
+
The review command can be applied to multiple changes, but the
help text was written in singular tense.
+
Add a paragraph in the documentation explaining that the
`--force-message` option will not be effective if the `review` command
fails because the user is not permitted to change the label.

* Clarify that `init --batch` doesn't drop old database objects

* Update the list of unsupported slave commands

* Fix link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-stream-events.html[`stream-events`]
  documentation
+
Some attributes contained in the events were not described, for a few
others the name was given in a wrong case.

* Fix and complete synopsis of commands

==== Access Control

* Clarify the ref format for
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_push_merge[`Push
  Merge Commit`]
+
Elaborate on the required format of the ref used for `Push Merge Commit`
access right entries to avoid user confusion when granting access to
`refs/heads/*` still doesn't allow them to push any merge commits.

* Document the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#capability_emailReviewers[
  `emailReviewers`] capability

==== Error
* Improve documentation of link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/error-change-closed.html[
  `change closed` error]
+
The `change closed` error can also occur when trying to submit a
review label with the SSH review command onto a change that has
been closed (submitted and merged, or abandoned) or onto a patchset
that has been replaced by a newer patchset.

* Correct documentation of `invalid author` and `invalid committer`
  errors
+
The error messages `you are not committer ...` and `you are not
author ...` were replaced with `invalid author` and `invalid
committer`.

* Describe that the `prohibited by Gerrit` error is returned if pushing
  a tag fails because the tagger is somebody else and the `Forge
  Committer` access right is not assigned.

==== Dev

* Update push URL in link:../SUBMITTING_PATCHES[SUBMITTING_PATCHES]
+
Pushes are now accepted at the same address as clone/fetch/pull.

* Update link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-contributing.html[contributor
  document]
+
We now prefer to use Guava (previously known as Google Collections).

* Fixed broken link to source code
+
Updated the documentation source code links to point to:
http://code.google.com/p/gerrit/source/checkout

* State link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-eclipse.html#known-problems[known issues]
  when debugging Gerrit with Eclipse

* Improved the section on
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-eclipse.html#hosted-mode[hosted mode
  debugging]
+
The existing section on hosted mode debugging left out a couple of
steps, and the requirement to use `DEVELOPMENT_BECOME_ANY_ACCOUNT`
instead of `OpenID` was not mentioned anywhere.

* Add a link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-release.html[release preparation
  document]
+
Document what it takes to make a Gerrit stable or stable-fix release,
and how to release Gerrit subprojects.

==== Other
* Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/prolog-cookbook.html[Cookbook for Prolog
  submit rules]
+
A new document providing a step by step introduction into implementing
specific submit policies using Prolog based submit rules was added.

* Describe link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/refs-notes-review.html[
  `refs/notes/review` and its contents]

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-mail.html[Document `RebasedPatchSet.vm`
  and `Reverted.vm` mail templates]

* Specify output file for curl commands in documentation
+
For downloading the `commit-msg` hook and the `gerrit-cherry-pick`
script users can either use scp or curl. Specify the output file for
each curl command so that the result is equal to the matching scp
command.

* Document that user must be in repository root to install `commit-msg`
  hook

* Add some clarifications to the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/install-quick.html[quick installation guide]

* Add missing documentation about
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#hooks[hook configuration]
+
Add documentation of hook config for `change-restored`, `ref-updated`
and `cla-signed` hooks.

* Document that the commit message hook file should be executable

* Mention that also MySQL supports replication, not just Postgres

* Make sorting of release notes consistent so that the release notes
  for the newest release is always on top

* Various corrections
+
Correct typos, spelling mistakes, and grammatical errors.

=== Dev
* Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-release.html#plugin-api[script for
  releasing plugin API jars]

* Pushes are now accepted at the same address as clone/fetch/pull
+
To submit patches commits can be pushed to
https://gerrit.googlesource.com/gerrit

* Add `-Pchrome`, `-Pwebkit`, `-Pfirefox` aliases for building
+
This makes it easier to build for the browser you want to
test on, rather than remembering what its GWT name is.

* Disable assertions for KeyCommandSet when running in gwtdebug mode
+
The assertions in the KeyCommandSet class cause exceptions when a
KeyCommand is registered several times.

* Add the run profiles to the favorites menu

* Add Intellij IDEA files to ignore list

* Move local Maven repository to Google Cloud Storage

* Make sure asciidoc uses unix line endings in generated HTML.
+
Use an explicit asciidoc attribute to make sure the produced HTML will
always contain unix line endings.  This will help in producing build
results that are better comparable by size.

* Remove timestamp from all `org.eclipse.core.resources.prefs` files
+
Eclipse overwrites these files when we import projects using m2e.
Eclipse 3 writes a timestamp at the top of these files making the Git
working tree dirty.  Eclipse 4 (Juno) still overwrites these files but
doesn't write the timestamp.  This should help to keep the working tree
clean.  However, since the timestamp is currently present in these
files, Eclipse 4 would still make them dirty by overwriting and
effectively removing the timestamp.
+
This change removes the timestamp from these files. This helps those
using Eclipse 4 and doesn't make it worse for those still using Eclipse
3.

* Add Maven profile to skip build of plugin modules
+
Building the plugin modules ('Plugin API' and 'Plugin Archetype') may
take a significant amount of time (since many jars are downloaded).
During development it is not needed to build the plugin modules. A new
Maven profile was added that skips the build of the plugin modules,
so that developers have a faster turnaround. This profile is called
`no-plugins` and it's active by default. To include the plugin modules
into the build activate the `all` profile:
+
----
  mvn clean package -P all
----
+
The script to make release builds has been adapted to activate the
`all` profile so that the plugin modules are always built for release
builds.

=== Mail

* Add unified diff to newchange mail template
+
Add `$email.UnifiedDiff` as new macro to the `NewChange.vm` mail
template. This macro is expanded to a unified diff of the patch.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#sendemail.includeDiff[
  sendemail.includeDiff]: Enable `$email.UnifiedDiff` in `NewChange.vm`
+
Instead of making site administrators hack the email template, allow
admins to enable the diff feature by setting a configuration variable
in `gerrit.config`.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#sendemail.maximumDiffSize[
  sendemail.maximumDiffSize]: Limit the size of diffs sent by email
+
If a unified diff included in an email will exceed the limit configured
by the system administrator, only the affected file paths are listed in
the email instead. This gives interested parties some context on the
size and scope of the change, without killing their inbox.

* Catch all exceptions when emailing change update

* Allow unique from address generation
+
Allow the from email address to be a ParameterizedString that handles
the `${userHash}` variable. The value of the variable is the md5 hash
of the user name. This allows unique generation of email addresses, so
GMAIL threads names of users in conversations correctly. For example,
the from pattern for gerrit-review defined in the Gerrit configuration
looks like this:
+
----
  [sendemail]
    from = ${user} <noreply-gerritcodereview+${userHash}@google.com>
----

* Show new change URLs in the body of the new change email
+
Some email clients hide the signature section of an email
automatically.  If there are no reviewers listed on a new change,
such as when a change is pushed over HTTP and a notification is
automatically sent out to any subscribed watchers, the URL was
hidden inside of the signature and not readily available.
+
Show the URL right away in the body.

=== Miscellaneous
* Back in-memory caches with Guava, disk caches with H2
+
Instead of using Ehcache for in-memory caches, use Guava. The Guava
cache code has been more completely tested by Google in high load
production environments, and it tends to have fewer bugs. It enables
caches to be built at any time, rather than only at server startup.
+
By creating a Guava cache as soon as it is declared, rather than
during the LifecycleListener.start() for the CachePool, we can promise
any downstream consumer of the cache that the cache is ready to
execute requests the moment it is supplied by Guice. This fixes a
startup ordering problem in the GroupCache and the ProjectCache, where
code wants to use one of these caches during startup to resolve a
group or project by name.
+
Tracking the Guava backend caches with a DynamicMap makes it possible
for plugins to define their own in-memory caches using CacheModule's
cache() function to declare the cache. It allows the core server to
make the cache available to administrators over SSH with the gerrit
show-caches and gerrit `flush-caches` commands.
+
Persistent caches store in a private H2 database per cache, with a
simple one-table schema that stores each entry in a table row as a
pair of serialized objects (key and value). Database reads are gated
by a BloomFilter, to reduce the number of calls made to H2 during
cache misses. In theory less than 3% of cache misses will reach H2 and
find nothing. Stores happen on a background thread quickly after the
put is made to the cache, reducing the risk that a diff or web_session
record is lost during an ungraceful shutdown.
+
Cache databases are capped around 128M worth of stored data by running
a prune cycle each day at 1 AM local server time. Records are removed
from the database by ordering on the last access time, where last
accessed is the last time the record was moved from disk to memory.

* Add OpenID SSO support.
+
Setting `OPENID_SSO` for
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.type[`auth.type`] in the
`gerrit.config` will allow the admin to specify an SSO entry point URL
so that users clicking on "Sign In" are sent directly to that URL.

* Git over HTTP BasicAuth against Gerrit basic auth.
+
Allows the configuration of native Gerrit username/password
authentication scheme used for Git over HTTP BasicAuth, as alternative
of the default DigestAuth scheme against the random generated password
on Gerrit DB.
+
Example setting for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.type[
`auth.type`] and link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.gitBasicAuth[
`auth.gitBasicAuth`]:
+
----
  [auth]
    type = LDAP
    gitBasicAuth = true
----
+
With this configuration Git over HTTP protocol will be authenticated
using `HTTP-BasicAuth` and credentials checked on LDAP.

* Abstract group systems into GroupBackend interface
+
Group backends are supposed to use unique prefixes to isolate the
namespaces. E.g. the group backend for LDAP is using `ldap/` as prefix
for the group names.
+
This means that to refer to an LDAP group in the WebUI the group name
needs to be prefixed with the `ldap/` string. E.g. if there is a group
in LDAP which is called "Developers", Gerrit will suggest this group
when the user types `ldap/De`.
+
WARNING: External groups are not anymore allowed to be members of
internal groups.

[[migrate-ldap-groups]]
* Migrate existing internal LDAP groups
+
Previously, LDAP groups were mirrored in the AccountGroup table and
given an Id and UUID the same as internal groups. Update these groups
to be backed by only a GroupReference, with a special "ldap:" UUID
prefix. Migrate all existing references to the UUID in ownerGroupUUID
and any `project.config`.
+
This made the LDAP group type obsolete and it was removed.

* link:https://code.google.com/p/gerrit/issues/detail?id=548[issue 548]:
  Make commands to download patch sets
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#download.command[configurable]
+
For patch sets on the ChangeScreen different commands for downloading
the patch sets are offered. For some installations not all commands are
needed. Allow Gerrit administrators to configure which download
commands should be offered.

* Add more link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#theme[theme color
  options]
+
** Add a theme option to change outdated background color
** Add odd/even row background color for tables such as list of open
reviews.  This makes them more visible without clicking on them.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-notify.html[Add `notify` section in
  `project.config`]
+
The notify section allows project owners to include emails to users
directly from `project.config`. This removes the need to create fake
user accounts to always BCC a group mailing list.

* Include the contributor agreements in the `project.config` and
  migrate contributor agreements to `All-Projects`
+
Update the parsing of `project.config` to support the contributor
agreements.
+
Add a new schema to move the ContributorAgreement, AccountAgreement,
and AccountGroupAgreement information into the `All-Projects`
`project.config`.

* Add `sameGroupVisibility` to `All-Projects` `project.config`
+
The `sameGroupVisiblity` is needed to restrict the visibility of
accounts when `accountVisibility` is `SAME_GROUP`. Namely, this is a
way to make sure the `autoVerify` group in a `contributor-agreements`
section is never suggested.

* Add change topic in hook arguments
+
It was not possible for hook scripts to include topic-specific
behavior because the topic name was not included in the arguments.

* Add `--is-draft` argument on `patchset-created` hook
+
The `--is-draft` argument will be passed with either `true` if
the patchset is a draft, or `false` otherwise.
+
This can be used by hooks that need to behave differently if the
change is a draft.

* Log sign in failures on info level
+
If for a user signing in into the Gerrit web UI fails, this can have
many reasons, e.g. username is wrong, password is wrong, user is marked
as inactive, user is locked in the user backend etc. In all cases the
user just gets a generic error message 'Incorrect username or
password.'. Gerrit administrators had trouble to find the exact reason
for the sign in problem because the corresponding AccountException was
not logged.

* Do not log 'Object too large' as error with full stacktrace
+
If a user pushes an object which is larger than the configured
`receive.maxObjectSizeLimit` parameter, the push is rejected with an
'Object too large' error. In addition an error log entry with the full
stacktrace was written into the error log.
+
This is not really a server error, but just a user doing something that
is not allowed, and thus it should not be logged as error. For a Gerrit
administrator it might still be interesting how often the limit is hit.
This is why it makes sense to still log this on info level.
+
For the user pushing a too large object we now do not print the
'fatal: Unpack error, check server log' message anymore, but only the
'Object too large' error message.

* Add better explanations to rejection messages
+
Provide information to the user why a certain push was rejected.

* Automatic schema upgrade on Gerrit startup
+
In case when Gerrit administrator(s) don't have a direct access to the
file system where the review site is located it gets difficult to
perform a schema upgrade (run the init program). For such cases it is
convenient if Gerrit performs schema upgrade automatically on its
startup.
+
Since this is a potentially dangerous operation, by default it will not
be performed. The configuration parameter
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#site.upgradeSchemaOnStartup[
site.upgradeSchemaOnStartup] is used to switch on automatic schema
upgrade.

* Shorten column names that are longer than 30 characters
+
Some databases can't deal with column names that are longer than 30
characters. Examples are MaxDB and
link:http://groups.google.com/group/repo-discuss/browse_thread/thread/ecb713d42c04ae8a/cc963525d8247a17?lnk=gst#cc963525d8247a17[Oracle].
+
Gerrit had two column names in the `accounts` table that exceeded the
30 characters: `displayPatchSetsInReverseOrder`,
`displayPersonNameInReviewCategory`
+
These 2 columns were renamed so that their names fit within the 30
character range.

* Increase the maximum length for tracking ID's to 32 characters
+
So far tracking ID's had a maximum length of only 20 characters.

* Set `GERRIT_SITE` in Gerrit hooks as environment variable
+
Allows development of hooks parameterized on Gerrit location. This can
be useful to allow hooks to load the Gerrit configuration when needed
(from `$GERRIT_SITE`) or even store their additional config files under
`$GERRIT_SITE/etc` and retrieve them at startup.

* Add an exponentially rolling garbage collection script
+
`git-exproll.sh` is a git garbage collection script aimed specifically
at reducing excessive garbage collection and particularly large
packfile churn for Gerrit installations.
+
Excessive garbage collection on "dormant" repos is wasteful of both CPU
and disk IO.  Large packfile churn can lead to heavy RAM and FS usage
on Gerrit servers when the Gerrit process continues to hold open the
old delete packfiles.  This situation is most detrimental when jgit is
configured with large caching parameters.  Aside from these downsides,
running git gc often can be very beneficial to performance on servers.
This script attempts to implement a git gc policy which avoids the
downsides mentioned above so that git gc can be comfortably run very
regularly.
+
`git-exproll.sh` uses keep files to manage which files will get
repacked.  It also uses timestamps on the repos to detect dormant repos
to avoid repacking them at all.  The primary packfile objective is to
keep around a series of packfiles with sizes spaced out exponentially
from each other, and to roll smaller packfiles into larger ones once
the smaller ones have grown.  This strategy attempts to balance disk
space usage with avoiding rewriting large packfiles most of the time.
+
The exponential packing objective above does not save a large amount of
time or CPU, but it does prevent the packfile churn.  Depending on repo
usage, however the dormant repo detection and avoidance can result in a
very large time savings.

* Automatically flush persistent H2 cache if the existing cache entries
  are incompatible with the cache entry class and thus can't be
  deserialized

* Unpack JARs for running servers in `$site_path/tmp`
+
Instead of unpacking a running server into `~/.gerritcodereview/tmp`
only use that location for commands like init where there is no active
site. From gerrit.sh always use `$site_path/tmp` for the JARs to
isolate servers that run on the same host under the same UNIX user
account.

[[custom-extension]]
* Allow for the `CUSTOM_EXTENSION` `auth.type` to configure URLs for
  editing the user name and obtaining an HTTP password
+
Allow `CUSTOM_EXTENSION` auth type to supply by `auth.editFullNameUrl`
a URL in the web UI that links users to the other account system,
where they can edit their name, and then use another reload URL to
cycle through the `/login/` step and refresh the data cached by Gerrit.
+
Allow `CUSTOM_EXTENSION` auth type to supply by `auth.httpPasswordUrl`
a URL in the web UI that allows users to obtain an HTTP password.
+
Like the rest of the `CUSTOM_EXTENSION` stuff, this is hack that will
eventually go away when there is proper support for authentication
plugins.

=== Performance
[[performance-issue-on-showing-group-list]]
* Fix performance issues on showing the list of groups in the Gerrit
  WebUI
+
Loading `Admin` > `Groups` on large servers was very slow. The entire
group membership database was downloaded to the browser when showing
just the list of groups.
+
Now the amount of data that needs to be downloaded to the browser is
reduced by using the more lightweight `AccountGroup` type instead of
the `GroupDetail` type when showing the groups in a list format. As a
consequence the `Owners` column that showed the name of the owner group
had been dropped.

* Add LDAP-cache to minimize number of queries when unnesting groups
+
A new cache named "ldap_groups_byinclude" is introduced to help lessen
the number of queries needed to resolve nested LDAP-groups.

* Add index for accessing change messages by patch set
+
This improves the performance of loading the dashboards.

* Add a fast path to avoid checking every commit on push
+
If a user can forge author, committer and gerrit server identity, and
can upload merges, don't bother checking the commit history of what is
being uploaded. This can save time on servers that are trying to accept
a large project import using the push permission.

* Improve performance of `ReceiveCommits` by reducing `RevWalk` load
+
JGit RevWalk does not perform well when a large number of objects are
added to the start set by `markStart` or `markUninteresting`. Avoid
putting existing `refs/changes/` or `refs/tags/` into the `RevWalk` and
instead use only the `refs/heads` namespace and the name of the branch
used in the `refs/for/` push line.
+
Catch existing changes by looking for their exact commit SHA-1, rather
than complete ancestry. This should have roughly the same outcome for
anyone pushing a new commit on top of an existing open change, but
with lower computational cost at the server.

* Lookup changes in parallel during `ReceiveCommits`
+
If the database has high query latency, the loop that locates existing
changes on the destination branch given Change-Id can be slow. Start
all of the queries as commits are discovered, but don't block on
results until all queries were started.
+
If the database can build the `ResultSet` in the background, this may
hide some of the query latency by allowing the queries to overlap when
more than one lookup must be performed for a push.

* Perform change update on multiple threads
+
When multiple changes need to be created or updated for a single push
operation they are now inserted into the database by parallel threads,
up to the maximum allowed thread count. The current thread is used
when the thread pool is already fully in use, falling back to the
prior behavior where each concurrent push operation can do its own
concurrent database update. The thread pool exists to reduce latency
so long as there are sufficient threads available.
+
This helps push times on databases that are high latency, such as
database servers that are running on a different machine from the
Gerrit server itself, e.g. gerrit.googlesource.com.
+
The new thread pool is
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#receive.changeUpdateThreads[
disabled by default], limiting the overhead to servers that have good
latency with their database, such as using in-process H2 database, or
a MySQL or PostgreSQL on the same host.

* Use `BatchRefUpdate` to execute reference changes
+
Some storage backends for JGit are able to update multiple references
in a single pass efficiently. Take advantage of this by pushing
any normal reference updates (such as direct push or branch create)
into a single `BatchRefUpdate` object.

* Assume labels are correct in ListChanges
+
To reduce end-user latency when displaying changes in a search result
or user dashboard, assume the labels are accurate in the database at
display time and don't recompute the access privileges of a reviewer.

* Notify the cache that the git_tags was modified
+
The tag cache was updated in-place, which prevented the H2 based
storage from writing out the updated tag information. This meant
servers almost never had the right data stored on disk and had to
recompute it at startup.
+
Anytime the value is now modified in place, put it back into the
cache so it can be saved for use on the next startup.

* Special case hiding `refs/meta/config` from Git clients
+
VisibleRefFilter requires a lot of server CPU to accurately provide
the correct listing to clients when they cannot read `refs/*`.
+
Since the default configuration is now to link:#hide-config[
hide `refs/meta/config`], use a special case in VisibleRefFilter that
permits showing every reference except `refs/meta/config` if a user can
read every other reference in the repository.

* Avoid second remote call to lookup approvals when loading change
  results
+
By using the new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-changes.html[`/changes/`]
REST endpoint the web UI client now obtains the label information
during the query and avoids a second round trip to lookup the current
approvals for each displayed change. For most users this should improve
the way the page renders. The verified and code review columns will be
populated before the table is made visible, preventing the layout from
"jumping" the way the old UI did when the 2nd RPC finally finished and
supplied the label data.

* Load patch set approvals in parallel
+
ResultSet is a future-like interface, the database system is free to
execute each result set asynchronously in the background if it
supports that. gwtorm's default SQL backend always runs queries
immediately and then returns a ListResultSet, so for most installs this
has no real impact in ordering.
+
For the system that runs gerrit-review, each query has a high cost in
network latency, the system treats ResultSet as a future promise to
supply the matching rows. Getting all of the necessary ResultSets up
front allows the database to send all requests to the backend as early
as possible, allowing the network latency to overlap.

== Upgrades
* Update Gson to 2.1
* Update GWT to 2.4.0
* Update JGit to 2.0.0.201206130900-r.23-gb3dbf19

* Use gwtexpui 1.2.6
+
** Hide superfluous status text from clippy flash widget
** Fix disappearance of text in CopyableLabel when clicking on it

* Update Guava to 12.0.1
+
This fixes a performance problem with LoadingCache where the cache's
inner table did not dynamically resize to handle a larger number
of cached items, causing O(N) lookup performance for most objects.

== Bug Fixes

=== Security
* Ensure that only administrators can change the global capabilities
+
Only Gerrit server administrators (members of the groups that have
the `administrateServer` capability) should be able to edit the
global capabilities because being able to edit the global capabilities
means being able to assign the `administrateServer` capability.
+
Because of this on the `All-Projects` project it is disallowed to assign
+
. the `owner` access rights on `refs/*`
+
Project owners (members of groups to which the `owner` access right
is assigned) are able to edit the access control list of the projects
they own. Hence being owner of the `All-Projects` project would allow
to edit the global capabilities and assign the `administrateServer`
capability without being Gerrit administrator.
+
In earlier Gerrit versions (2.1.x) it was already implemented like
this but the corresponding checks got lost.
+
. the 'push' access right on `refs/meta/config`
+
Being able to push configuration changes to the `All-Projects` project
allows to edit the global capabilities and hence a user with this
access right could assign the `administrateServer` capability without
being Gerrit administrator.
+
From the Gerrit WebUI (ProjectAccessScreen) it is not possible anymore
to assign on the `All-Projects` project the `owner` access right on
`refs/*` and the `push` access right on `refs/meta/config`.
+
In addition it is ensured that an `owner` access right that is assigned
for `refs/*` on the `All-Projects` project has no effect and that only
Gerrit administrators with the `push` access right can push
configuration changes to the `All-Projects` project.
+
It is still possible to assign both access rights (`owner` on `refs/*`
and `push` on `refs/meta/config`) on the `All-Projects` project by directly
editing its `project.config` file and pushing to `refs/meta/config`.
To fix this it would be needed to reject assigning these access rights
on the `All-Projects` project as invalid configuration, however doing this
would mean to break existing configurations of the `All-Projects` project
that assign these access rights. At the moment there is no migration
framework in place that would allow to migrate `project.config` files.
Hence this check is currently not done and these access rights in this
case have simply no effect.

=== Web

* Do not show "Session cookie not available" on sign in
+
When LDAP is used for authentication, clicking on the 'Sign In' link
opens a user/password dialog. In this dialog the "Session cookie not
available." message was always shown as warning. This warning was
pretty useless since the user was about to sign in because he had no
current session.
+
This problem was discussed on the
link:https://groups.google.com/forum/#!topic/repo-discuss/j-t77m8-7I0/discussion[
Gerrit mailing list].

* Reject restoring a change if its destination branch does not exist
  anymore

* Reject submitting a change if its destination branch does not exist
  anymore
+
If a branch got deleted and there was an open change for this branch,
it was still possible to submit this open change. As result the
destination branch was implicitly recreated, even if the user
submitting the change had no privileges to create branches.

* link:http://code.google.com/p/gerrit/issues/detail?id=1352[issue 1352]:
  Don't display "Download" link for `/COMMIT_MSG`
+
The commit message file is special, it doesn't actually exist and
cannot be downloaded. Don't offer the download link in the side by
side viewer.

* Dependencies were lost in the ChangeScreen's "Needed By" table
+
Older patchsets are now iterated for descendants, so that the dependency
chain does not break on new upstream patchsets.

* link:http://code.google.com/p/gerrit/issues/detail?id=1442[issue 1442]:
  Only show draft change dependency if current user is owner or reviewer
+
In the change screen, the dependencies panel was showing draft changes
in the "Depends On" and "Needed By" lists for all users, and when there
was no user logged in.

* link:http://code.google.com/p/gerrit/issues/detail?id=1558[issue 1558]:
  Create a draft patch set when a draft patch set is rebased
+
Rebasing a draft patch set created a non-draft patch set. It was
unexpected that rebasing a draft patch set published the modifications
done in the draft patch set.

* link:http://code.google.com/p/gerrit/issues/detail?id=1176[issue 1176]:
  Fix disappearance of download command in Firefox
+
Clicking on the download command for a patch set in Firefox made the
download command disappear.

* link:http://code.google.com/p/gerrit/issues/detail?id=1587[issue 1587]:
  Fix disappearance of action buttons when selecting the last patch set
  as `Old Version History`

* Fix updating patch list when `Old Version History` is changed
+
If a collapsed patch set panel was expanded and re-closed it's patch
list wasn't updated anymore when the selection for `Old Version History`
was changed.

* link:http://code.google.com/p/gerrit/issues/detail?id=1523[issue 1523]:
  Update diff base to match old version history
+
When changing the diff base in the `Old Version History` on the change
screen and then entering the Side-By-Side view for a file, clicking on
the back button in the browser (reentering the change screen) was
causing the files to be wrongly compared with `Base` again.

* Don't NPE if current patch set is not available
+
Broken changes may have the current patch set field incorrectly
specified, causing currentPatchSet to be unable to locate the
correct data and return it. When this happens don't NPE, just
claim the change is not reviewed.

* link:https://code.google.com/p/gerrit/issues/detail?id=1555[issue 1555]:
  Fix displaying of file diff if draft patch has been deleted
+
Displaying any file diff for a patch set failed if the change had any
gaps in its patch set history. Patch sets can be missing, if they
have been drafts and were deleted.

* link:https://code.google.com/p/gerrit/issues/detail?id=856[issue 856]:
  Fix displaying of comments on deleted files
+
Published and draft comments that are posted on deleted files were not
loaded and displayed.

* link:https://code.google.com/p/gerrit/issues/detail?id=735[issue 735]:
  Fix `ArrayIndexOutOfBoundsException` on navigation to next/previous
  patch
+
An `ArrayIndexOutOfBoundsException` could occur when navigating from
one patch to the next/previous patch if the next/previous patch was a
newly added binary file. The exception occurred if the user was not
signed in or if the user was signed in and had `Syntax Coloring` in the
preferences enabled.

* link:https://code.google.com/p/gerrit/issues/detail?id=816[issue 816]:
  Fix wrong file indention in Side-by-Sie diff viewer on right side

* Only set reviewed attribute on open changes
+
If a change is merged or abandoned, do not consider the reviewed
property for the calling user, so that the change is not highlighted
as unreviewed on the user's dashboard.

* Change PatchTable pointer when loading patch
+
This patch fixes an issue with the "file list" table displayed by
clicking on the "Files" sub-menu when viewing a diff.
+
Originally when navigating between patch screens the highlighted row
(pointer) of the file list table would not change when not directly
interacting with the table e.g. by clicking on the previous or next
file link.
+
This patch updates the file list table whenever a new patch screen is loaded
so that the pointer corresponds to the current patch being displayed.

* Don't hyperlink non-internal groups
+
When an external group (such as LDAP) is used in a permission rule,
don't attempt to link to the group in the internal account system UI.
The group won't load successfully. Instead just display the name and
put the UUID into a tooltip to show the full DN.

* Fix: Popup jumps back to original position when resizing screen
+
On 'Watched Projects' screen, the 'Browse' button displays a popup
window. If the user moves it and then resizes the screen, it won't snap
back to the original position.

* link:http://code.google.com/p/gerrit/issues/detail?id=1457[issue 1457]:
  Prevent groups from being renamed to empty string

* Fixed AccountGroupInfoScreen search callback
+
If the search returned no results, the search button would not be
enabled and the status panel was not shown. Fixed the panel and button
to always be enabled.

* Fix NullPointerException on `/p/`
+
Requesting just `/p/` caused a NullPointerException as the redirection
logic had no project name to form a URL from. Detect requests for `/p/`
and redirect to 'Admin' > 'Projects' to show the projects the caller
has access to.

=== Mail

* Fix: Rebase did not mail all reviewers

* Fix email showing in AccountLink instead of names
+
Prefer the full name for the display text of the link.

* Fix signature delimiter for e-mail messages
+
Make sure the signature delimiter is "-- " (two dashes and a space).

* link:http://code.google.com/p/gerrit/issues/detail?id=1397[issue 1397]:
  Don't wait for banner message from SMTP server after STARTTLS
  negotiation
+
According to RFC 2847 section 5.2, SMTP server won't send the banner
message again after STARTTLS negotiation. The original code will hang
until SMTP server kicks it off due to timeout and can't send email with
STARTTLS enabled, aka. `sendemail.smtpEncryption = tls`.

* Extract all mail templates during site init
+
The example mail templates `RebasedPatchSet.vm`, `Restored.vm` and
`Reverted.vm` were not extracted during the initialization of a new
site.

=== SSH
* Fix reject message if bypassing code review is not allowed
+
If a user is not allowed to bypass code review, but tries to push a
commit directly, Gerrit rejected this push with the error message
"can not update the reference as a fast forward". This message was
confusing to the user since the push only failed due to missing
access rights. Go back to the old message that says "prohibited
by Gerrit".

* Fix reject message if pushing tag is rejected because tagger is
  somebody else
+
Pushing a tag that has somebody else as tagger requires the `Forge
Committer` access right. If this access right was missing Gerrit
was rejecting the push with "can not create new references". This error
message was misleading because the user may have thought that the
`Create Reference` access right was missing which was actually assigned.
+
The same reject message was also returned on push of an annotated tag
if the `Push Annotated Tag` access right was missing. Also in this case
the error message was not ideal.
+
Go back to the old more generic message which says `prohibited by
Gerrit`.

* link:http://code.google.com/p/gerrit/issues/detail?id=1437[issue 1437]:
  Send event to stream when draft change is published
+
When a change is uploaded as a draft, a `patchset-created` event is
sent to the event stream, but since drafts are private to the owner,
the event is not publicly visible.  When the draft is later published,
no publicly visible event was sent. As result of this external tools
that rely on the event stream to detect new changes didn't receive
events for any changes that were first uploaded as draft.
+
There is now a new event, `draft-published`, which is sent to the
event stream when a draft change is published.  The content of this
event is the same as `patchset-created`.

* Fix: Wrong ps/rev in `change-merged` stream-event
+
When using cherry-pick as merge strategy, the wrong ref was set in the
`change-merged` stream-event.
+
The issue stems from Gerrit would not acknowledge the resulting new
pachset (the actual cherry-pick).

* Fix NullPointerException in `query` SSH command
+
Running the `query` SSH command with the options `--comments` and
`--format=JSON` failed with a NullPointerException if a change had a
message without author. Change messages have no author if they were
created by Gerrit. For such messages now the Gerrit Server identity is
returned as author.

* Fix the `export-review-notes` command's Guice bindings
+
The `export-review-notes` command was broken because of the CachePool
class being bound twice. The startup of the command failed because of
that.

* Fix sorting of SSH help text
+
Commands were displaying in random order, sort commands before output.

* `replicate` command: Do not log errors for wrong user input
+
If the user provided an invalid combination of command options or an
non existing project name this was logged in the `error.log` but
printing the error out to the user is sufficient.

=== Authentication

* Fix NPE in LdapRealm caused by non-LDAP users
+
Servers that are connected to LDAP but have non-LDAP user accounts
created by `gerrit create-account` (e.g. batch role accounts for
build systems) were crashing with a NullPointerException when the
LdapRealm tried to discover which LDAP groups the non-LDAP user
was a member of in the directory.

* Fix domain field of HTTP digest authentication
+
Per RFC 2617 the domain field is optional. If it is not present,
the digest token is valid on any URL on the server. When set it
must be a path prefix describing the URLs that the password would
be valid against.
+
When a canonical URL is known, supply that as the only domain that
is valid. When the URL is missing (e.g. because the provider is
still broken) rely on the context path of the application instead.

=== Replication

* Fix inconsistent behavior when replicating `refs/meta/config`
+
In `replication.config`, if `authGroup` is set to be used together with
`mirror = true`, refs blocked through the `authGroup` are deleted from
the slave/mirror. The same correctly applies if the `authGroup` is used
to block `refs/meta/config`.
+
However, if `replicatePermission` was set to `false`, Gerrit was
refusing to clean up `refs/meta/config` on the slave/mirror.

* Fix bug with member assignment order in PushReplication.
+
The groupCache was being used before it was set in the class. Fix the
ordering of the assignment.

=== Approval Categories

* Make `NoBlock` and `NoOp` approval category functions work
+
The approval category functions `NoBlock` and `NoOp` have not worked
since the integration of Prolog.
+
`MAY` was introduced as a new submit record status to complement `OK`,
`REJECT`, `NEED`, and `IMPOSSIBLE`. This allows the expression of
approval categories (labels) that are optional, i.e. could either be
set or unset without ever influencing whether the change could be
submitted. Previously there was no way to express this property in
the submit record.
+
This enables the `NoBlock` and `NoOp` approval category functions to
work as they now emit may() terms from the Prolog rules. Previously
they returned ok() terms lacking a nested user term, leading to
exceptions in code that expected a user context if the label was `OK`.

* Fix category block status without negative score
+
Categories without blocking or approval scores will result in the
blocking/approved image appearing in the category column after changes
are merged should the score by the reviewer match the minimum or
maximum value respectively.
+
A check to ignore "No Score" values of 0 was added.

* Don't remove dashes from approval category name
+
If an approval category name contained a dash, it was removed by
Gerrit. On the other side a space in an approval category name is
converted to a dash. This was confusing for writing Prolog submit
rules. If, for example, one defined a new category named `X-Y`, then in
the Prolog code the proper name for that category would have been `XY`
which was unintuitive.

* Fix NPE in `PRED__load_commit_labels_1`
+
If a change query uses reviewer information and loads the approvals
map, but there are no approvals for a given patch set available, the
collection came out null, which cannot be iterated. Make it always be
an empty list.

=== Other

* link:http://code.google.com/p/gerrit/issues/detail?id=1554[issue 1554]:
  Fix cloning of new projects from slave servers
+
If a new project is created in Gerrit the replication creates the
repository for this new project directly in the filesystem of the slave
server. The slave server was not discovering this new repository and as
result any attempt to clone the corresponding project from the slave
server failed.

* link:http://code.google.com/p/gerrit/issues/detail?id=1548[issue 1548]:
  Create a ref for the patch set that is created when a change is
  cherry-picked and trigger the replication for it:
+
If Cherry Pick is chosen as submit type, on submit a new commit is
created by the cherry-pick. For this commit a new patch set is created
which is added to the change. Using any of the download commands to
fetch this new patch set failed with 'Couldn't find remote ref' because
no ref for the new patch set was created.

* link:http://code.google.com/p/gerrit/issues/detail?id=1626[issue 1626]:
  Fix NullPointerException on cherry-pick if `changeMerge.test` is enabled

* link:http://code.google.com/p/gerrit/issues/detail?id=1491[issue 1491]:
  Fix nested submodule updates

* Set link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#transfer.timeout[transfer
  timeout] for pushes through HTTP
+
The transfer timeout was only set when pushing via SSH.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#receive.maxObjectSizeLimit[
  Limit maximum Git object size] when pushing through HTTP
+
The limit for the maximum object size was only set when pushing via SSH.

* Fix units of `httpd.maxwait`
+
The default unit here is minutes, but Jetty wants to get milliseconds
from the maxWait field. Convert the minutes returned by getTimeUnit to
be milliseconds, matching what Jetty expects.
+
This should resolve a large number of 503 errors for Git over HTTP.

* link:http://code.google.com/p/gerrit/issues/detail?id=1493[issue 1493]:
  Fix wrong "change ... closed" message on direct push
+
Pushing a commit directly into the central repository with bypassing
code review wrongly resulted in a "change ... closed" message if the
commit was already pushed for review and if a Change-Id was included in
the commit message. Despite of the error message the push succeeded and
the corresponding change got closed. Now the message is not printed
anymore.

* Fix NPE that can hide guice CreationException on site init
+
Note that the `--show-stack-trace` option is needed to print the stack
trace when a program stops with a Die exception.

* Do not automatically add author/committer as reviewer to drafts

* Do not automatically add reviewers from footer lines to drafts

* Fix NullPointerException in MergeOp
+
The body of the commit object may have been discarded earlier to
save memory, so ensure it exists before asking for the author.

* link:http://code.google.com/p/gerrit/issues/detail?id=1396[issue 1396]:
  Initialize the submodule commit message buffer

* Fix file name matching in `commit_delta` to perform substring
  matching
+
The `commit_delta` predicate was matching the entire file name against
the given regular expression while other predicates (`commit_edits`,
`commit_message_matches`) performed substring matching. It was
inconsistent that for `commit_delta` it was needed to write something
like:
+
----
  commit_delta('.*\.java')
----
+
to match all `*.java` files, while for `commit_edits` it was:
+
----
  commit_edits('\.java$', '...')
----
+
to match the same set of (Java) files.

* Create index for submodule subscriptions on site upgrade

* Fix URL to Jetty XML DTDs so they can be properly validated

* Fix resource leak when `changeMerge.test` is `true`

* Fix possible synchronization issue in TaskThunk

* Fix possible NPEs in `ReplaceRequest.cmd` usage in `ReceiveCommits`
+
The `cmd` field is populated by `validate(boolean)`. If this method
fails, results on some `ReplaceRequests` may not be set. Guard the
attempt to access the field with a null check.

* Match no labels if current patch set is not available
+
If the current patch set cannot be loaded from `ChangeData`, assume no
label information. This works around an NullPointerException inside of
`ChangeControl` where the `PatchSet` is otherwise required.

* Create new patch set references before database records
+
Ensure the commit used by a new change or replacement patch set
always exists in the Git repository by writing the reference first
as part of the overall `BatchRefUpdate`, then inserting the database
records if all of the references stored successfully.

* Fix rebase patch set and revert change to update Git first
+
Update the Git reference before writing to the database. This way the
repository cannot be corrupted if the server goes down between the two
actions.

* Make sure we use only one type of NoteMerger for review notes creation

* Fix generation of owner group in GroupDetail
+
Set the GroupDetail.ownerGroup to the AccountGroup.ownerGroupUUID
instead of the groupUUID.

* Ensure that ObjectOutputStream in H2CacheImpl is closed

* Ensure that RevWalk in SubmoduleOp is released
