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] and
link:ReleaseNotes-2.5.2.html[Gerrit 2.5.2]. These bug fixes are *not*
listed in these release notes.

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

*WARNING:* Upgrading to 2.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.

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 now not anymore sticked to the Gerrit page
top border so that it is now always displayed, even if the user has
scrolled down the page and the top border is not visible.
+
This change make 'Working ...' message relatively positioned to
browser top border, so that it is always visible for users.

* 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.

Search
^^^^^^
* Animate search bar by expanding & unexpanding
+
When the search bar is used, expand it to allow for more text to be
visible. When it is blurred, shrink it back to the original size.

* 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.

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.

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.

* Apache reverse proxies need `AllowEncodedSlashes NoDecode`
+
When Apache is used as a reverse proxy the NoDecode option
must be set for AllowEncodedSlashes to prevent Apache from
mangling Gerrit REST API URLs.

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`

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.78-g8fcde4b.
* 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 docu 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.

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.

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.

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
** 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
-------------

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]

* 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.

