Release notes for Gerrit 2.6
============================

Gerrit 2.6 is now available:

link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.6.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.6.war]

Gerrit 2.6 includes the bug fixes done with
link:ReleaseNotes-2.5.1.html[Gerrit 2.5.1],
link:ReleaseNotes-2.5.2.html[Gerrit 2.5.2],
link:ReleaseNotes-2.5.3.html[Gerrit 2.5.3], and
link:ReleaseNotes-2.5.4.html[Gerrit 2.5.4]. 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.6.x requires the server be first upgraded to 2.1.7 (or
a later 2.1.x version), and then to 2.6.x.  If you are upgrading from 2.2.x.x or
newer, you may ignore this warning and upgrade directly to 2.6.x.

Reverse Proxy Configuration Changes
-----------------------------------

If you are running a reverse proxy in front of Gerrit (e.g. Apache or Nginx),
make sure to check your configuration, especially if you are encountering
'Page Not Found' errors when opening the change screen.
See the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-reverseproxy.html[
Reverse Proxy Configuration] for details.

Gerrit now requires passed URLs to be unchanged by the proxy.

Release Highlights
------------------
* 42x improvement on `git clone` and `git fetch`
+
Running link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/cmd-gc.html[
gerrit gc] allows JGit to optimize a repository to serve clone and fetch
faster than C Git can, with massively lower server CPU required. Typically
Gerrit 2.6 can completely transfer a project to a client faster than C Git
can finish "Counting" the objects.

* Completely customizable workflow
+
Individual projects can add (or remove) score categories through
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-labels.html[
labels] and link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/prolog-cookbook.html[
Prolog rules].

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

Web UI
~~~~~~

Global
^^^^^^

* New Login Screens
+
New form based HTML screens for login allow browsers to offer the
choice to save the login data locally in the user's password store.

* Rename "Groups" top-level menu to "People"

* Move "Draft Comments" link next to "Drafts" link

* Highlight the active menu item

* Move user info, settings, and logout to popup dialog

* Show a small version of the avatar image next to the user's name.

* Show avatar image in user info popup dialog

* Always show 'Working ...' message
+
The 'Working ...' message is relatively positioned from the top of
the browser, so that the message is always visible, even if the user
has scrolled down the page.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#suggest.from[
  suggest.from] configures a minimum number of characters before
  matches for reviewers, accounts, groups or projects are offered.

* Make the default font size "small".

* Mark all CSS classes as external so users can rely on them.

* Add a link to the REST API documentation in the top menu.

Search
^^^^^^
* Suggest projects, groups and users in search panel
+
Suggest projects, groups and users in the search panel as parameter for
those search operators that expect a project, group or user.

* In search panel suggest 'self' as value for operators that expect a user

* Quote values suggested for search operators only if needed
+
The values that are suggested for the search operators in the search
panel are now only quoted if they contain a whitespace.

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

* A change's commit message can be edited from the change screen.

* A change's topic can be added, removed or changed from the
  change screen.

* An "Add Comment" button is added to change screen

* The reviewer matrix on a change displays gray boxes where permissions
  do not allow voting in that category.
+
The coloring enables authors to quickly identify if another reviewer
is necessary to continue the change.

* link:https://code.google.com/p/gerrit/issues/detail?id=353[Issue 353] &
  link:https://code.google.com/p/gerrit/issues/detail?id=1123[Issue 1123]:
  New link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/project-setup.html#rebase_if_necessary[
  Rebase If Necessary] submit type
+
This is similar to cherry pick, but honors change dependency
information.

* The rebase button is hidden when the patch set is current.

* Improved review message when a change is rebased in the UI
+
When a change is rebased in the UI by pressing the rebase button, a
comment is added onto the review. Instead of only saying 'Rebased' the
message is now more verbose, e.g. 'Patch Set 1 was rebased'.

* The submit type that is used for submitting a change is shown on the
  change screen in the info block.
+
This is useful because the submit type of a change can now be
link:#submit-type-from-prolog[controlled by Prolog].

* Replace the All Diff buttons on the change screen with links
+
The action buttons to open the diff for all files in own tabs consumed
too much space due to the long label texts.

* The patch set review screen can include radio buttons for custom
  labels if enabled by
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/prolog-cookbook.html#_how_to_write_submit_rules[submit rules].

* Voting on draft changes is now possible.

* Recommend rebase on Path Conflict.

* link:https://code.google.com/p/gerrit/issues/detail?id=1685[Issue 1685]:
  After 'Up to change' expand the patch set that was just reviewed
+
After clicking on the 'Up to change' link on a patch screen, the patch
set that was just reviewed is automatically expanded on the change
screen.

* Allow direct change URLs to end with '/'.

* Slightly increase commit message text size from 8px to 9px.

* link:https://code.google.com/p/gerrit/issues/detail?id=1381[Issue 1381]:
  Remove the ID column from change tables
+
Users don't really need the ID column present. For most changes the
subject is descriptive and unique enough to identify the correct
change.

* Do not wrap project/branch/owner fields in change table.
+
This makes it easier to use Gerrit on narrow screens.

* Rename "Old Version History" to "Reference Version".

Patch Screens
^^^^^^^^^^^^^

* Support for file comments
+
It is now possible to comment on a whole file in a patch.

* Have the reviewed panel also at the bottom of the patch screen
+
Reviewers normally review patches top down, finishing the review when
they reach the bottom of the patch. To use the streamlined review
workflow they now don't need to scroll back to the top to find the
reviewed checkbox and link.

* link:https://code.google.com/p/gerrit/issues/detail?id=1494[Issue 1494]:
  Use mono-font for displaying the file contents
+
This avoids alignment errors when syntax highlighting is enabled.

* Distinguish between error and timeout in intraline diff error message.

* Enable expanding skipped lines even if 'Syntax Coloring' is off.

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

* Support filtering of projects in the project list screen
+
Filter matches are highlighted by bold printing.
+
The filter is reflected by the `filter` URL parameter.

* Support filtering of projects in ProjectListPopup
+
Filter matches are highlighted by bold printing.

* Display a query icon for each project in the project list screen that
  links to the default query/dashboard of that project.

* Replace projects side menus with top menus
+
The top menus are submenus to the Project Menu and they appear only
when a project has been selected.

* Remember the last Project Screen used
+
Remember the last project screen used every time a project screen is
loaded. Go to the remembered screen when selecting a new project from
the project list instead of always going to the project info screen.

* Remember the last project viewed
+
Remember the last project viewed when navigating away from a project
screen.  If there is a remembered project, then the extra project links
are not hidden.

* Add clone panel to the project general screen

* New screen for listing and accessing the project dashboards.

* link:https://code.google.com/p/gerrit/issues/detail?id=1677[Issue 1677]:
  Place the 'Browse' button to select a watched project next to input field

* Ask user to login if project is not found
+
Accessing a project URL was failing with 'Not Found - 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 project was not visible to
'Anonymous Users'. Instead Gerrit now asks the user to login and
afterwards shows the project to the user if it exists and is visible.
If the project doesn't exist or is not visible, the user will still get
the Not Found screen after sign in.

* Improve error handling on branch creation
+
Improve the error messages that are displayed in the WebUI if the
creation of a branch fails due to invalid user input.

Group Screens
^^^^^^^^^^^^^

* Support filtering of groups in the group list screen
+
Filter matches are highlighted by bold printing.
+
The filter is reflected by the `filter` URL parameter.

* Remove group type from group info screen
+
The information about the group type was not much helpful. All groups
that can be seen in Gerrit are of type 'INTERNAL', except a few
well-known system groups which are of type 'SYSTEM'. The system groups
are so well-known that there is no need to display the type for them.

Dashboard Screens
^^^^^^^^^^^^^^^^^

* Link dashboard title to a URL version of itself
+
When using a stable project dashboard URL, the URL obfuscates the
content of the dashboard which can make it hard to debug a dashboard or
copy and modify it. In the special case of stable dashboards, make the
title a link to an unstable URL version of the dashboard with the URL
reflecting the actual dashboard contents the way a custom dashboard
does.

* Increase time span for "Recently Closed" section in user dashboard to 4 weeks.

Account Screens
^^^^^^^^^^^^^^^

* link:https://code.google.com/p/gerrit/issues/detail?id=1740[Issue 1740]:
  Display description how to generate SSH Key in SshPanel
+
Display a description of how to generate an SSH Key in an expandable
section in the SshPanel instead of linking to the GitHub SSH tutorial.
The GitHub SSH tutorial was partially not relevant and confused users.

* Make the text for "Register" customizable

Plugin Screens
^^^^^^^^^^^^^^

* Show status for enabled plugins in the WebUI as 'Enabled'
+
Earlier no status was shown for enabled plugins, which was confusing to
some users.

REST API
~~~~~~~~

* A big chunk of the Gerrit functionality is now available via the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api.html[REST API].
+
The REST API is *NOT* complete yet and some functionality is still missing.
+
To find out which functionality is available, check the REST endpoint documentation for
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-projects.html[projects],
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-changes.html[changes],
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-groups.html[groups] and
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-accounts.html[accounts].

* Support setting `HEAD` of a project
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-projects.html#set-head[via REST].

* Audit support for REST API.
+
Allow generating Audit events related to REST API execution. The
structure of the AuditEvent has been extended to support the new
name-multivalue pairs used in the REST API.
+
This is breaking compatibility with the 2.5 API as it changes the
params data type, this is needed anyway as the previous list of
Objects was not providing all the necessary information of
"what relates to what" in terms of parameters info.
+
Existing support for SSH and JSON-RPC events have been adapted in
order to fit into the new name-multivalue syntax: this allow a
generic audit plug-in to capture all parameters regardless of where
they have been generated.

* Remove support for deprecated `--format` option when listing changes
+
Querying changes via REST is now always producing JSON output.

* Introduce `id` property on REST entities
+
The `/changes/` entities now use `id` to include a triplet of the
project, branch and change-id string to uniquely identify that change
on the server. This moves the old `id` field to be named `change_id`,
which is a breaking change.

* Accept common forms of malformed JSON
+
Some clients may send JSON-ish instead of JSON. Be nice to those
clients and accept various useful forms of incorrect syntax:
+
** End of line comments starting with `//` or `#` and ending with a
   newline character.
** C-style comments starting with `/*` and ending with `*/`
   Such comments may not be nested.
** Names that are unquoted or single quoted.
** Strings that are unquoted or single quoted.
** Array elements separated by `;` instead of `,`.
** Unnecessary array separators. These are interpreted as if null was
   the omitted value.
** Names and values separated by `=` or `=>` instead of `:`.
** Name/value pairs separated by `;` instead of `,`.

* Be more liberal about parsing JSON responses
+
If the response begins with the JSON magic string, remove it before
parsing. If a response is missing this leading string, parse the
response as-is.

* Accept simple form encoded data for REST APIs
+
Simple cases like `/review` or `/abandon` can now accept standard form
values for basic properties, making it simple for tools to directly
post data:
+
----
  curl -n --digest \
  --data 'message=Does not compile.' \
  --data labels.Verified=-1 \
  http://localhost:8080/a/changes/3/revisions/1/review
----
+
Form field names are JSON field names in the top level object.  If dot
appears in the name the part to the left is taken as the JSON field
name and the part to the right as the key for a Map. This nicely fits
with the labels structure used by `/review`, but doesn't support the
much more complex inline comment case. Clients that need to use more
complex fields must use JSON formatting for the request body.

* Allow administrators to see other user capabilities
+
Expand `/accounts/{id}/capabilities` to permit an administrator
to inspect another user's effective capabilities.

* Declare kind in JSON API results
+
This is recommended to hint to clients what the entity type is when
processing the JSON payload.

* Format h/help output as plain text not JSON
+
The output produced when the client requested the h or help property
from a JSON API is always produced from constant compiled into the
server. Assume this safe to return to the client as text/plain content
and avoid wrapping it into an HTML escaped JSON string.

* Use string for JSON encoded plain text replies
+
Instead of wrapping the value into an object, just return the
string by itself. This better matches what happens with the plain
text return format.

* Wrap possible HTML plain text in JSON on GET
+
If the HTML appears like MSIE might guess it is HTML (such as if it
contains `<`) encode the response as a JSON object instead of as a
simple plain text string. This won't show up very often for clients,
and protects MSIE users stuck on ancient versions (pre MSIE 8).

* Ask MSIE to never sniff content types on REST API responses
+
Newer versions of MSIE can disable the content sniffing feature if the
server asks it to by setting an extension header. It is annoying, but
necessary, that a server needs to say "No really, I _am_ telling you
the right Content-Type, trust it."
+
This feature was added in MSIE 8 Beta 2 so it doesn't protect users
running MSIE 6 or 7, but those are ancient and users should upgrade.
+
Enable this on the REST API responses because we sometimes send back
text/plain results that are really just plain text. Existing JSON
responses are protected from accidential sniffing and treatment as
HTML thanks to Gson encoding HTML control characters using Unicode
character escapes within JSON strings.

Project Dashboards
~~~~~~~~~~~~~~~~~~
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-dashboards.html#project-dashboards[
  Support for storing custom dashboards for projects]
+
Custom dashboards can now be stored in the projects
`refs/meta/dashboards/*` branches.
+
The project dashboards are shown in a new project screen and can be
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-projects.html#dashboard-endpoints[
accessed via REST].

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-dashboards.html#project-default-dashboard[
  Allow defining a default dashboard for projects]

* Support inheritance for project dashboards.
+
In dashboards queries the `${project}` token can be used as placeholder
for the project name. This token will be replaced with the project to
which a dashboard is being applied.

* On the project list screen a query icon is displayed for each project
  that links to the default dashboard of that project.

* Support a `foreach` parameter for custom dashboards.
+
The `foreach` parameter which will get appended to all the queries in
the dashboard.

Access Controls
~~~~~~~~~~~~~~~
* Allow to overrule `BLOCK` permissions on the same project
+
It was impossible to block a permission for a group and allow the same
permission for a sub-group of that group as the `BLOCK` permission
always won over any `ALLOW` permission. For example, it was impossible
to block the "Forge Committer" permission for all users and then allow
it only for a couple of privileged users.
+
An `ALLOW` permission has now  priority over a `BLOCK` permission when
they are defined in the same access section of a project. To achieve the
above mentioned policy the following could be defined:
+
  [access "refs/heads/*"]
    forgeCommitter = block group Anonymous Users
    forgeCommitter = group Privileged Users
+
Across projects the `BLOCK` permission still wins over any `ALLOW`
permission. This way one cannot override an inherited `BLOCK`
permission in a subproject.
+
Overruling of `BLOCK` permissions with `ALLOW` permissions also works
for labels i.e. permission ranges. If a dedicated 'Verifiers' group
need to be the only group who can vote in the 'Verified' label and it
must be ensured that even project owners cannot change this policy,
then the following can be defined in a common parent project:
+
  [access "refs/heads/*"]
    label-Verified = block -1..+1 group Anonymous Users
    label-Verified = -1..+1 group Verifiers

* link:https://code.google.com/p/gerrit/issues/detail?id=1516[issue 1516]:
  Show global capabilities to all users that can read `refs/meta/config`
+
Users can now propose changes to the global capabilities for review
from the WebUI.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_remove_reviewer[
  Remove Reviewer] is a new permission.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_push_signed[
  Pushing a signed tag] is a new permission.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_edit_topic_name[
  Editing the topic name] is a new permission.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#capability_accessDatabase[
  Raw database access] with the `gsql` command is a new global capability.
+
Previously site administrators had this capability by default.  Now it has
to be explicitly assigned, even for site administrators.

* link:https://code.google.com/p/gerrit/issues/detail?id=1585[Issue 1585]:
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_view_drafts[
  Viewing other users' draft changes] is a new permission.

* link:https://code.google.com/p/gerrit/issues/detail?id=1675[Issue 1675]:
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_delete_drafts[Deleting] and
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_publish_drafts[publishing]
  other users' draft changes is a new permission.

* Grant most permissions when creating `All-Projects`
+
Make Gerrit more like a Git server out-of-the box by granting both
Administrators and Project Owners permissions to review changes, submit
them, create branches, create tags, and push directly to branches.

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#ldap.groupName[
  LDAP group names] are configurable, `cn` is still the default.

* Kerberos authentication to LDAP servers is now supported.

* Basic project properties are now inherited by default from parent
  projects: Use Content Merge, Require Contributor Agreement, Require
  Change Id, Require Signed Off By.

* Allow assigning `Push` for `refs/meta/config` on `All-Projects`
+
The `refs/meta/config` branch of the `All-Projects` project should only
be modified by Gerrit administrators because being able to do
modifications on this branch means that the user could assign himself
administrator permissions.
+
In addition to being administrator Gerrit requires that the
administrator has the `Push` access right for `refs/meta/config` in
order to be able to modify it (just as with all other branches
administrators do not have edit permissions by default).
+
The problem was that assigning the `Push` access right for
`refs/meta/config` on the `All-Projects` project was not allowed.
+
Having the `Push` access right for `refs/meta/config` on the
`All-Projects` project without being administrator has no effect.

Hooks
~~~~~
* Change topic is passed to hooks as `--topic NAME`.
* link:https://code.google.com/p/gerrit/issues/detail?id=1200[Issue 1200]:
New `reviewer-added` hook and stream event when a reviewer is added.

* link:https://code.google.com/p/gerrit/issues/detail?id=1237[Issue 1237]:
New `merge-failed` hook and stream event when a change cannot be submitted due to failed merge.

* link:https://code.google.com/p/gerrit/issues/detail?id=925[Issue 925]:
New `ref-update` hook run before a push is accepted by Gerrit.

* Add `--is-draft` parameter to `comment-added` hook

Git
~~~
* Add options to `refs/for/` magic branch syntax
+
Git doesn't want to modify the network protocol to support passing
data from the git push client to the server. Work around this by
embedding option data into a new style of reference specification:
+
----
  refs/for/master%r=alice,cc=bob,cc=charlie,topic=options
----
+
is now parsed by the server as:
+
--
** set topic to "options"
** CC charlie and bob
** add reviewer alice
** for branch refs/heads/master
--
+
If `%` is used the extra information after the branch name is
parsed as options with args4j. Each option is delimited by `,`.
+
Selecting publish vs. draft should be done with the options `draft` or
`publish`, appearing anywhere in the refspec after the `%` marker:
+
----
  refs/for/master%draft
  refs/for/master%draft,r=alice
  refs/for/master%r=alice,draft
  refs/for/master%r=alice,publish
----

* Enable content merge by default
+
Most teams seem to expect Gerrit to manage simple merges within a
source code file. Enable this out-of-the-box.

* Added a link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#core.useRecursiveMerge[
  server-level option] to use JGit's new, experimental recursive merger.

* link:https://code.google.com/p/gerrit/issues/detail?id=1608[Issue 1608]:
Commits pushed without a Change-Id now warn with instructions on how
to download and install the commit-msg hook.

* Add `oldObjectId` and `newObjectId` to the `GitReferenceUpdatedListener.Update`

SSH
~~~
* New SSH command to http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/cmd-gc.html[
  run Git garbage collection]
+
All GC runs are logged in a GC log file.

* Descriptions are added to ssh commands.
+
If `gerrit` is called without arguments, it will now show a list of available
commands with their descriptions.

* `create-account --http-password` enables setting/resetting the
  HTTP password of role accounts, for Git or REST API access.

* http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/cmd-ls-user-refs.html[
  ls-user-refs] lists which refs are visible for a given user.

* `ls-projects --has-acl-for` lists projects that mention a group
  in an ACL, identifying where rights are granted.

* `review` command supports project-specific labels

* `test-submit-rule` was renamed to `test-submit rule`:
+
`rule` is now a subcommand of the `test-submit` command.

* http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/cmd-test-submit-type.html[
  test-submit type] tests the Prolog submit type with a chosen change.

Query
~~~~~
* Allow `{}` to be used for quoting in query expressions
+
This makes it a little easier to query for group names that contain
a space over SSH:
+
  ssh srv gerrit query " 'status:open NOT reviewerin:{Developer Group}' "

* The query summary block includes `resumeSortKey`.

* Query results include author and change size information when certain
  options are specified.

* When a file is renamed the old file name is included in the Patch
  attribute

Plugins
~~~~~~~
* Plugins can contribute Prolog facts/predicates from Java.
* Plugins can prompt for parameters during `init` with `InitStep`.
* Plugins can now contribute JavaScript to the web UI. UI plugins can
  also be written and compiled with GWT.
* New Maven archetypes for JavaScript and GWT plugins.
* Plugins can contribute validation steps to received commits.
* Commit message length checks are moved to the `commit-message-length-validator`
  plugin which is included as a core plugin in the Gerrit distribution and
  can be installed during site initialization.
* Creation of code review notes is moved to the `reviewnotes` plugin
  which is included as a core plugin in the Gerrit distribution and can
  be installed during site initialization.
* A plugin extension point for avatar images was added.
* Allow HTTP plugins to change `static` or `docs` prefixes
+
An HTTP plugin may want more control over its URL space, but still
delegate to the plugin servlet's magic handling for static files and
documentation. Add JAR attributes to configure these prefixes.

Prolog
~~~~~~
[[submit-type-from-prolog]]
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/prolog-cookbook.html#HowToWriteSubmitType[
  Support controlling the submit type for changes from Prolog]
+
Similarly like the `submit_rule` there is now a `submit_type` predicate
which returns the allowed submit type for a change. When the
`submit_type` predicate is not provided in the `rules.pl` then the
project default submit type is used for all changes of that project.
+
Filtering the results of the `submit_type` is also supported in the
same way like filtering the results of the `submit_rule`. Using a
`submit_type_filter` predicate one can enforce a particular submit type
from a parent project.

* Plugins can contribute Prolog facts/predicates from Java.

* link:https://code.google.com/p/gerrit/issues/detail?id=288[Issue 288]:
  Expose basic commit statistics for the Prolog rule engine
+
A new method `gerrit:commit_stats(-Files,-Insertions, -Deletions)` was
added.

* A new `max_with_block` predicate was added for more convenient usage

Email
~~~~~
* Notify project watchers if draft change is published
* Notify users mentioned in commit footer on draft publish
* Add new notify type that allows watching of new patch sets
* link:https://code.google.com/p/gerrit/issues/detail?id=1686[Issue 1686]:
  Add new notify type that allows watching abandoning of changes
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-notify.html[
  Notifications configured in `project.config`] can now be addressed
  using any of To, CC, or BCC headers.
* link:https://code.google.com/p/gerrit/issues/detail?id=1531[Issue 1531]:
Email footers now include `Gerrit-HasComments: {Yes|No}`.
* `#if($email.hasInlineComments())` can be used in templates to test
  if there are comments to be included in this email.
* Notification emails are sent to included groups.
* Comment notification emails are sent to project watchers.
* "Change Merged" emails include the diff output when `sendemail.includeDiff` is enabled.
* When link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api-changes.html#set-review[
  posting a review via REST] the caller can control email delivery
+
This may help automated systems to be less noisy. Tools can now choose
which review updates should send email, and which categories of users
on a change should get that email.

Labels
~~~~~~
* Approval categories stored in the database have been replaced with labels
  configured in `project.config`. Existing categories are migrated to
  `project.config` in `All-Projects` as part of the schema upgrade; no user
  action is required.
* Labels are no longer global;
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-labels.html[
  projects may define their own labels], with inheritance.
* Don't create `Verify` category by default
+
Most project teams seem confused with the out-of-the-box experience
needing to vote on both `Code-Review` and `Verified` categories in
order to submit a change. Simplify the out-of-the-box workflow to only
have `Code-Review`. When a team installs the Hudson/Jenkins integration
or their own build system they can now trivially add the `Verified`
category by pasting 5 lines into `project.config`.

Dev
~~~

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-readme.html#debug-javascript[
  Support loading debug JavaScript]

* Gerrit acceptance tests
+
An infrastructure for testing the Gerrit daemon via REST and/or SSH
protocols has been added. Gerrit daemon is run in the headless mode and
in the same JVM where the tests run. Besides using REST/SSH, the tests
can also access Gerrit server internals to prepare the test environment
and to perform assertions.
+
A new review site is created for each test and the Gerrit daemon is
started on that site. When the test has finished the Gerrit daemon is
shutdown.

* Lightweight LDAP server for debugging

* Add asciidoc checks in the documentation makefile
+
Exit with error if the asciidoc executable is not available or has
version lower than 8.6.3.
+
The release script is aborted if asciidoc is missing.

* Added sublime project files to `.gitignore`

* Exclude all `pom.xml` files that are archetype resources in `version.sh`

* Source files generated by Prolog are now correctly included in the Eclipse
project.

* Core plugins are now included as git submodules.

* `mvn package` now generates the documentation by default.
+
The documentation will always be generated unless `-Dgerrit.documentation.skip`
is given on the command line.

* `mvn verify` now runs acceptance tests by default.
+
The `acceptance` profile is no longer used.  Acceptance tests will always
be run unless `-Dgerrit.acceptance-tests.skip=True` is given on the command line.

* Vertically align the "Choose:" header on the Become Any Account page.
* "Become Any Account" can be used for accounts whose full name is an empty string.


Performance
~~~~~~~~~~~
* Bitmap Optimizations
+
On running the http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/cmd-gc.html[
garbage collection] JGit creates bitmap data that is saved to an
auxiliary file. The bitmap optimizations improve the clone and fetch
performance. git-core will ignore the bitmap data.

* Improve suggest user performance when adding a reviewer.
+
Do not check the visibility of the change for each suggested account if
the ref is visible by all registered users.
+
On a system with about 2-3000 users, where most of the projects are
visible by every registered user, this improves the performance of the
suggesting reviewer by a factor of 1000 at least.

* Cache RefControl.isVisible()
+
For Git repositories with many changes the time for calculating visible
refs is reduced by 30-50%.

* Allow admins to disable magic ref check on upload
+
Some sites manage to run their repositories in a way that prevents
users from ever being able to create `refs/for`, `refs/drafts` or
`refs/publish` names in a repository. Allow admins on those servers
to disable this (somewhat) expensive check before every upload.

* Permit ProjectCacheClock to be completely disabled
+
Some admins may just want to require all updates to projects to be
made through the web interface, and avoid the small expense of a
background thread ticking off changes.

* Batch read Change objects during query

* Default `core.streamFileThreshold` to a larger value
+
If this value is not configured by the server administrator
performance on larger text files suffers considerably and
Gerrit may grind to a halt and be unable to answer users.
+
Default to either 25% of the available JVM heap or ~2048m.

* Improve performance of ReceiveCommits for repositories with many refs
+
Avoid adding `refs/changes/` and `refs/tags/` to RevWalk's as
uninteresting since JGit RevWalk doesn't perform well when a large
number of objects is marked as uninteresting.

* PatchSet.isRef()-optimizations.
+
PatchSet.isRef() is used extensively when preparing for a ref
advertisment and the regular expression used by isRefs() was notably
costly in these circumstances, especially since it could not be
pre-compiled.
+
The regular expression is removed and the check is now directly
implemented. As result the performance of `git ls-remote` could be
increased upto 15%.

* New config option `receive.checkReferencedObjectsAreReachable`
+
If set to true, Gerrit will validate that all referenced objects that
are not included in the received pack are reachable by the user.
+
Carrying out this check on Git repositories with many refs and commits
can be a very CPU-heavy operation. For non public Gerrit servers it may
make sense to disable this check, which is now possible.

* Cache config value in LdapAuthBackend

* Perform a single /accounts/self/capabilities on page load
+
This joins up 3 requests into a single call, which should speed up
initial page load for most users.

* Only gzip compress responses that are smaller compressed

* Caching of changes
+
During Ref Advertisments (via VisibleRefFilter), all changes need to
be fetched from the database to allow Gerrit to figure out which change
refs are visible and should be advertised to the user. To reduce
database traffic a cache for changes was introduced. This cache is
disabled by default since it can mess-up multi-server setups.

Misc
~~~~
* Add config parameter to make new groups by default visible to all
+
Add a new http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#groups.newGroupsVisibleToAll[
Gerrit configuration parameter] that controls whether newly
created groups should be by default visible to all registered users.

* Support for OpenID domain filtering
+
Added the ability to only allow email addresses under specific domains
to be used for OpenID login.
+
The allowed domains can be configured by setting
http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#auth.openIdDomain[
auth.openIdDomain] in the Gerrit configuration.

* Always configure
  http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#gerrit.canonicalWebUrl[
  gerrit.canonicalWebUrl] on init
+
Gerrit has been requiring this field for several versions now, but init
did not configure it. Ensure there is a value set so the server is not
confused at runtime.

* Add submodule subscriptions fetching by projects
+
While submodule subscriptions can be fetched by branch, some plugins
(e.g.: delete-project) would rather need to access all submodule
subscriptions of a project (regardless of the branch). Instead of
iterating over all branches of a project, and fetching the
subscription for each branch separately, we allow fetching of
subscriptions directly by projects.

* link:https://code.google.com/p/gerrit/issues/detail?id=1805[Issue 1805]:
  Make client SSL certificates that contain an email address work
+
Authentication with CLIENT_SSL_CERT_LDAP didn't work if the certificate
contained email address.

* Guess LDAP type of Active Directory LDS as ActiveDirectory
+
If Gerrit connects to an AD LDS [1] server it will guess its type as
RCF_2307 instead of ActiveDirectory. The reason is that an AD LDS
doesn't support the "1.2.840.113556.1.4.800" capability.  However,
AD LDS behaves like ActiveDirectory and Gerrit also needs to guess
its type as ActiveDirectory to make the default query patterns work
properly.
+
Extend the LDAP server type guessing by checking for presence of the
"1.2.840.113556.1.4.1851" capability which indicates that this LDAP
server runs ActiveDirectory as AD LDS [2].
+
Also remove the check for the presence of the "defaultNamingContext"
attribute as we don't use it anywhere and, by default, this attribute is
not set on an AD LDS [3]
+
[1] http://msdn.microsoft.com/en-us/library/aa705886(VS.85).aspx +
[2] http://msdn.microsoft.com/en-us/library/cc223364.aspx +
[3] http://technet.microsoft.com/en-us/library/cc816929(v=ws.10).aspx

* Allow group descriptions to supply email and URL
+
Some backends have external management interfaces that are not
embedded into Gerrit Code Review. Allow those backends to supply
a URL to the web management interface for a group, so a user can
manage their membership, view current members, or do whatever other
features the group system might support.
+
Some backends also have an email address associated with every
group. Sending email to that address will distribute the message to
the group's members. Permit backends to supply an optional email
address, and use this in the project level notification system if
a group is selected as the target for a message.

* Allow group backends to guess on relevant UUIDs
+
Expose all cheaply known group UUIDs from the ProjectCache,
enumerating groups used by access controls. This allows a backend
that has a large number of groups to filter its getKnownGroups()
output to only groups that may be relevant for this Gerrit server.
+
The best use case to consider is an LDAP server at a large
organization. A typical user may belong to 50 LDAP groups, but only
3 are relevant to this Gerrit server. Taking the intersection of
the two groups limits the output Gerrit displays to users, or uses
when considering same group visibility.

* Add more forbidden characters for project names
+
`?`, `%`, `*`, `:`, `<`, `>`, `|`, `$`, `\r` are now forbidden in
project names.

* Make `gerrit.sh` LSB compliant
+
** Add LSB headers
** Add 'status' as synonym for 'check'
** Fix exit status codes according to http://refspecs.linux-foundation.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

* Option to start headless Gerrit daemon
+
Add `--headless` option to the Daemon which will start Gerrit daemon
without the Web UI front end (headless mode).
+
This may be useful for running Gerrit server with an alternative (rest
based) UI or when starting Gerrit server for the purpose of automated
REST/SSH based testing.
+
Currently this option is only supported via the `--headless` option of
the daemon program. We would need to introduce a config option in order
to support this feature for deployed war mode.

* Show path to gerrit.war in command for upgrade schema

Upgrades
~~~~~~~~
* link:https://code.google.com/p/gerrit/issues/detail?id=1619[Issue 1619]:
Embedded Jetty is now 8.1.7.v20120910.

* ASM bytecode library is now 4.0.
* JGit is now 2.3.1.201302201838-r.208-g75e1bdb.
* asciidoc 8.6.3 is now required to build the documentation.
* link:https://code.google.com/p/gerrit/issues/detail?id=1155[Issue 1155]:
prettify is now r225

* The used GWT version is now 2.5.0
+
Fixes some issues with IE9 and IE10.

Bug Fixes
---------

Web UI
~~~~~~
* link:https://code.google.com/p/gerrit/issues/detail?id=1662[Issue 1662]:
  Don't show error on ACL modification if empty permissions are added
+
This error message was incorrectly displayed if a permission without
rules was added, although the save was actually successful.

* Don't show error on ACL modification if a section is added more than once
+
This error message was incorrectly displayed if multiple sections for
the same ref were added, although the save was actually successful.

* Links to CGit were broken when `remove-suffix` was enabled.

* link:https://code.google.com/p/gerrit/issues/detail?id=926[Issue 926]:
Internet Explorer versions 9 and 10 are supported.

* link:https://code.google.com/p/gerrit/issues/detail?id=1664[Issue 1664]:
  Reverting a change did not preserve the change's topic

* Fix: User could get around restrictions by reverting a commit
+
The Gerrit server may enforce several restrictions on the commit
message (change-id required, signed-off-by, etc). A user was able to
get around these restrictions by reverting a commit using the UI.

* link:https://code.google.com/p/gerrit/issues/detail?id=1518[Issue 1518]:
  Reset 'Old Version History' if dependent change is opened
+
Following the navigation link in the dependencies table on the
change screen, the user can directly navigate to dependent changes.
The value for 'Old Version History' of the current change was
incorrectly applied to the new change. If the value was invalid for
the new change the 'Old Version History' field became blank.

* link:https://code.google.com/p/gerrit/issues/detail?id=1736[Issue 1736]:
  Clear 'Old Version History' ListBox before populating it
+
The ListBox was not always cleared and as result the same entries were
sometimes added multiple times e.g. after rebasing a change in the
WebUI.

* link:https://code.google.com/p/gerrit/issues/detail?id=1673[Issue 1673]:
  Fix disappearance of patch headers when compared patches are identical
+
When two patches were compared that were identical 'No Differences' is
displayed to the user. In this case the patch headers disappeared and
as result the user couldn't change the patch selection anymore.

* link:https://code.google.com/p/gerrit/issues/detail?id=1759[Issue 1759]:
  Fix ArrayIndexOutOfBoundsException on intraline diff
+
In some cases displaying the intraline diff failed with an exception like
this:
+
----
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 10
  at com.google.gerrit.prettify.common.SparseFileContent.mapIndexToLine(SparseFileContent.java:149)
  at com.google.gerrit.prettify.common.PrettyFormatter.format(PrettyFormatter.java:188)
  at com.google.gerrit.client.patches.AbstractPatchContentTable.getSparseHtmlFileB(AbstractPatchContentTable.java:287)
  at com.google.gerrit.client.patches.SideBySideTable.render(SideBySideTable.java:113)
  at com.google.gerrit.client.patches.AbstractPatchContentTable.display(AbstractPatchContentTable.java:238)
  at com.google.gerrit.client.patches.PatchScreen.onResult(PatchScreen.java:444)
...
----
+
This happened when the old line was:
+
----
  foo-old<LF>
----
+
and the new line was:
+
----
  foo-new<CRLF>
----

* Prevent leading and trailing spaces on user's Full Name
+
Strip off the leading and trailing spaces from the Full Name that the
user enters on the Contact Information form.

* link:https://code.google.com/p/gerrit/issues/detail?id=1480[Issue 1480]:
  Show proper error message if registering email address fails

* link:https://code.google.com/p/gerrit/issues/detail?id=816[Issue 816]:
  Due to issues with the diff_intraline cache the file indention in the
  Side-By-Side diff was sometimes wrong.

* Make rebase failed and merge failed messages consistent

* Select 'Projects' menu on loading of a project screen
+
If in the top level menu 'All' is selected and the user navigates to
a change and then from the change to the project by clicking on the
project link in the ChangeInfoBlock, the project screen is loaded but
the 'Projects' menu was not selected.

* Fix display issues for inline comments and inline comment editors
+
** Sometimes a second comment editor was shown instead of using the
   existing comment editor.
** Fix doublicated border line between comments.
** Sometimes the parts of the border were missing when a comment was
   expanded.
** Fix displaying the blue line that marks the current line when there
   are several published comments.
** Sometimes on discard of a comment some frames of the comment editor
   stayed and some border lines of neighbour comments disappeared.

* In diff view don't let arrow column accept clicks.

* Fix display of commit message
+
If there are no HTML tags in the text, just break on lines.

* Upon selection in AddMemberBox, focus the box's text field
+
In the change screen, after clicking on an element of the 'Add
Reviewer' suggestion list, users expect to be able to add the reviewer
by hitting enter. This did not work in Firefox.

* Fix enter key detection in project creation screen
+
The enter key detection was not working in all browsers (e.g. Firefox).

* Display a tooltip for all tiny icons and ensure that the cursor is
  shown as pointer when hovering over them.

* Clean query string when switching pages
+
If we load a page without a query string, such as Projects->List,
My->Changes, or Settings, it might be confusing to show the old query
string from the previous page. The query string is now cleared out
when switching pages, leaving the help text visible.

* Fix highlighting in search suggestions
+
The provided suggestions should highlight the part that the user has
already typed as bold text. This only worked for the first operator.
For suggestions of any further operator no hightlighting was done.

* Fix style of hint text in search box on initial page load
+
The hint text should be a light gray on the white background,
but was coming up black on initial page load due to a style setup
ordering issue between the SearchPanel and the HintTextBox.

* link:https://code.google.com/p/gerrit/issues/detail?id=1661[Issue 1661]:
  Update links to Change-Id and Signed-off-by documentation on project info
  screen

* Use href="javascript;" for All {Side-by-Side,Unified} links
+
These links shouldn't have an anchor location. There is nothing for
the browser to remember or visit if it were opened in a new tab for
example.

* Improve message for unsatisfiable dependencies
+
If a change cannot be merged due to unsatisfiable dependencies a
comment is added to the change that lists the missing commits and says
that a rebase is necessary.
+
For each missing commit the comment said "Depends on patch set X
of ..., however the current patch set is Y."
+
If multiple commits are missing it may be that for some commits the
dependency is not outdated (X == Y). In this case the message was
confusing.
+
", however the current patch set is Y." is now skipped if Y == X.

* link:https://code.google.com/p/gerrit/issues/detail?id=1843[Issue 1843]:
  Enable the "Create Project" and "Create Group" buttons when pasting the name
  into the text box.

* link:https://code.google.com/p/gerrit/issues/detail?id=1370[Issue 1370]:
  Fix PatchScreen leak when moving between files.

* Prevent account's full name from being set to empty string.  Set it to
  null instead.

* link:https://code.google.com/p/gerrit/issues/detail?id=1682[Issue 1682]:
Correctly handle paths with URL-escaped characters
+
URL-unescape the path portion of a change history token to correctly
handle paths with URL-escapable characters, i.e. '+', ' ', etc.

* link:https://code.google.com/p/gerrit/issues/detail?id=1915[Issue 1915]:
Don't show non-visible drafts in the diff screens.

* link:https://code.google.com/p/gerrit/issues/detail?id=1801[Issue 1801]:
Correctly keep patch set ordering after a new patch set is added via
the Web UI.

REST API
~~~~~~~~
* Fix returning of 'Email Reviewers' capability via REST
+
The `/accounts/self/capabilities/` didn't return the 'Email Reviewers'
capability when it was not explicitly assigned, although by default
everyone has the 'Email Reviewers' capability.
+
If 'Email Reviewers' capability was allowed or denied,
`/accounts/self/capabilities/` returned the 'Email Reviewers'
capability always as true, which was wrong for the DENY case.

* Provide a more descriptive error message for unauthenticated REST
  API access

Git
~~~
* The wildcard `.` is now permitted in reference regex rules.

* Checking if a change is mergeable no longer writes to the repository.

* Submitted but unmerged changes are periodically retried. This is
  necessary for a multi-master configuration where the second master
  may need to retry a change not yet merged by the first. Please note
  we still do not believe this is sufficient to enable multi-master.

* Retry merge after LOCK_FAILURE when updating branch
+
If the project requires fast-forwards, the merge cannot succeed once
a lock failure occurs, but in other cases, it is safe to retry the
merge immediately.

* Do not automatically add reviewers from footer lines to draft patch sets
+
Gerrit already avoids adding reviewers from footer lines when a new
draft change is created. Now the same is done for draft patch sets.

* Add users mentioned in commit footer as reviewers on draft publish

* Hide any existing magic branches during push
+
If there is a magic branch visible during push, just hide it from the
client. Administrators can clear these by accessing the repository
directly.

* Prevent from deleting `refs/changes/`
+
Everything under `refs/changes/` should be protected by Gerrit, users
shouldn't be able to delete a particular patch set or a whole change
from the review process.

* Update description file in Git
+
When writing the description to `project.config`, it is also necessary
to write it to the description file in the repository so the same text
is visible in CGit or GitWeb.

* Write valid reflog for `HEAD` when creating the `All-Projects`
  project
+
When the `All-Projects` project is created during the schema
initialization, `HEAD` is set to point to the `refs/meta/config`
branch. When `HEAD` is updated an entry into the reflog is written.
This ref log entry should contain the ID of the initial commit as
target, but instead the target was the zero ID.

* link:https://code.google.com/p/gerrit/issues/detail?id=1702[Issue 1702]:
  Fix: 'internal server error' when pushing the same commit twice
+
On the second push of the same commit to `refs/for/<branch name>`, Gerrit
returns 'no new changes'.
+
However if the user pushed to 'refs/changes/<change id>', Gerrit returned
'internal server error'.

* Match all git fetch/clone/push commands to the command executor
+
Route not just `/p/` but any Git access to the same thread pool as the
SSH server is using, allowing all requests to compete fairly for
resources.

* Fix auto closing of changes on direct push
+
When a commit was directly pushed into a repository (bypassing code
review) and this commit had a Change-Id in its commit message then the
corresponding change was not automatically closed if it was open.

* Set change state to NEW if merge fails due to non-existing dest branch
+
If a submitted change failed to merge because the destination branch
didn't exist anymore, it stayed in state 'Submitted, Merge Pending'.
This meant Gerrit was re-attempting to merge this change (e.g. on
startup), but this didn't make sense. Either the branch did still not
exist (then there was no need to try merging it) or a new branch with
the old name was created (then it was questionable if the change should
still be merged into this branch). This is why it's better to set the
change back to the 'Review in Progress' state and update it with a
message saying that it couldn't be merged because the destination
branch doesn't exist anymore.
+
In addition Gerrit was writing an error into the error log if a change
couldn't be merged because the destination branch wass missing.
That was not really a server error and is not logged anymore.

* Fix NPE when pushing a patch with an invalid author with
  `Forge Author` permissions

* Fix duplicated GitReferenceUpdated event on project creation.
+
Creating a new Gerrit project was firing the GitReferenceUpdated event
for the `refs/meta/config` branch two times.

* Fix error log message in ReceiveCommits
+
When the creation of one or more references failed ReceiveCommits failed
with 'internal server error' and wrote the following error log:
"Only X of Y new change refs created in xxx; aborting"
The printed value for Y could be wrong since it didn't include the
replaceCount. As a result, a confusing message like
"Only 0 of 0 new change refs created in xxx; aborting"
could appear in the error log.

SSH
~~~
* `review --restore` allows a review score to be added on the restored change.

* link:https://code.google.com/p/gerrit/issues/detail?id=1721[Issue 1721]:
  `review --message` only adds the message once.

* `ls-groups` prints "N/A" if the group's name is not set.

* `set-project-parent --children-of`: Fix getting parent for level 1 projects
+
For direct child projects of the `All-Projects` project the name of the
parent project was incorrectly retrieved if the parent name was not
explicitly stored as `All-Projects` in the project.config file.

* Fix NPE when abandoning change with invalid author
+
If the author of a change isn't known to Gerrit (pushed with
`Forge Author` permissions), trying to abandon that change over SSH
failed with an NPE.

* Fix setting account's full name via ssh.

Query
~~~~~
* link:https://code.google.com/p/gerrit/issues/detail?id=1729[Issue 1729]:
  Fix query by 'label:Verified=0'

* link:https://code.google.com/p/gerrit/issues/detail?id=1772[Issue 1772]:
  Set `_more_changes` if result is limited due to configured query limit

* Fix query cost for "status:merged commit:c0ffee"

Plugins
~~~~~~~
* Skip disabled plugins on rescan
+
In a background thread Gerrit periodically scans for new or changed
plugins. On every such a rescan disabled plugins were loaded and a new
copy of their jar files was stored in the review site's tmp folder.

* Fix cleanup of plugins from tmp folder on graceful Gerrit shutdown
+
Loaded plugin jars are copied to the review site's tmp folder to support
hot updates of the plugin jars in the plugins folder. On Gerrit shutdown
these copies of the jar files should be cleaned up. For this purpose a
CleanupHandle is created, but the CleanupHandle wasn't enqueued in the
cleanupQueue which is why cleanup on Gerrit shutdown didn't happen.

* Reattempt deletion of plugin jars from tmp folder on JVM termination
+
Loaded plugin jars are copied to the review site's tmp folder to support
hot updates of the plugin jars in the plugins folder. On Gerrit shutdown
these copies of the jar files should be cleaned up. For this purpose a
CleanupHandle is created. The deletion of the tmp file in the
CleanupHandle can fail although the jar file was closed. In this case
reattempt the deletion on termination of the virtual machine. This
normally succeeds.

* Fix unloading of plugins
+
When two plugins, say pluginA, and pluginB had been loaded, and pluginA
was removed from $sitePath/plugins, pluginA got stopped, and a cleaning
run was ordered. But this cleaning run cleaned both plugins and both
plugins had their jars removed. This left pluginB visible to Gerrit
although it's backing jar was gone. Upon calling not yet initialized
parts of pluginB (e.g.: viewing not yet viewed Documentation pages of
pluginB), exceptions as following were thrown:
+
----
  java.lang.IllegalStateException: zip file closed
          at java.util.zip.ZipFile.ensureOpen(ZipFile.java:420)
          at java.util.zip.ZipFile.getEntry(ZipFile.java:165)
----

* Fix double bound exception when loading extensions
+
ServerInformation class was already bound, therefore it shouldn't be
bound a second time for Gerrit extensions.

* Do not call onModuleLoad() second time
+
onModuleLoad() method is automatically called by GWT framework. Calling
it once again in PluginGenerator caused double plugin initialization.

* Require `Administrate Server` capability to GET /plugins/
+
Listing plugins requires being an administrator. This was missed in the
REST API.

* link:https://code.google.com/p/gerrit/issues/detail?id=1827[Issue 1827]:
  Allow InternalUser (aka plugins) to see any internal group, and run
  plugin startup and shutdown as PluginUser.

Email
~~~~~
* Merge failure emails are only sent once per day.
* Unused macros are removed from the mail templates.
* Unnecessary ellipses are no longer applied to email subjects.
* The empty diff output from an "octopus merge" is now explained in change notification emails.
* link:https://code.google.com/p/gerrit/issues/detail?id=1480[Issue 1480]:
Proper error message is shown when registering an email address fails.

* link:https://code.google.com/p/gerrit/issues/detail?id=1692[Issue 1692]:
Review comments are sorted before being added to notification emails.

* Fix watching of 'All Comments' on `All-Projects`
+
If a user is watching 'All Comments' on `All-Projects` this should
apply to all projects.

Misc
~~~~
* Provide more descriptive message for NoSuchProjectException

* On internal error due to receive timeout include the value of
  `receive.timeout` into the log message

* Silence INFO/DEBUG output from apache.http
+
This spammed the log when using OpenID, for each and every login.

* Remove `mysql_nextval` script
+
This function does not work on binary logging enabled servers,
as MySQL is unable to execute the function on slaves without
causing possible corruption. Drop the function since it was only
created to help administrators, and is unsafe.

* link:https://code.google.com/p/gerrit/issues/detail?id=1312[Issue 1312]:
  Fix relative URL detection in submodules
+
Relative submodules do not start with `/`. Instead they start with
`../`.  Fix the Submodule Subscriptions engine to recognize relative
submodules.

* link:https://code.google.com/p/gerrit/issues/detail?id=1622[Issue 1622]:
  Fix NPE in LDAP Helper class if username is null

* Fix commit-msg hook failure with spaces in path
+
If the project absolute path had any whitespace, the commit
hook failed to complete because a script variable was not
enclosed in double quotes.

* Drop the trailing ".git" suffix of the name of new project

* Prevent possible NPE when running `change-merged` hook
+
It's possible that the submitter is null. Add a check for this
before invoking the `change-merged` hook with it.

* Keep change open if its commit is pushed to another branch.

* Fire GitReferenceUpdated event when BanCommit updates the
  `refs/meta/reject-commits` branch.

* Fix GitWeb Caching
+
GitWeb Caching was not working when its cgi file was executed from
outside. The same approach will also work with vanilla GitWeb.

* Fix infinite loops when walking project hierarchy

* Fix resource leak in MarkdownFormatter

* Query all external groups for internal group memberships
+
When asking for the known groups a user belongs to they may belong
to an internal group by way of membership in a non-internal group,
such as LDAP. Cache in memory the complete list of any non-internal
group UUIDs used as members of an internal group. These must get
checked for membership before completing the known group data from
the internal backend.

* Handle sorting groups with no name to avoid NPE

* `gerrit.sh`
** Don't suggest site init if schema version is newer than expected
** Improve error messages in schema check
** Suggest changing `gerrit.config` when JDK not found
** Explicitly set a shell
** Determine `GERRIT_SITE` from current working directory.
** Fix `gerrit.sh restart` for relative paths
** Fix site path computation if '.' occurs in path
** Whitespace fixes

* Display the reason of an Init injection failure.

* link:https://code.google.com/p/gerrit/issues/detail?id=1821[Issue 1821]:
  Warn if `cache.web_sessions.maxAge` is to small
+
Setting `maxAge` to a small value can result in the browser endlessly
redirecting trying to setup a new valid session. Warn administrators
that the value is set smaller than 5 minutes.

* link:https://code.google.com/p/gerrit/issues/detail?id=1821[Issue 1821]:
  Support `cache.web_sessions.maxAge` < 1 minute

* Use SECONDS as default time unit for `cache.web_sessions.maxAge`
+
DefaultCacheFactory already uses SECONDS as default time unit for
`cache.*.maxAge`.
+
Update the described default time unit for `cache.*.maxAge` in the
documentation.
+
Administrators may need to update their configuration to for the new
default time unit.

* Add pylint configuration for contributed Python scripts

* Various fixes and improvements of the `contrib/trivial_rebase.py`
  script
+
** Adapt options to Gerrit 2.6
** Use change-url flag for ChangeId
** Prevent exception for empty commit
** Fix pylint errors
** Call `gerrit review` instead of `gerrit approve`
** Make the private key argument optional
** Support alternative ssh executable, for example `plink`
** Support custom review labels
** Correctly handle empty patch ID
+
If only one of the patch IDs is empty, it should not be considered
a trivial rebase.

** Use plain python instead of python2.6
+
Windows installation only has python.exe

* Correct MIME type of `favicon.ico` reference
+
This is not a GIF, it is an "MS Windows icon resource".
Some browsers may skip the image if the type is wrong.

* Use `<link rel="shortcut icon">` for `favicon.ico` reference
+
IE looks for a two-word "shortcut icon" relationship.  Other browsers
interpret this as two relationships, one of which is "icon", so they
can handle this syntax as well.
+
See:
+
** http://msdn.microsoft.com/en-us/library/ms537656(VS.85).aspx
** http://jeffcode.blogspot.com/2007/12/why-doesnt-favicon-for-my-site-appear.html

* Remove `servlet-api` from `WAR/lib`
+
It is wrong to include the servlet API in a WAR's `WEB-INF/lib`
directory. This confuses some servlet containers who refuse to
load the Gerrit WAR. Instead package the Jetty runtime and the
servlet API in a new `WEB-INF/pgm-lib` directory.

* link:https://code.google.com/p/gerrit/issues/detail?id=1822[Issue 1822]:
  Verify session matches container authentiation header
+
If the user alters their identity in the container invalidate
the Gerrit user session and force a new one to begin.

* link:https://code.google.com/p/gerrit/issues/detail?id=1743[Issue 1743]:
  Move RPC auth token from `Authorization` header to `X-Gerrit-Auth`
+
Servers that run with auth.type = HTTP or HTTP_LDAP are unable to
use the web UI because the Authorization code supplied by the UI
overrides the browser's native `Authorization` header and causes the
request to be blocked at the HTTP reverse proxy, before Gerrit even
sees the request.
+
Instead insert a unique token into `X-Gerrit-Auth`, leaving the HTTP
standard `Authorization` header unspecified and available for use in
HTTP reverse proxies.

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

The link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/index.html[
documentation index] is restructured to make it easier to use for different kinds of
users.

User Documentation
~~~~~~~~~~~~~~~~~~
* Split link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api.html[
  REST API documentation] and have one page per top level resource

* Add executable examples for GET requests to
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/rest-api.html[
  REST API documentation]
+
Add examples for GET requests to the REST API documentation on which
the user can click to fire the requests. This allows users to
immediately try out the requests and play around with them.

* Document the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#block[
  BLOCK access rule].

* Added documentation of
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-upload.html#http[
  how to authenticate uploads over HTTP].

* Added documentation of the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#auth.editFullNameUrl[auth.editFullNameUrl] and
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#auth.httpPasswordUrl[auth.httpPasswordUrl]
  configuration parameters.

* Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/prolog-cookbook.html[
  submit_rule examples] from Gerrit User Summit 2012.

* Improved the push tag examples in the access control documentation.

* Improved documentation of error messages related to commit message footer content.

* Added documentation of the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/error-commit-already-exists.html[
  commit already exists] error message.

* Added missing documentation of the ssh
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/cmd-version.html[
  version] command.

* link:https://code.google.com/p/gerrit/issues/detail?id=1369[Issue 1369]:
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gitweb.html[
  Gitweb Instruction Updates]

* link:https://code.google.com/p/gerrit/issues/detail?id=1594[Issue 1594]:
  Document execute permission for commit-msg in
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-changeid.html#creation[
  Change-Id docs]

* link:https://code.google.com/p/gerrit/issues/detail?id=1602[Issue 1602]:
Corrected references to `refs/changes` in the access control documentation.

* Update documentation of
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#trackingid.name.match[
  maximal length for tracking ids]

* Added missing documentation of
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/json.html[JSON attributes].

* Rename `custom-dashboards.html` to
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-dashboards.html[user-dashboards.html]
+
This document no longer deals exclusively with custom dashboards, it now describes project level dashboards also.

* Separate the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-login-register.html[
  initial user setup instructions] to a shared file

* Separate the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/database-setup.html[
  database setup instructions] to a shared file

* Improve the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/database-setup.html[
  instructions for PgSQL setup]

* Fix the order of steps in the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/install-j2ee.html[
  J2EE Installation document]
+
It is better to first define the JNDI data source in the application
server and then deploy Gerrit than opposite. This should avoid errors
like "No DataSource" on the first deployment.

* Clarify documentation of
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/config-gerrit.html#ldap.groupName[
  LDAP group name setting]

* Improve the documentation of
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/user-submodule.html[
  git submodule subscription handling]

* Clarify the documentation of change cache setup.

* Improve the explanation of path conflicts in the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/project-setup.html[
  project setup documentation].

* Add explanations of special/magic refs in the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#references[
  access control documentation].

* Clarify how to set Global Capabilities.
* Correct documentation of the `create-account` ssh command.
* Add documentation of the `database.connectionPool` setting.
* Adapt documentation to having 'Projects' as top level menu
* Added missing documentation of mail templates.
* Added documentation of contributor agreements.
* Fix `init.d` symbolic link commands.
* Remove obsolete diskbuffer setting from example config file.
* Various minor grammatical and formatting corrections.
* Fix external links in 2.0.21 and 2.0.24 release notes
* Manual pages can be optionally created/installed for core gerrit ssh commands.

Developer And Maintainer Documentation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Updated the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-eclipse.html#maven[
  Maven plugin installation instructions] for Eclipse 3.7 (Indigo).

* Document link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-contributing.html#commit-message[
  usage of the past tense in commit messages]

* Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-contributing.html[
  instructions] on how to configure git for pushing to Gerrit's Gerrit

* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-contributing.html#process[
  Stable branches process documentation]

* Improved the
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-release.html[
  release documentation].

* Document that plans for
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-release.html#stable[
  stable-fix releases] should be announced

* Document process for
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/dev-release.html#security[
  security-fix releases]

* The release notes are now made when a release is created by running the `tools/release.sh` script.

