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