= Release notes for Gerrit 2.6

Gerrit 2.6 is now available:

link:https://www.gerritcodereview.com/download/gerrit-2.6.war[https://www.gerritcodereview.com/download/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 accidental 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
advertisement 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 by up to 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 Advertisements (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 duplicated 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 neighbor 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 highlighting 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 was 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 authentication 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.

