1951 lines
		
	
	
		
			78 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1951 lines
		
	
	
		
			78 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Release notes for Gerrit 2.5
 | 
						|
============================
 | 
						|
 | 
						|
Gerrit 2.5 is now available:
 | 
						|
 | 
						|
link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-full-2.5.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-full-2.5.war]
 | 
						|
 | 
						|
Gerrit 2.5 includes the bug fixes done with
 | 
						|
link:ReleaseNotes-2.4.1.html[Gerrit 2.4.1] and
 | 
						|
link:ReleaseNotes-2.4.2.html[Gerrit 2.4.2]. These bug fixes are *not*
 | 
						|
listed in these release notes.
 | 
						|
 | 
						|
Schema Change
 | 
						|
-------------
 | 
						|
*WARNING:* This release contains schema changes.  To upgrade:
 | 
						|
----
 | 
						|
  java -jar gerrit.war init -d site_path
 | 
						|
----
 | 
						|
 | 
						|
*WARNING:* Upgrading to 2.5.x requires the server be first upgraded to 2.1.7 (or
 | 
						|
a later 2.1.x version), and then to 2.5.x.  If you are upgrading from 2.2.x.x or
 | 
						|
newer, you may ignore this warning and upgrade directly to 2.5.x.
 | 
						|
 | 
						|
Warning on upgrade to schema version 68
 | 
						|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
The migration to schema version 68, may result in a warning, which can
 | 
						|
be ignored when running init in the interactive mode.
 | 
						|
 | 
						|
E.g. this warning may look like this:
 | 
						|
 | 
						|
----
 | 
						|
Upgrading database schema from version 67 to 68 ...
 | 
						|
warning: Cannot create index for submodule subscriptions
 | 
						|
Duplicate key name 'submodule_subscriptions_access_bySubscription'
 | 
						|
Ignore warning and proceed with schema upgrade [y/N]?
 | 
						|
----
 | 
						|
 | 
						|
This migration is creating an index for the
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-submodules.html[submodule feature] in
 | 
						|
Gerrit. When the submodule feature was introduced the index was only
 | 
						|
created when a new site was initialized, but not when Gerrit was
 | 
						|
upgraded. This migration tries to create the index, but it will only
 | 
						|
succeed if the index does not exist yet. If the index exists already,
 | 
						|
the creation of the index will fail. There was no database independent
 | 
						|
way to detect this case and this is why this migration leaves it to the
 | 
						|
user to decide if a failure should be ignored or not. If from the error
 | 
						|
message you can see that the migration failed because the index exists
 | 
						|
already (as in the example above), you can safely ignore this warning.
 | 
						|
 | 
						|
Upgrade Warnings
 | 
						|
----------------
 | 
						|
 | 
						|
[[replication]]
 | 
						|
Replication
 | 
						|
~~~~~~~~~~~
 | 
						|
 | 
						|
Gerrit 2.5 no longer includes replication support out of the box.
 | 
						|
Servers that reply upon `replication.config` to copy Git repository
 | 
						|
data to other locations must also install the replication plugin.
 | 
						|
 | 
						|
Cache Configuration
 | 
						|
~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
Disk caches are now backed by individual H2 databases, rather than
 | 
						|
Ehcache's own private format. Administrators are encouraged to clear
 | 
						|
the `'$site_path'/cache` directory before starting the new server.
 | 
						|
 | 
						|
The `cache.NAME.diskLimit` configuration variable is now expressed in
 | 
						|
bytes of disk used. This is a change from previous versions of Gerrit,
 | 
						|
which expressed the limit as the number of entries rather than bytes.
 | 
						|
Bytes of disk is a more accurate way to size what is held. Admins that
 | 
						|
set this variable must update their configurations, as the old values
 | 
						|
are too small. For example a setting of `diskLimit = 65535` will only
 | 
						|
store 64 KiB worth of data on disk and can no longer hold 65,000 patch
 | 
						|
sets. It is recommended to delete the diskLimit variable (if set) and
 | 
						|
rely on the built-in default of `128m`.
 | 
						|
 | 
						|
The `cache.diff.memoryLimit` and `cache.diff_intraline.memoryLimit`
 | 
						|
configuration variables are now expressed in bytes of memory used,
 | 
						|
rather than number of entries in the cache. This is a change from
 | 
						|
previous versions of Gerrit and gives administrators more control over
 | 
						|
how memory is partitioned within a server. Admins that set this variable
 | 
						|
must update their configurations, as the old values are too small.
 | 
						|
For example a setting of `memoryLimit = 1024` now means only 1 KiB of
 | 
						|
data (which may not even hold 1 patch set), not 1024 patch sets.  It
 | 
						|
is recommended to set these to `10m` for 10 MiB of memory, and
 | 
						|
increase as necessary.
 | 
						|
 | 
						|
The `cache.NAME.maxAge` variable now means the maximum amount of time
 | 
						|
that can elapse between reads of the source data into the cache, no
 | 
						|
matter how often it is being accessed. In prior versions it meant how
 | 
						|
long an item could be held without being requested by a client before
 | 
						|
it was discarded. The new meaning of elapsed time before consulting
 | 
						|
the source data is more useful, as it enables a strict bound on how
 | 
						|
stale the cached data can be. This is especially useful for slave
 | 
						|
servers account and permission data, or the `ldap_groups` cache, where
 | 
						|
updates are often made to the source without telling Gerrit to reload
 | 
						|
the cache.
 | 
						|
 | 
						|
New Features
 | 
						|
------------
 | 
						|
 | 
						|
Plugins
 | 
						|
~~~~~~~
 | 
						|
 | 
						|
The Gerrit server functionality can be extended by installing plugins.
 | 
						|
Depending on how tightly the extension code is coupled with the Gerrit
 | 
						|
server code, there is a distinction between
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#plugin[plugins] and
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#extension[extensions].
 | 
						|
 | 
						|
* link:#replication[Move replication logic to replication plugin]
 | 
						|
+
 | 
						|
This splits all of the replication code out of the core server
 | 
						|
and moves it into a standard plugin.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html[Documentation about
 | 
						|
  plugin development] including instructions for:
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#getting-started[how to get
 | 
						|
   started with plugin development]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#deployment[plugin
 | 
						|
   deployment/installation]
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#API[API for plugins and
 | 
						|
  extensions]
 | 
						|
 | 
						|
* Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#ssh[SSH command
 | 
						|
  plugins]
 | 
						|
+
 | 
						|
Allows plugin developers to declare additional SSH commands.
 | 
						|
 | 
						|
* Enable link:#ssh-alias[aliases for SSH commands]
 | 
						|
+
 | 
						|
Site administrators can alias SSH commands from a plugin into the
 | 
						|
`gerrit` namespace.
 | 
						|
+
 | 
						|
The aliases are configured statically at server startup, but are
 | 
						|
resolved dynamically at invocation time to the currently loaded
 | 
						|
version of the plugin. If the plugin is not loaded, or does not
 | 
						|
define the command, "not found" is returned to the user.
 | 
						|
 | 
						|
* Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#http[HTTP
 | 
						|
  plugins]
 | 
						|
+
 | 
						|
Plugins may contribute to the /plugins/NAME/ URL space.
 | 
						|
 | 
						|
* Automatic registration of plugin bindings
 | 
						|
+
 | 
						|
If a plugin has no modules declared in the manifest, automatically
 | 
						|
generate the modules for the plugin based on the class files that
 | 
						|
appear in the plugin and the `@Export` annotations that appear on
 | 
						|
these concrete classes.
 | 
						|
+
 | 
						|
For any non-abstract command that extends SshCommand, plugins may
 | 
						|
declare the command with `@Export("name")` to
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#ssh[bind the implementation
 | 
						|
as that SSH command].
 | 
						|
+
 | 
						|
Likewise link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#http[HTTP servlets
 | 
						|
can also be bound to URLs].
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#data-directory[Support a data
 | 
						|
  directory for plugins on demand]
 | 
						|
 | 
						|
* Support serving static/ and Documentation/ from plugins
 | 
						|
+
 | 
						|
The static/ and Documentation/ resource directories of a plugin can be
 | 
						|
served over HTTP for any loaded and running plugin, even if it has no
 | 
						|
other HTTP handlers. This permits a plugin to supply icons or other
 | 
						|
graphics for the web UI, or documentation content to help users learn
 | 
						|
how to use the plugin.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#documentation[Auto-formatting
 | 
						|
  of plugin HTTP pages from Markdown files]
 | 
						|
+
 | 
						|
If Gerrit detects that a requested plugin resource does not exist, but
 | 
						|
instead a file with a `.md` extension does exist, Gerrit opens the
 | 
						|
`.md` file and reformats it as html.
 | 
						|
 | 
						|
* Support of link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#macros[macros in
 | 
						|
  Markdown plugin documentation]
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#auto-index[Automatic
 | 
						|
  generation of an index for the plugin documentation]
 | 
						|
 | 
						|
* Support for audit plugins
 | 
						|
+
 | 
						|
Plugins can implement an `AuditListener` to be informed about auditable
 | 
						|
actions:
 | 
						|
+
 | 
						|
----
 | 
						|
  @Listener
 | 
						|
  public class MyAuditTrail extends AuditListener
 | 
						|
----
 | 
						|
+
 | 
						|
The plugin must define a plugin module that binds the implementation of
 | 
						|
the audit listener in the `configure()` method:
 | 
						|
+
 | 
						|
----
 | 
						|
  DynamicSet.bind(binder(), AuditListener.class).to(MyAuditTrail.class);
 | 
						|
----
 | 
						|
 | 
						|
* Web UI for plugins
 | 
						|
+
 | 
						|
Administrators can see the list of installed plugins in the WebUI
 | 
						|
under `Admin` > `Plugins`. For each plugin the plugin status is shown
 | 
						|
and it is possible to navigate to the plugin documentation.
 | 
						|
 | 
						|
* Servlet to list plugins
 | 
						|
+
 | 
						|
Administrators can retrieve plugin information from a REST interface
 | 
						|
by loading `<server-url>/a/plugins/`.
 | 
						|
 | 
						|
* Support SSH commands to
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-ls.html[list the installed
 | 
						|
   plugins]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-install.html[install plugins]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-enable.html[enable plugins]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-remove.html[disable plugins]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-plugin-reload.html[reload plugins]
 | 
						|
 | 
						|
* Support installation of core plugin on site initialization
 | 
						|
 | 
						|
* Automatically load/unload/reload plugins
 | 
						|
+
 | 
						|
The PluginScanner thread runs every 1 minute by default and loads any
 | 
						|
newly created plugins, unloads any deleted plugins, and reloads any
 | 
						|
plugins that have been modified.
 | 
						|
+
 | 
						|
The check frequency can be configured by setting
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#plugins.checkFrequency[
 | 
						|
plugins.checkFrequency] in the Gerrit config file. By configuration
 | 
						|
the scanner can also be disabled.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#classpath[Loading of plugins
 | 
						|
  in own ClassLoader]
 | 
						|
 | 
						|
* Plugin cleanup in the background
 | 
						|
+
 | 
						|
When a plugin is stopped, schedule a Plugin Cleaner task to run
 | 
						|
1 minute later to try and clean out the garbage and release the
 | 
						|
JAR from `$site_path/tmp`.
 | 
						|
 | 
						|
* Export `LifecycleListener` as extension point
 | 
						|
+
 | 
						|
Extensions may need to know when they are starting or stopping.
 | 
						|
Export the interface that they can use to learn this information.
 | 
						|
 | 
						|
* Support injection of `ServerInformation` into extensions and plugins
 | 
						|
+
 | 
						|
Plugins can take this value by injection and learn the current
 | 
						|
server state during their own LifecycleListener. This enables a
 | 
						|
plugin to determine if it is loading as part of server startup, or
 | 
						|
because it was dynamically installed or reloaded by an administrator.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-plugins.html#getting-started[Maven
 | 
						|
  archetype for creating gerrit plugin projects]
 | 
						|
 | 
						|
* Enables the use of session management in Jetty
 | 
						|
+
 | 
						|
This enables plugins to make use of servlet sessions.
 | 
						|
 | 
						|
REST API
 | 
						|
~~~~~~~~
 | 
						|
Gerrit now supports a REST like API available over HTTP. The API is
 | 
						|
suitable for automated tools to build upon, as well as supporting some
 | 
						|
ad-hoc scripting use cases.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html[Documentation of the REST API]
 | 
						|
 | 
						|
* Support REST endpoints to
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-changes.html[query changes]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-projects.html[list projects]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-projects.html#suggest-projects[suggest
 | 
						|
   projects]
 | 
						|
** link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-accounts.html#list-account-capabilities[query
 | 
						|
   the global capabilities of the calling user]
 | 
						|
 | 
						|
* Support link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html#authentication[anonymous
 | 
						|
  and authenticated access] to the REST endpoints
 | 
						|
 | 
						|
* Support link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api.html#output[JSON output
 | 
						|
  format] for the REST endpoints
 | 
						|
 | 
						|
The new REST API is used from the Gerrit WebUI.
 | 
						|
 | 
						|
Some of the methods from the old internal JSON-RPC interface were
 | 
						|
completely replaced by the new REST API and got deleted:
 | 
						|
 | 
						|
* `ProjectAdminService.visibleProjects(AsyncCallback<ProjectList>)`
 | 
						|
* `ProjectAdminService.suggestParentCandidates(AsyncCallback<List<Project>>)`
 | 
						|
* `ChangeListService.myStarredChangeIds(AsyncCallback<Set<Change.Id>>)`
 | 
						|
* `ChangeListService.allQueryNext(String, String, int, AsyncCallback<SingleListChangeInfo>)`
 | 
						|
* `ChangeListService.allQueryPrev(String, String, int, AsyncCallback<SingleListChangeInfo>)`
 | 
						|
* `ChangeListService.forAccount(Account.Id, AsyncCallback<AccountDashboardInfo>)`
 | 
						|
 | 
						|
[[query-deprecation]]
 | 
						|
In addition the `/query` API has been deprecated. By default it is
 | 
						|
still available but server administrators may disable it by setting
 | 
						|
the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#site.enableDeprecatedQuery[
 | 
						|
`site.enableDeprecatedQuery`] parameter in the Gerrit config file. This
 | 
						|
allows to enforce tools to move to the new API.
 | 
						|
 | 
						|
Web
 | 
						|
~~~
 | 
						|
 | 
						|
Change Screen
 | 
						|
^^^^^^^^^^^^^
 | 
						|
 | 
						|
* Display commit message in a box
 | 
						|
+
 | 
						|
The commit message on the change screen is now placed in a box with a
 | 
						|
title and emphasis on the commit summary. The star icon and the
 | 
						|
permalink are displayed in the box header. The header from the change
 | 
						|
screen is removed as it only held duplicate information.
 | 
						|
 | 
						|
* Open the dependency section automatically when the change is needed
 | 
						|
  by an open change
 | 
						|
 | 
						|
* Only show a change as needed by if its current patch set depends on
 | 
						|
  the change
 | 
						|
 | 
						|
* Show only changes of the same project in the 'Depends On' section
 | 
						|
+
 | 
						|
If two projects share the same history it can happen that the same
 | 
						|
commit is pushed for both projects, resulting in two changes. If now
 | 
						|
a successor commit is pushed for one of the projects, the resulting
 | 
						|
successor change was wrongly listing both changes in the 'Depends On'
 | 
						|
section. Now only the predecessor change of the own project is listed.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1383[issue 1383]:
 | 
						|
  Display the approval table on the PublishCommentsScreen.
 | 
						|
+
 | 
						|
So far the approval table that shows the reviewers and their current
 | 
						|
votes was only shown on the ChangeScreen. Now it is also shown on the
 | 
						|
PublishCommentScreen. This allows the reviewer to see all existing
 | 
						|
votes and reviewers when doing their own voting and publishing of
 | 
						|
comments. Seeing the existing votes helps the reviewer in
 | 
						|
understanding which votes are still required before the change can be
 | 
						|
submitted.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1380[issue 1380]:
 | 
						|
  Display time next to change comments
 | 
						|
+
 | 
						|
When a comment was posted yesterday, or any time older than 1 day but
 | 
						|
less than 1 year ago, display the time too. Display "May 2 17:37" rather
 | 
						|
than just "May 2".
 | 
						|
 | 
						|
* Only show "Can Merge" when the change is new or draft
 | 
						|
 | 
						|
* Allow auto suggesting reviewers to draft changes
 | 
						|
+
 | 
						|
Auto completing users for draft changes did't work as the other
 | 
						|
users didn't have access to the drafts. The visibility check for
 | 
						|
the reviewer suggestion is now skipped.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1294[issue 1294]:
 | 
						|
  Shorten subject of parent commit for displaying in the UI
 | 
						|
+
 | 
						|
If the parent commit has a very long subject (> 80 characters) shorten
 | 
						|
the subject for displaying it in the Gerrit web UI on the change screen.
 | 
						|
This avoids that the 'Parent(s)' cell for the patch set becomes very
 | 
						|
wide.
 | 
						|
 | 
						|
* If subject is shortened for displaying in the UI indicate this by '...'
 | 
						|
+
 | 
						|
If a commit has a very long subject line (> 80 characters) it is
 | 
						|
shortened when it is displayed in the Gerrit Web UI. Indicate to the
 | 
						|
user that the subject was shortened by appending '...' to the shortened
 | 
						|
subject.
 | 
						|
+
 | 
						|
Also the subject is now cropped after a whitespace if possible.
 | 
						|
 | 
						|
* Insert Change-Id for revert commits
 | 
						|
+
 | 
						|
The 'Revert Change' action on a merged change allows to create a new
 | 
						|
change that reverts the merged change. The commit message of the revert
 | 
						|
commit now contains a Change-Id.
 | 
						|
+
 | 
						|
It is convenient if a Change-Id is automatically created and inserted
 | 
						|
into the commit message of the revert commit since it makes rebasing of
 | 
						|
the revert commit easier.
 | 
						|
 | 
						|
* Use more gentle shade of red to highlight outdated dependencies
 | 
						|
 | 
						|
Patch Screens
 | 
						|
^^^^^^^^^^^^^
 | 
						|
 | 
						|
* New patch screen header
 | 
						|
+
 | 
						|
A new patch screen header was added that is displayed above both the
 | 
						|
side-by-side and unified views. The new header contains actual links to
 | 
						|
the available patchsets and shows which patchset is being currently
 | 
						|
displayed.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1192[issue 1192]:
 | 
						|
  Add download links to the unified diff view
 | 
						|
 | 
						|
* Improvement of the side-by-side viewer table
 | 
						|
+
 | 
						|
The line number column for the right side was moved to be on the far
 | 
						|
right of the table, so that the layout now looks like this:
 | 
						|
+
 | 
						|
----
 | 
						|
  1 |  foo       |       bar   | 1
 | 
						|
  2 |  hello     |       hello | 2
 | 
						|
----
 | 
						|
+
 | 
						|
This looks nicer when reading a lot of code, as the line numbers are
 | 
						|
less relevant than the code itself which is now in the center of the
 | 
						|
UI.
 | 
						|
+
 | 
						|
Line numbers are still links to create comment editors, but they
 | 
						|
use a light shade of gray and skip the underline decoration, making
 | 
						|
them less visually distracting.
 | 
						|
+
 | 
						|
Skip lines now use a paler shade of blue and also hide the fact they
 | 
						|
contain anchors, until you hover over them and the anchor shows up.
 | 
						|
+
 | 
						|
The expand before and after are changed to be arrows showing in
 | 
						|
which direction the lines will appear above or below the skip
 | 
						|
line.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=626[issue 626]:
 | 
						|
  Option to display line endings
 | 
						|
+
 | 
						|
There is a new user preference that allows to display Windows EOL/Cr-Lf.
 | 
						|
'\r' is shown in a dotted-line box (similar to how '\r' is displayed in
 | 
						|
GitWeb).
 | 
						|
 | 
						|
* Streamlined review workflow
 | 
						|
+
 | 
						|
A link was added next to the "Reviewed" checkbox that marks the current
 | 
						|
patch as reviewed and goes to the next unreviewed patch.
 | 
						|
 | 
						|
* Add key commands to mark a patch as reviewed
 | 
						|
+
 | 
						|
Add key commands
 | 
						|
+
 | 
						|
. to toggle the reviewed flag for a patch ('m')
 | 
						|
+
 | 
						|
and
 | 
						|
+
 | 
						|
. to mark the patch as reviewed and navigate to the next unreviewed
 | 
						|
patch ('M').
 | 
						|
 | 
						|
* Use download icons instead of the `Download` text links
 | 
						|
 | 
						|
User Dashboard
 | 
						|
^^^^^^^^^^^^^^
 | 
						|
* Support for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-custom-dashboards.html[custom
 | 
						|
  dashboards]
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1407[issue 1407]:
 | 
						|
  Improve highlighting of unreviewed changes in the user's dashboard
 | 
						|
+
 | 
						|
A change will be highlighted as unreviewed if
 | 
						|
+
 | 
						|
. the user is reviewer of the change but hasn't published any change
 | 
						|
  message for the current patch set
 | 
						|
. the user has published a change message for the current patch set,
 | 
						|
  but afterwards the change owner has published a change message on
 | 
						|
  the change
 | 
						|
 | 
						|
* Sort outgoing reviews in the user dashboard by created date
 | 
						|
 | 
						|
* Sort incoming reviews in the user dashboard by updated date
 | 
						|
+
 | 
						|
Sorting the incoming reviews by last updated date, descending, places
 | 
						|
the most recently updated reviews at the top of the list for a user,
 | 
						|
and the oldest stale at the bottom. This may help users to identify
 | 
						|
items to take immediate action on, as they appear closer to the top.
 | 
						|
 | 
						|
Access Rights Screen
 | 
						|
^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
* Display error if modifying access rights for a ref is forbidden
 | 
						|
+
 | 
						|
If a user is owner of at least one ref he is able to edit the access
 | 
						|
rights on a project. If he adds access rights for other refs, these
 | 
						|
access rights were silently ignored on save. Instead of this now an
 | 
						|
error message is displayed to inform the user that he doesn't have
 | 
						|
permissions to do the update for these refs.
 | 
						|
+
 | 
						|
In case of such an error the project access screen stays in the edit
 | 
						|
mode so that the unsaved modifications are not lost. The user may now
 | 
						|
propose the changes to the access rights through code review.
 | 
						|
 | 
						|
* Allow to propose changes to access rights through code review
 | 
						|
+
 | 
						|
Users that are able to upload changes for code review for the
 | 
						|
`refs/meta/config` branch can now propose changes to the project access
 | 
						|
rights through code review directly from the ProjectAccessScreen.
 | 
						|
+
 | 
						|
When editing the project access rights there is a new button
 | 
						|
'Save for Review' which will create a new change for the access
 | 
						|
rights modifications. Project owners are automatically added as
 | 
						|
reviewer to this change. If a project owner agrees to the access rights
 | 
						|
modifications he can simply approve and submit the change.
 | 
						|
 | 
						|
* Show all access rights in WebUI if user can read `refs/meta/config`
 | 
						|
+
 | 
						|
Users who can read the `refs/meta/config` branch, can see all access
 | 
						|
rights by fetching this branch and looking at the `project.config`
 | 
						|
file. Now they can see the same information in the web UI.
 | 
						|
 | 
						|
* Allow extra group suggestions for project owners
 | 
						|
+
 | 
						|
When suggesting groups to a user, only groups that are visible to the
 | 
						|
user are suggested. These are those group that the user is member of.
 | 
						|
For project owners now also groups to which they are not a member are
 | 
						|
suggested when editing the access rights of the project.
 | 
						|
 | 
						|
Other
 | 
						|
^^^^^
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1592[issue 1592]:
 | 
						|
  Ask user to login if change is not found
 | 
						|
+
 | 
						|
Accessing a change URL was failing with 'Application Error - The page
 | 
						|
you requested was not found, or you do not have permission to view this
 | 
						|
page' if the user was not signed in and the change was not visible to
 | 
						|
`Anonymous Users`. Instead Gerrit now asks the user to login and
 | 
						|
afterwards shows the change to the user if it exists and is visible.
 | 
						|
If the change doesn't exist or is not visible, the user will still get
 | 
						|
the NotFoundScreen after sign in.
 | 
						|
 | 
						|
* Link to owner query from user names
 | 
						|
+
 | 
						|
Instead of linking from a user name to the user's dashboards, link to
 | 
						|
a search for changes owned by that user.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#gerrit.reportBugUrl[Allow
 | 
						|
  configuring the `Report Bug` URL]
 | 
						|
+
 | 
						|
Let site administrators direct users to their own ticket queue, as for
 | 
						|
many servers most of the reported bugs are small internal problems like
 | 
						|
asking for a repository to be created or updating group memberships.
 | 
						|
 | 
						|
* On project creation allow choosing the parent project from a popup
 | 
						|
+
 | 
						|
In the create project UI a user can now browse all projects and select
 | 
						|
one as parent for the new project.
 | 
						|
 | 
						|
* Check for open changes on branch deletion
 | 
						|
+
 | 
						|
Check for open changes when deleting a branch in the Gerrit WebUI.
 | 
						|
Delete a branch only if there are no open changes for this branch.
 | 
						|
This makes users aware of open changes when deleting a branch.
 | 
						|
 | 
						|
* Enable ProjectBranchesScreen for the `All-Projects` project
 | 
						|
+
 | 
						|
This allows to see the branches of the `All-Projects` project in the
 | 
						|
web UI.
 | 
						|
 | 
						|
* Show for each project in the project list a link to the repository
 | 
						|
  browser (e.g. GitWeb).
 | 
						|
 | 
						|
* Move the project listing menu items to a new top-level item
 | 
						|
+
 | 
						|
Finding the project listing was very opaque to end users. Nobody
 | 
						|
expected to look under `Admin` and furthermore, anonymous users were
 | 
						|
unable to find that link at all.
 | 
						|
+
 | 
						|
Introduced a new top-level `Projects` menu that has `List` in it to
 | 
						|
take you to the project listing.
 | 
						|
+
 | 
						|
In addition the `Create new project` link from the top of that listing
 | 
						|
was moved to this new menu.
 | 
						|
 | 
						|
* Move the Groups and Plugins menu items to the top level
 | 
						|
+
 | 
						|
The top-level Admin menu is removed as it is now unnecessary after the
 | 
						|
Projects, Groups and Plugins menu items were moved to the top-level.
 | 
						|
 | 
						|
* Move form for group creation to own screen
 | 
						|
+
 | 
						|
Move the form for the group creation from the GroupListScreen to an
 | 
						|
own new CreateGroupScreen and add a link to this screen at the
 | 
						|
beginning of the GroupListScreen. The link to the CreateGroupScreen is
 | 
						|
only visible if the user has the permission to create new groups.
 | 
						|
 | 
						|
* Drop the `Owners` column from the group list screen
 | 
						|
+
 | 
						|
The `Owners` column on the group list screen has been dropped in order
 | 
						|
to link:#performance-issue-on-showing-group-list[speed up the loading
 | 
						|
of the group list screen].
 | 
						|
 | 
						|
* Drop the `Group Type` column from the group list screen
 | 
						|
+
 | 
						|
Since link:#migrate-ldap-groups[the LDAP group type was removed] there
 | 
						|
is no need to display the group type on the group list screen anymore.
 | 
						|
There are only 3 `SYSTEM` groups using well known names, and everything
 | 
						|
else has the type `INTERNAL`.
 | 
						|
 | 
						|
* When adding a user to a group create an account for the user if needed
 | 
						|
+
 | 
						|
Trying to add a user to a group that doesn't have an account fails with
 | 
						|
'... is not a registered user.'. Now adding a user to a group does not
 | 
						|
immediately fail if there is no account for the user, but it tries to
 | 
						|
authenticate the user and if the authentication is successful a user
 | 
						|
account is automatically created, so that the user can be added to the
 | 
						|
group. This only works if LDAP is used as user backend.
 | 
						|
+
 | 
						|
This allows to add users to groups that did not log in into Gerrit
 | 
						|
before.
 | 
						|
 | 
						|
* Differentiate between draft changes and draft comments
 | 
						|
+
 | 
						|
Show the draft changes of the user when he clicks on `My` > `Drafts`.
 | 
						|
The user's draft comments are now available under `My` >
 | 
						|
`Draft Comments`.
 | 
						|
 | 
						|
* Show NotFoundScreen if a user that can't create projects tries to
 | 
						|
  access the ProjectCreationScreen
 | 
						|
 | 
						|
* Add Edit, Reload next to non-editable Full Name field
 | 
						|
+
 | 
						|
If the user database is actually an external system users might need go
 | 
						|
to another server to edit their account data, and then re-import their
 | 
						|
account data by going through a login cycle. This is highly similar to
 | 
						|
LDAP where the directory provides account data and its refreshed every
 | 
						|
time the user visits the `/login/` URL handler.
 | 
						|
+
 | 
						|
The URL for the external system can be configured for the
 | 
						|
link:#custom-extension[`CUSTOM_EXTENSION`] auth type.
 | 
						|
 | 
						|
Access Rights
 | 
						|
~~~~~~~~~~~~~
 | 
						|
 | 
						|
* Restrict rebasing of a change in the web UI to the change owner and
 | 
						|
  the submitter
 | 
						|
 | 
						|
* Add a new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_rebase[
 | 
						|
  access right to permit rebasing changes in the web UI]
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=930[issue 930]:
 | 
						|
  Add new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_abandon[
 | 
						|
  access right for abandoning changes]
 | 
						|
 | 
						|
* Check if user can upload in order to restore
 | 
						|
+
 | 
						|
Restoring a change is similar to uploading a new change. If a branch
 | 
						|
gets closed by removing the access rights to upload new changes it
 | 
						|
shouldn't be possible to restore changes for this branch.
 | 
						|
 | 
						|
[[hide-config]]
 | 
						|
* Make read access to `refs/meta/config` by default exclusive to
 | 
						|
  project owners
 | 
						|
+
 | 
						|
When initializing a new site a set of default access rights is
 | 
						|
configured on the `All-Projects` project. These default access rights
 | 
						|
include read access on `refs/*` for `Anonymous Users` and read access
 | 
						|
on `refs/meta/config` for `Project Owners`. Since the read access on
 | 
						|
`refs/meta/config` for `Project Owners` was not exclusive,
 | 
						|
`Anonymous users` were able to access the `refs/meta/config` branch
 | 
						|
which by default should only be accessible by the project owners.
 | 
						|
 | 
						|
Search
 | 
						|
~~~~~~
 | 
						|
* Offer suggestions for the search operators in the search panel
 | 
						|
+
 | 
						|
There are many search operators and it's difficult to remember all of
 | 
						|
them. Now the search operators are suggested as the user types the
 | 
						|
query.
 | 
						|
 | 
						|
* Support alias `self` in queries
 | 
						|
+
 | 
						|
Writing an expression like "owner:self status:open" will now identify
 | 
						|
changes that the caller owns and are still open. This `self` alias
 | 
						|
is valid in contexts where a user is expected as an argument to a
 | 
						|
query operator.
 | 
						|
 | 
						|
* Add parent(s) revision information to output of query command
 | 
						|
 | 
						|
* Add owner username to output of query command
 | 
						|
 | 
						|
* `/query` API has been link:#query-deprecation[deprecated]
 | 
						|
 | 
						|
SSH
 | 
						|
~~~
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1095[issue 1095]
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-set-account.html[SSH command to manage
 | 
						|
  accounts]
 | 
						|
 | 
						|
* On link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-account.html[account creation] a
 | 
						|
  password for HTTP can be specified.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-set-project.html[SSH command to manage
 | 
						|
  project settings]
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-test-submit-rule.html[SSH command to test
 | 
						|
  submit rules]
 | 
						|
+
 | 
						|
The command creates a fresh Prolog environment and loads a Prolog
 | 
						|
script from stdin. `can_submit` is then queried and the results are
 | 
						|
returned to the user.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ban-commit.html[SSH command to ban
 | 
						|
  commits]
 | 
						|
 | 
						|
[[ssh-alias]]
 | 
						|
* Enable aliases for SSH commands
 | 
						|
+
 | 
						|
Site administrators can define aliases for SSH commands in the
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#ssh-alias[`ssh-alias` section]
 | 
						|
of the Gerrit configuration.
 | 
						|
 | 
						|
* Add submit records to the output of the
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-query.html[query] SSH command:
 | 
						|
+
 | 
						|
Add a command line option to the `query` SSH command to include submit
 | 
						|
records in the output.
 | 
						|
+
 | 
						|
This facilitates the querying of information relating to the submit
 | 
						|
status from the command line and by API clients, including information
 | 
						|
such as whether the change can be submitted as-is, and whether the
 | 
						|
submission criteria for each review label has been met.
 | 
						|
 | 
						|
* Support JSON output format for the
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ls-projects.html[ls-projects] SSH command
 | 
						|
 | 
						|
* Support creation of multiple branches in
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-project.html[create-project] SSH
 | 
						|
  command
 | 
						|
+
 | 
						|
In case if a project has some kind of waterfall automerging
 | 
						|
a->b->c it is convenient to create all these branches at the
 | 
						|
project creation time.
 | 
						|
+
 | 
						|
e.g. '.. gerrit create-project -b master -b foo -b bar ...'
 | 
						|
 | 
						|
* Add verbose output option to
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-ls-groups.html[ls-groups] command
 | 
						|
+
 | 
						|
The verbose mode enabled by the new option makes the ls-groups
 | 
						|
command output a tab-separated table containing all available
 | 
						|
information about each group (though not its members).
 | 
						|
 | 
						|
Documentation
 | 
						|
~~~~~~~~~~~~~
 | 
						|
 | 
						|
Commands
 | 
						|
^^^^^^^^
 | 
						|
 | 
						|
* document for the link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-create-group.html[`create-group`]
 | 
						|
  command that for unknown users an account is automatically created if
 | 
						|
  the LDAP authentication succeeds
 | 
						|
 | 
						|
* Update documentation and help text for the
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-review.html[`review`] SSH command
 | 
						|
+
 | 
						|
The review command can be applied to multiple changes, but the
 | 
						|
help text was written in singular tense.
 | 
						|
+
 | 
						|
Add a paragraph in the documentation explaining that the
 | 
						|
`--force-message` option will not be effective if the `review` command
 | 
						|
fails because the user is not permitted to change the label.
 | 
						|
 | 
						|
* Clarify that `init --batch` doesn't drop old database objects
 | 
						|
 | 
						|
* Update the list of unsupported slave commands
 | 
						|
 | 
						|
* Fix link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/cmd-stream-events.html[`stream-events`]
 | 
						|
  documentation
 | 
						|
+
 | 
						|
Some attributes contained in the events were not described, for a few
 | 
						|
others the name was given in a wrong case.
 | 
						|
 | 
						|
* Fix and complete synopsis of commands
 | 
						|
 | 
						|
Access Control
 | 
						|
^^^^^^^^^^^^^^
 | 
						|
 | 
						|
* Clarify the ref format for
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#category_push_merge[`Push
 | 
						|
  Merge Commit`]
 | 
						|
+
 | 
						|
Elaborate on the required format of the ref used for `Push Merge Commit`
 | 
						|
access right entries to avoid user confusion when granting access to
 | 
						|
`refs/heads/*` still doesn't allow them to push any merge commits.
 | 
						|
 | 
						|
* Document the
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/access-control.html#capability_emailReviewers[
 | 
						|
  `emailReviewers`] capability
 | 
						|
 | 
						|
Error
 | 
						|
^^^^^
 | 
						|
* Improve documentation of link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/error-change-closed.html[
 | 
						|
  `change closed` error]
 | 
						|
+
 | 
						|
The `change closed` error can also occur when trying to submit a
 | 
						|
review label with the SSH review command onto a change that has
 | 
						|
been closed (submitted and merged, or abandoned) or onto a patchset
 | 
						|
that has been replaced by a newer patchset.
 | 
						|
 | 
						|
* Correct documentation of `invalid author` and `invalid committer`
 | 
						|
  errors
 | 
						|
+
 | 
						|
The error messages `you are not committer ...` and `you are not
 | 
						|
author ...` were replaced with `invalid author` and `invalid
 | 
						|
committer`.
 | 
						|
 | 
						|
* Describe that the `prohibited by Gerrit` error is returned if pushing
 | 
						|
  a tag fails because the tagger is somebody else and the `Forge
 | 
						|
  Committer` access right is not assigned.
 | 
						|
 | 
						|
Dev
 | 
						|
^^^
 | 
						|
 | 
						|
* Update push URL in link:../SUBMITTING_PATCHES[SUBMITTING_PATCHES]
 | 
						|
+
 | 
						|
Pushes are now accepted at the same address as clone/fetch/pull.
 | 
						|
 | 
						|
* Update link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-contributing.html[contributor
 | 
						|
  document]
 | 
						|
+
 | 
						|
We now prefer to use Guava (previously known as Google Collections).
 | 
						|
 | 
						|
* Fixed broken link to source code
 | 
						|
+
 | 
						|
Updated the documentation source code links to point to:
 | 
						|
http://code.google.com/p/gerrit/source/checkout
 | 
						|
 | 
						|
* State link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-eclipse.html#known-problems[known issues]
 | 
						|
  when debugging Gerrit with Eclipse
 | 
						|
 | 
						|
* Improved the section on
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-eclipse.html#hosted-mode[hosted mode
 | 
						|
  debugging]
 | 
						|
+
 | 
						|
The existing section on hosted mode debugging left out a couple of
 | 
						|
steps, and the requirement to use `DEVELOPMENT_BECOME_ANY_ACCOUNT`
 | 
						|
instead of `OpenID` was not mentioned anywhere.
 | 
						|
 | 
						|
* Add a link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-release.html[release preparation
 | 
						|
  document]
 | 
						|
+
 | 
						|
Document what it takes to make a Gerrit stable or stable-fix release,
 | 
						|
and how to release Gerrit subprojects.
 | 
						|
 | 
						|
Other
 | 
						|
^^^^^
 | 
						|
* Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/prolog-cookbook.html[Cookbook for Prolog
 | 
						|
  submit rules]
 | 
						|
+
 | 
						|
A new document providing a step by step introduction into implementing
 | 
						|
specific submit policies using Prolog based submit rules was added.
 | 
						|
 | 
						|
* Describe link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/refs-notes-review.html[
 | 
						|
  `refs/notes/review` and its contents]
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-mail.html[Document `RebasedPatchSet.vm`
 | 
						|
  and `Reverted.vm` mail templates]
 | 
						|
 | 
						|
* Specify output file for curl commands in documentation
 | 
						|
+
 | 
						|
For downloading the `commit-msg` hook and the `gerrit-cherry-pick`
 | 
						|
script users can either use scp or curl. Specify the output file for
 | 
						|
each curl command so that the result is equal to the matching scp
 | 
						|
command.
 | 
						|
 | 
						|
* Document that user must be in repository root to install `commit-msg`
 | 
						|
  hook
 | 
						|
 | 
						|
* Add some clarifications to the
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/install-quick.html[quick installation guide]
 | 
						|
 | 
						|
* Add missing documentation about
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#hooks[hook configuration]
 | 
						|
+
 | 
						|
Add documentation of hook config for `change-restored`, `ref-updated`
 | 
						|
and `cla-signed` hooks.
 | 
						|
 | 
						|
* Document that the commit message hook file should be executable
 | 
						|
 | 
						|
* Mention that also MySQL supports replication, not just Postgres
 | 
						|
 | 
						|
* Make sorting of release notes consistent so that the release notes
 | 
						|
  for the newest release is always on top
 | 
						|
 | 
						|
* Various corrections
 | 
						|
+
 | 
						|
Correct typos, spelling mistakes, and grammatical errors.
 | 
						|
 | 
						|
Dev
 | 
						|
~~~
 | 
						|
* Add link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/dev-release.html#plugin-api[script for
 | 
						|
  releasing plugin API jars]
 | 
						|
 | 
						|
* Pushes are now accepted at the same address as clone/fetch/pull
 | 
						|
+
 | 
						|
To submit patches commits can be pushed to
 | 
						|
https://gerrit.googlesource.com/gerrit
 | 
						|
 | 
						|
* Add `-Pchrome`, `-Pwebkit`, `-Pfirefox` aliases for building
 | 
						|
+
 | 
						|
This makes it easier to build for the browser you want to
 | 
						|
test on, rather than remembering what its GWT name is.
 | 
						|
 | 
						|
* Disable assertions for KeyCommandSet when running in gwtdebug mode
 | 
						|
+
 | 
						|
The assertions in the KeyCommandSet class cause exceptions when a
 | 
						|
KeyCommand is registered several times.
 | 
						|
 | 
						|
* Add the run profiles to the favorites menu
 | 
						|
 | 
						|
* Add Intellij IDEA files to ignore list
 | 
						|
 | 
						|
* Move local Maven repository to Google Cloud Storage
 | 
						|
 | 
						|
* Make sure asciidoc uses unix line endings in generated HTML.
 | 
						|
+
 | 
						|
Use an explicit asciidoc attribute to make sure the produced HTML will
 | 
						|
always contain unix line endings.  This will help in producing build
 | 
						|
results that are better comparable by size.
 | 
						|
 | 
						|
* Remove timestamp from all `org.eclipse.core.resources.prefs` files
 | 
						|
+
 | 
						|
Eclipse overwrites these files when we import projects using m2e.
 | 
						|
Eclipse 3 writes a timestamp at the top of these files making the Git
 | 
						|
working tree dirty.  Eclipse 4 (Juno) still overwrites these files but
 | 
						|
doesn't write the timestamp.  This should help to keep the working tree
 | 
						|
clean.  However, since the timestamp is currently present in these
 | 
						|
files, Eclispe 4 would still make them dirty by overwriting and
 | 
						|
effectively removing the timestamp.
 | 
						|
+
 | 
						|
This change removes the timestamp from these files. This helps those
 | 
						|
using Eclipse 4 and doesn't make it worse for those still using Eclispe
 | 
						|
3.
 | 
						|
 | 
						|
* Add Maven profile to skip build of plugin modules
 | 
						|
+
 | 
						|
Building the plugin modules ('Plugin API' and 'Plugin Archetype') may
 | 
						|
take a significant amount of time (since many jars are downloaded).
 | 
						|
During development it is not needed to build the plugin modules. A new
 | 
						|
Maven profile was added that skips the build of the plugin modules,
 | 
						|
so that developers have a faster turnaround. This profile is called
 | 
						|
`no-plugins` and it's active by default. To include the plugin modules
 | 
						|
into the build activate the `all` profile:
 | 
						|
+
 | 
						|
----
 | 
						|
  mvn clean package -P all
 | 
						|
----
 | 
						|
+
 | 
						|
The script to make release builds has been adapted to activate the
 | 
						|
`all` profile so that the plugin modules are always built for release
 | 
						|
builds.
 | 
						|
 | 
						|
Mail
 | 
						|
~~~~
 | 
						|
 | 
						|
* Add unified diff to newchange mail template
 | 
						|
+
 | 
						|
Add `$email.UnifiedDiff` as new macro to the `NewChange.vm` mail
 | 
						|
template. This macro is expanded to a unified diff of the patch.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#sendemail.includeDiff[
 | 
						|
  sendemail.includeDiff]: Enable `$email.UnifiedDiff` in `NewChange.vm`
 | 
						|
+
 | 
						|
Instead of making site administrators hack the email template, allow
 | 
						|
admins to enable the diff feature by setting a configuration variable
 | 
						|
in `gerrit.config`.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#sendemail.maximumDiffSize[
 | 
						|
  sendemail.maximumDiffSize]: Limit the size of diffs sent by email
 | 
						|
+
 | 
						|
If a unified diff included in an email will exceed the limit configured
 | 
						|
by the system administrator, only the affected file paths are listed in
 | 
						|
the email instead. This gives interested parties some context on the
 | 
						|
size and scope of the change, without killing their inbox.
 | 
						|
 | 
						|
* Catch all exceptions when emailing change update
 | 
						|
 | 
						|
* Allow unique from address generation
 | 
						|
+
 | 
						|
Allow the from email address to be a ParameterizedString that handles
 | 
						|
the `${userHash}` variable. The value of the variable is the md5 hash
 | 
						|
of the user name. This allows unique generation of email addresses, so
 | 
						|
GMAIL threads names of users in conversations correctly. For example,
 | 
						|
the from pattern for gerrit-review defined in the Gerrit configuration
 | 
						|
looks like this:
 | 
						|
+
 | 
						|
----
 | 
						|
  [sendemail]
 | 
						|
    from = ${user} <noreply-gerritcodereview+${userHash}@google.com>
 | 
						|
----
 | 
						|
 | 
						|
* Show new change URLs in the body of the new change email
 | 
						|
+
 | 
						|
Some email clients hide the signature section of an email
 | 
						|
automatically.  If there are no reviewers listed on a new change,
 | 
						|
such as when a change is pushed over HTTP and a notification is
 | 
						|
automatically sent out to any subscribed watchers, the URL was
 | 
						|
hidden inside of the signature and not readily available.
 | 
						|
+
 | 
						|
Show the URL right away in the body.
 | 
						|
 | 
						|
Miscellaneous
 | 
						|
~~~~~~~~~~~~~
 | 
						|
* Back in-memory caches with Guava, disk caches with H2
 | 
						|
+
 | 
						|
Instead of using Ehcache for in-memory caches, use Guava. The Guava
 | 
						|
cache code has been more completely tested by Google in high load
 | 
						|
production environments, and it tends to have fewer bugs. It enables
 | 
						|
caches to be built at any time, rather than only at server startup.
 | 
						|
+
 | 
						|
By creating a Guava cache as soon as it is declared, rather than
 | 
						|
during the LifecycleListener.start() for the CachePool, we can promise
 | 
						|
any downstream consumer of the cache that the cache is ready to
 | 
						|
execute requests the moment it is supplied by Guice. This fixes a
 | 
						|
startup ordering problem in the GroupCache and the ProjectCache, where
 | 
						|
code wants to use one of these caches during startup to resolve a
 | 
						|
group or project by name.
 | 
						|
+
 | 
						|
Tracking the Guava backend caches with a DynamicMap makes it possible
 | 
						|
for plugins to define their own in-memory caches using CacheModule's
 | 
						|
cache() function to declare the cache. It allows the core server to
 | 
						|
make the cache available to administrators over SSH with the gerrit
 | 
						|
show-caches and gerrit `flush-caches` commands.
 | 
						|
+
 | 
						|
Persistent caches store in a private H2 database per cache, with a
 | 
						|
simple one-table schema that stores each entry in a table row as a
 | 
						|
pair of serialized objects (key and value). Database reads are gated
 | 
						|
by a BloomFilter, to reduce the number of calls made to H2 during
 | 
						|
cache misses. In theory less than 3% of cache misses will reach H2 and
 | 
						|
find nothing. Stores happen on a background thread quickly after the
 | 
						|
put is made to the cache, reducing the risk that a diff or web_session
 | 
						|
record is lost during an ungraceful shutdown.
 | 
						|
+
 | 
						|
Cache databases are capped around 128M worth of stored data by running
 | 
						|
a prune cycle each day at 1 AM local server time. Records are removed
 | 
						|
from the database by ordering on the last access time, where last
 | 
						|
accessed is the last time the record was moved from disk to memory.
 | 
						|
 | 
						|
* Add OpenID SSO support.
 | 
						|
+
 | 
						|
Setting `OPENID_SSO` for
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.type[`auth.type`] in the
 | 
						|
`gerrit.config` will allow the admin to specify an SSO entry point URL
 | 
						|
so that users clicking on "Sign In" are sent directly to that URL.
 | 
						|
 | 
						|
* Git over HTTP BasicAuth against Gerrit basic auth.
 | 
						|
+
 | 
						|
Allows the configuration of native Gerrit username/password
 | 
						|
authentication scheme used for Git over HTTP BasicAuth, as alternative
 | 
						|
of the default DigestAuth scheme against the random generated password
 | 
						|
on Gerrit DB.
 | 
						|
+
 | 
						|
Example setting for link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.type[
 | 
						|
`auth.type`] and link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#auth.gitBasicAuth[
 | 
						|
`auth.gitBasicAuth`]:
 | 
						|
+
 | 
						|
----
 | 
						|
  [auth]
 | 
						|
    type = LDAP
 | 
						|
    gitBasicAuth = true
 | 
						|
----
 | 
						|
+
 | 
						|
With this configuration Git over HTTP protocol will be authenticated
 | 
						|
using `HTTP-BasicAuth` and credentials checked on LDAP.
 | 
						|
 | 
						|
* Abstract group systems into GroupBackend interface
 | 
						|
+
 | 
						|
Group backends are supposed to use unique prefixes to isolate the
 | 
						|
namespaces. E.g. the group backend for LDAP is using `ldap/` as prefix
 | 
						|
for the group names.
 | 
						|
+
 | 
						|
This means that to refer to an LDAP group in the WebUI the group name
 | 
						|
needs to be prefixed with the `ldap/` string. E.g. if there is a group
 | 
						|
in LDAP which is called "Developers", Gerrit will suggest this group
 | 
						|
when the user types `ldap/De`.
 | 
						|
+
 | 
						|
WARNING: External groups are not anymore allowed to be members of
 | 
						|
internal groups.
 | 
						|
 | 
						|
[[migrate-ldap-groups]]
 | 
						|
* Migrate existing internal LDAP groups
 | 
						|
+
 | 
						|
Previously, LDAP groups were mirrored in the AccountGroup table and
 | 
						|
given an Id and UUID the same as internal groups. Update these groups
 | 
						|
to be backed by only a GroupReference, with a special "ldap:" UUID
 | 
						|
prefix. Migrate all existing references to the UUID in ownerGroupUUID
 | 
						|
and any `project.config`.
 | 
						|
+
 | 
						|
This made the LDAP group type obsolete and it was removed.
 | 
						|
 | 
						|
* link:https://code.google.com/p/gerrit/issues/detail?id=548[issue 548]:
 | 
						|
  Make commands to download patch sets
 | 
						|
  link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#download.command[configurable]
 | 
						|
+
 | 
						|
For patch sets on the ChangeScreen different commands for downloading
 | 
						|
the patch sets are offered. For some installations not all commands are
 | 
						|
needed. Allow Gerrit administrators to configure which download
 | 
						|
commands should be offered.
 | 
						|
 | 
						|
* Add more link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#theme[theme color
 | 
						|
  options]
 | 
						|
+
 | 
						|
** Add a theme option to change outdated background color
 | 
						|
** Add odd/even row background color for tables such as list of open
 | 
						|
reviews.  This makes them more visible without clicking on them.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/user-notify.html[Add `notify` section in
 | 
						|
  `project.config`]
 | 
						|
+
 | 
						|
The notify section allows project owners to include emails to users
 | 
						|
directly from `project.config`. This removes the need to create fake
 | 
						|
user accounts to always BCC a group mailing list.
 | 
						|
 | 
						|
* Include the contributor agreements in the `project.config` and
 | 
						|
  migrate contributor agreements to `All-Projects`
 | 
						|
+
 | 
						|
Update the parsing of `project.config` to support the contributor
 | 
						|
agreements.
 | 
						|
+
 | 
						|
Add a new schema to move the ContributorAgreement, AccountAgreement,
 | 
						|
and AccountGroupAgreement information into the `All-Projects`
 | 
						|
`project.config`.
 | 
						|
 | 
						|
* Add `sameGroupVisibility` to `All-Projects` `project.config`
 | 
						|
+
 | 
						|
The `sameGroupVisiblity` is needed to restrict the visibility of
 | 
						|
accounts when `accountVisibility` is `SAME_GROUP`. Namely, this is a
 | 
						|
way to make sure the `autoVerify` group in a `contributor-agreements`
 | 
						|
section is never suggested.
 | 
						|
 | 
						|
* Add change topic in hook arguments
 | 
						|
+
 | 
						|
It was not possible for hook scripts to include topic-specific
 | 
						|
behavior because the topic name was not included in the arguments.
 | 
						|
 | 
						|
* Add `--is-draft` argument on `patchset-created` hook
 | 
						|
+
 | 
						|
The `--is-draft` argument will be passed with either `true` if
 | 
						|
the patchset is a draft, or `false` otherwise.
 | 
						|
+
 | 
						|
This can be used by hooks that need to behave differently if the
 | 
						|
change is a draft.
 | 
						|
 | 
						|
* Log sign in failures on info level
 | 
						|
+
 | 
						|
If for a user signing in into the Gerrit web UI fails, this can have
 | 
						|
many reasons, e.g. username is wrong, password is wrong, user is marked
 | 
						|
as inactive, user is locked in the user backend etc. In all cases the
 | 
						|
user just gets a generic error message 'Incorrect username or
 | 
						|
password.'. Gerrit administrators had trouble to find the exact reason
 | 
						|
for the sign in problem because the corresponding AccountException was
 | 
						|
not logged.
 | 
						|
 | 
						|
* Do not log 'Object too large' as error with full stacktrace
 | 
						|
+
 | 
						|
If a user pushes an object which is larger than the configured
 | 
						|
`receive.maxObjectSizeLimit` parameter, the push is rejected with an
 | 
						|
'Object too large' error. In addition an error log entry with the full
 | 
						|
stacktrace was written into the error log.
 | 
						|
+
 | 
						|
This is not really a server error, but just a user doing something that
 | 
						|
is not allowed, and thus it should not be logged as error. For a Gerrit
 | 
						|
administrator it might still be interesting how often the limit is hit.
 | 
						|
This is why it makes sense to still log this on info level.
 | 
						|
+
 | 
						|
For the user pushing a too large object we now do not print the
 | 
						|
'fatal: Unpack error, check server log' message anymore, but only the
 | 
						|
'Object too large' error message.
 | 
						|
 | 
						|
* Add better explanations to rejection messages
 | 
						|
+
 | 
						|
Provide information to the user why a certain push was rejected.
 | 
						|
 | 
						|
* Automatic schema upgrade on Gerrit startup
 | 
						|
+
 | 
						|
In case when Gerrit administrator(s) don't have a direct access to the
 | 
						|
file system where the review site is located it gets difficult to
 | 
						|
perform a schema upgrade (run the init program). For such cases it is
 | 
						|
convenient if Gerrit performs schema upgrade automatically on its
 | 
						|
startup.
 | 
						|
+
 | 
						|
Since this is a potentially dangerous operation, by default it will not
 | 
						|
be performed. The configuration parameter
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#site.upgradeSchemaOnStartup[
 | 
						|
site.upgradeSchemaOnStartup] is used to switch on automatic schema
 | 
						|
upgrade.
 | 
						|
 | 
						|
* Shorten column names that are longer than 30 characters
 | 
						|
+
 | 
						|
Some databases can't deal with column names that are longer than 30
 | 
						|
characters. Examples are MaxDB and
 | 
						|
link:http://groups.google.com/group/repo-discuss/browse_thread/thread/ecb713d42c04ae8a/cc963525d8247a17?lnk=gst#cc963525d8247a17[Oracle].
 | 
						|
+
 | 
						|
Gerrit had two column names in the `accounts` table that exceeded the
 | 
						|
30 characters: `displayPatchSetsInReverseOrder`,
 | 
						|
`displayPersonNameInReviewCategory`
 | 
						|
+
 | 
						|
These 2 columns were renamed so that their names fit within the 30
 | 
						|
character range.
 | 
						|
 | 
						|
* Increase the maximum length for tracking ID's to 32 characters
 | 
						|
+
 | 
						|
So far tracking ID's had a maximum length of only 20 characters.
 | 
						|
 | 
						|
* Set `GERRIT_SITE` in Gerrit hooks as environment variable
 | 
						|
+
 | 
						|
Allows development of hooks parameterized on Gerrit location. This can
 | 
						|
be useful to allow hooks to load the Gerrit configuration when needed
 | 
						|
(from `$GERRIT_SITE`) or even store their additional config files under
 | 
						|
`$GERRIT_SITE/etc` and retrieve them at startup.
 | 
						|
 | 
						|
* Add an exponentially rolling garbage collection script
 | 
						|
+
 | 
						|
`git-exproll.sh` is a git garbage collection script aimed specifically
 | 
						|
at reducing excessive garbage collection and particularly large
 | 
						|
packfile churn for Gerrit installations.
 | 
						|
+
 | 
						|
Excessive garbage collection on "dormant" repos is wasteful of both CPU
 | 
						|
and disk IO.  Large packfile churn can lead to heavy RAM and FS usage
 | 
						|
on Gerrit servers when the Gerrit process continues to hold open the
 | 
						|
old delete packfiles.  This situation is most detrimental when jgit is
 | 
						|
configured with large caching parameters.  Aside from these downsides,
 | 
						|
running git gc often can be very beneficial to performance on servers.
 | 
						|
This script attempts to implement a git gc policy which avoids the
 | 
						|
downsides mentioned above so that git gc can be comfortably run very
 | 
						|
regularly.
 | 
						|
+
 | 
						|
`git-exproll.sh` uses keep files to manage which files will get
 | 
						|
repacked.  It also uses timestamps on the repos to detect dormant repos
 | 
						|
to avoid repacking them at all.  The primary packfile objective is to
 | 
						|
keep around a series of packfiles with sizes spaced out exponentially
 | 
						|
from each other, and to roll smaller packfiles into larger ones once
 | 
						|
the smaller ones have grown.  This strategy attempts to balance disk
 | 
						|
space usage with avoiding rewriting large packfiles most of the time.
 | 
						|
+
 | 
						|
The exponential packing objective above does not save a large amount of
 | 
						|
time or CPU, but it does prevent the packfile churn.  Depending on repo
 | 
						|
usage, however the dormant repo detection and avoidance can result in a
 | 
						|
very large time savings.
 | 
						|
 | 
						|
* Automatically flush persistent H2 cache if the existing cache entries
 | 
						|
  are incompatible with the cache entry class and thus can't be
 | 
						|
  deserialized
 | 
						|
 | 
						|
* Unpack JARs for running servers in `$site_path/tmp`
 | 
						|
+
 | 
						|
Instead of unpacking a running server into `~/.gerritcodereview/tmp`
 | 
						|
only use that location for commands like init where there is no active
 | 
						|
site. From gerrit.sh always use `$site_path/tmp` for the JARs to
 | 
						|
isolate servers that run on the same host under the same UNIX user
 | 
						|
account.
 | 
						|
 | 
						|
[[custom-extension]]
 | 
						|
* Allow for the `CUSTOM_EXTENSION` `auth.type` to configure URLs for
 | 
						|
  editing the user name and obtaining an HTTP password
 | 
						|
+
 | 
						|
Allow `CUSTOM_EXTENSION` auth type to supply by `auth.editFullNameUrl`
 | 
						|
a URL in the web UI that links users to the other account system,
 | 
						|
where they can edit their name, and then use another reload URL to
 | 
						|
cycle through the `/login/` step and refresh the data cached by Gerrit.
 | 
						|
+
 | 
						|
Allow `CUSTOM_EXTENSION` auth type to supply by `auth.httpPasswordUrl`
 | 
						|
a URL in the web UI that allows users to obtain an HTTP password.
 | 
						|
+
 | 
						|
Like the rest of the `CUSTOM_EXTENSION` stuff, this is hack that will
 | 
						|
eventually go away when there is proper support for authentication
 | 
						|
plugins.
 | 
						|
 | 
						|
Performance
 | 
						|
~~~~~~~~~~~
 | 
						|
[[performance-issue-on-showing-group-list]]
 | 
						|
* Fix performance issues on showing the list of groups in the Gerrit
 | 
						|
  WebUI
 | 
						|
+
 | 
						|
Loading `Admin` > `Groups` on large servers was very slow. The entire
 | 
						|
group membership database was downloaded to the browser when showing
 | 
						|
just the list of groups.
 | 
						|
+
 | 
						|
Now the amount of data that needs to be downloaded to the browser is
 | 
						|
reduced by using the more lightweight `AccountGroup` type instead of
 | 
						|
the `GroupDetail` type when showing the groups in a list format. As a
 | 
						|
consequence the `Owners` column that showed the name of the owner group
 | 
						|
had been dropped.
 | 
						|
 | 
						|
* Add LDAP-cache to minimize number of queries when unnesting groups
 | 
						|
+
 | 
						|
A new cache named "ldap_groups_byinclude" is introduced to help lessen
 | 
						|
the number of queries needed to resolve nested LDAP-groups.
 | 
						|
 | 
						|
* Add index for accessing change messages by patch set
 | 
						|
+
 | 
						|
This improves the performance of loading the dashboards.
 | 
						|
 | 
						|
* Add a fast path to avoid checking every commit on push
 | 
						|
+
 | 
						|
If a user can forge author, committer and gerrit server identity, and
 | 
						|
can upload merges, don't bother checking the commit history of what is
 | 
						|
being uploaded. This can save time on servers that are trying to accept
 | 
						|
a large project import using the push permission.
 | 
						|
 | 
						|
* Improve performance of `ReceiveCommits` by reducing `RevWalk` load
 | 
						|
+
 | 
						|
JGit RevWalk does not perform well when a large number of objects are
 | 
						|
added to the start set by `markStart` or `markUninteresting`. Avoid
 | 
						|
putting existing `refs/changes/` or `refs/tags/` into the `RevWalk` and
 | 
						|
instead use only the `refs/heads` namespace and the name of the branch
 | 
						|
used in the `refs/for/` push line.
 | 
						|
+
 | 
						|
Catch existing changes by looking for their exact commit SHA-1, rather
 | 
						|
than complete ancestry. This should have roughly the same outcome for
 | 
						|
anyone pushing a new commit on top of an existing open change, but
 | 
						|
with lower computational cost at the server.
 | 
						|
 | 
						|
* Lookup changes in parallel during `ReceiveCommits`
 | 
						|
+
 | 
						|
If the database has high query latency, the loop that locates existing
 | 
						|
changes on the destination branch given Change-Id can be slow. Start
 | 
						|
all of the queries as commits are discovered, but don't block on
 | 
						|
results until all queries were started.
 | 
						|
+
 | 
						|
If the database can build the `ResultSet` in the background, this may
 | 
						|
hide some of the query latency by allowing the queries to overlap when
 | 
						|
more than one lookup must be performed for a push.
 | 
						|
 | 
						|
* Perform change update on multiple threads
 | 
						|
+
 | 
						|
When multiple changes need to be created or updated for a single push
 | 
						|
operation they are now inserted into the database by parallel threads,
 | 
						|
up to the maximum allowed thread count. The current thread is used
 | 
						|
when the thread pool is already fully in use, falling back to the
 | 
						|
prior behavior where each concurrent push operation can do its own
 | 
						|
concurrent database update. The thread pool exists to reduce latency
 | 
						|
so long as there are sufficient threads available.
 | 
						|
+
 | 
						|
This helps push times on databases that are high latency, such as
 | 
						|
database servers that are running on a different machine from the
 | 
						|
Gerrit server itself, e.g. gerrit.googlesource.com.
 | 
						|
+
 | 
						|
The new thread pool is
 | 
						|
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#receive.changeUpdateThreads[
 | 
						|
disabled by default], limiting the overhead to servers that have good
 | 
						|
latency with their database, such as using in-process H2 database, or
 | 
						|
a MySQL or PostgreSQL on the same host.
 | 
						|
 | 
						|
* Use `BatchRefUpdate` to execute reference changes
 | 
						|
+
 | 
						|
Some storage backends for JGit are able to update multiple references
 | 
						|
in a single pass efficiently. Take advantage of this by pushing
 | 
						|
any normal reference updates (such as direct push or branch create)
 | 
						|
into a single `BatchRefUpdate` object.
 | 
						|
 | 
						|
* Assume labels are correct in ListChanges
 | 
						|
+
 | 
						|
To reduce end-user latency when displaying changes in a search result
 | 
						|
or user dashboard, assume the labels are accurate in the database at
 | 
						|
display time and don't recompute the access privileges of a reviewer.
 | 
						|
 | 
						|
* Notify the cache that the git_tags was modified
 | 
						|
+
 | 
						|
The tag cache was updated in-place, which prevented the H2 based
 | 
						|
storage from writing out the updated tag information. This meant
 | 
						|
servers almost never had the right data stored on disk and had to
 | 
						|
recompute it at startup.
 | 
						|
+
 | 
						|
Anytime the value is now modified in place, put it back into the
 | 
						|
cache so it can be saved for use on the next startup.
 | 
						|
 | 
						|
* Special case hiding `refs/meta/config` from Git clients
 | 
						|
+
 | 
						|
VisibleRefFilter requires a lot of server CPU to accurately provide
 | 
						|
the correct listing to clients when they cannot read `refs/*`.
 | 
						|
+
 | 
						|
Since the default configuration is now to link:#hide-config[
 | 
						|
hide `refs/meta/config`], use a special case in VisibleRefFilter that
 | 
						|
permits showing every reference except `refs/meta/config` if a user can
 | 
						|
read every other reference in the repository.
 | 
						|
 | 
						|
* Avoid second remote call to lookup approvals when loading change
 | 
						|
  results
 | 
						|
+
 | 
						|
By using the new link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/rest-api-changes.html[`/changes/`]
 | 
						|
REST endpoint the web UI client now obtains the label information
 | 
						|
during the query and avoids a second round trip to lookup the current
 | 
						|
approvals for each displayed change. For most users this should improve
 | 
						|
the way the page renders. The verified and code review columns will be
 | 
						|
populated before the table is made visible, preventing the layout from
 | 
						|
"jumping" the way the old UI did when the 2nd RPC finally finished and
 | 
						|
supplied the label data.
 | 
						|
 | 
						|
* Load patch set approvals in parallel
 | 
						|
+
 | 
						|
ResultSet is a future-like interface, the database system is free to
 | 
						|
execute each result set asynchronously in the background if it
 | 
						|
supports that. gwtorm's default SQL backend always runs queries
 | 
						|
immediately and then returns a ListResultSet, so for most installs this
 | 
						|
has no real impact in ordering.
 | 
						|
+
 | 
						|
For the system that runs gerrit-review, each query has a high cost in
 | 
						|
network latency, the system treats ResultSet as a future promise to
 | 
						|
supply the matching rows. Getting all of the necessary ResultSets up
 | 
						|
front allows the database to send all requests to the backend as early
 | 
						|
as possible, allowing the network latency to overlap.
 | 
						|
 | 
						|
Upgrades
 | 
						|
--------
 | 
						|
* Update Gson to 2.1
 | 
						|
* Update GWT to 2.4.0
 | 
						|
* Update JGit to 2.0.0.201206130900-r.23-gb3dbf19
 | 
						|
 | 
						|
* Use gwtexpui 1.2.6
 | 
						|
+
 | 
						|
** Hide superfluous status text from clippy flash widget
 | 
						|
** Fix disappearance of text in CopyableLabel when clicking on it
 | 
						|
 | 
						|
* Update Guava to 12.0.1
 | 
						|
+
 | 
						|
This fixes a performance problem with LoadingCache where the cache's
 | 
						|
inner table did not dynamically resize to handle a larger number
 | 
						|
of cached items, causing O(N) lookup performance for most objects.
 | 
						|
 | 
						|
Bug Fixes
 | 
						|
---------
 | 
						|
 | 
						|
Security
 | 
						|
~~~~~~~~
 | 
						|
* Ensure that only administrators can change the global capabilities
 | 
						|
+
 | 
						|
Only Gerrit server administrators (members of the groups that have
 | 
						|
the `administrateServer` capability) should be able to edit the
 | 
						|
global capabilities because being able to edit the global capabilities
 | 
						|
means being able to assign the `administrateServer` capability.
 | 
						|
+
 | 
						|
Because of this on the `All-Projects` project it is disallowed to assign
 | 
						|
+
 | 
						|
. the `owner` access rights on `refs/*`
 | 
						|
+
 | 
						|
Project owners (members of groups to which the `owner` access right
 | 
						|
is assigned) are able to edit the access control list of the projects
 | 
						|
they own. Hence being owner of the `All-Projects` project would allow
 | 
						|
to edit the global capabilities and assign the `administrateServer`
 | 
						|
capability without being Gerrit administrator.
 | 
						|
+
 | 
						|
In earlier Gerrit versions (2.1.x) it was already implemented like
 | 
						|
this but the corresponding checks got lost.
 | 
						|
+
 | 
						|
. the 'push' access right on `refs/meta/config`
 | 
						|
+
 | 
						|
Being able to push configuration changes to the `All-Projects` project
 | 
						|
allows to edit the global capabilities and hence a user with this
 | 
						|
access right could assign the `administrateServer` capability without
 | 
						|
being Gerrit administrator.
 | 
						|
+
 | 
						|
From the Gerrit WebUI (ProjectAccessScreen) it is not possible anymore
 | 
						|
to assign on the `All-Projects` project the `owner` access right on
 | 
						|
`refs/*` and the `push` access right on `refs/meta/config`.
 | 
						|
+
 | 
						|
In addition it is ensured that an `owner` access right that is assigned
 | 
						|
for `refs/*` on the `All-Projects` project has no effect and that only
 | 
						|
Gerrit administrators with the `push` access right can push
 | 
						|
configuration changes to the `All-Projects` project.
 | 
						|
+
 | 
						|
It is still possible to assign both access rights (`owner` on `refs/*`
 | 
						|
and `push` on `refs/meta/config`) on the `All-Projects` project by directly
 | 
						|
editing its `project.config` file and pushing to `refs/meta/config`.
 | 
						|
To fix this it would be needed to reject assigning these access rights
 | 
						|
on the `All-Projects` project as invalid configuration, however doing this
 | 
						|
would mean to break existing configurations of the `All-Projects` project
 | 
						|
that assign these access rights. At the moment there is no migration
 | 
						|
framework in place that would allow to migrate `project.config` files.
 | 
						|
Hence this check is currently not done and these access rights in this
 | 
						|
case have simply no effect.
 | 
						|
 | 
						|
Web
 | 
						|
~~~
 | 
						|
 | 
						|
* Do not show "Session cookie not available" on sign in
 | 
						|
+
 | 
						|
When LDAP is used for authentication, clicking on the 'Sign In' link
 | 
						|
opens a user/password dialog. In this dialog the "Session cookie not
 | 
						|
available." message was always shown as warning. This warning was
 | 
						|
pretty useless since the user was about to sign in because he had no
 | 
						|
current session.
 | 
						|
+
 | 
						|
This problem was discussed on the
 | 
						|
link:https://groups.google.com/forum/#!topic/repo-discuss/j-t77m8-7I0/discussion[
 | 
						|
Gerrit mailing list].
 | 
						|
 | 
						|
* Reject restoring a change if its destination branch does not exist
 | 
						|
  anymore
 | 
						|
 | 
						|
* Reject submitting a change if its destination branch does not exist
 | 
						|
  anymore
 | 
						|
+
 | 
						|
If a branch got deleted and there was an open change for this branch,
 | 
						|
it was still possible to submit this open change. As result the
 | 
						|
destination branch was implicitly recreated, even if the user
 | 
						|
submitting the change had no privileges to create branches.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1352[issue 1352]:
 | 
						|
  Don't display "Download" link for `/COMMIT_MSG`
 | 
						|
+
 | 
						|
The commit message file is special, it doesn't actually exist and
 | 
						|
cannot be downloaded. Don't offer the download link in the side by
 | 
						|
side viewer.
 | 
						|
 | 
						|
* Dependencies were lost in the ChangeScreen's "Needed By" table
 | 
						|
+
 | 
						|
Older patchsets are now iterated for descendants, so that the dependency
 | 
						|
chain does not break on new upstream patchsets.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1442[issue 1442]:
 | 
						|
  Only show draft change dependency if current user is owner or reviewer
 | 
						|
+
 | 
						|
In the change screen, the dependencies panel was showing draft changes
 | 
						|
in the "Depends On" and "Needed By" lists for all users, and when there
 | 
						|
was no user logged in.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1558[issue 1558]:
 | 
						|
  Create a draft patch set when a draft patch set is rebased
 | 
						|
+
 | 
						|
Rebasing a draft patch set created a non-draft patch set. It was
 | 
						|
unexpected that rebasing a draft patch set published the modifications
 | 
						|
done in the draft patch set.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1176[issue 1176]:
 | 
						|
  Fix disappearance of download command in Firefox
 | 
						|
+
 | 
						|
Clicking on the download command for a patch set in Firefox made the
 | 
						|
download command disappear.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1587[issue 1587]:
 | 
						|
  Fix disappearance of action buttons when selecting the last patch set
 | 
						|
  as `Old Version History`
 | 
						|
 | 
						|
* Fix updating patch list when `Old Version History` is changed
 | 
						|
+
 | 
						|
If a collapsed patch set panel was expanded and re-closed it's patch
 | 
						|
list wasn't updated anymore when the selection for `Old Version History`
 | 
						|
was changed.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1523[issue 1523]:
 | 
						|
  Update diff base to match old version history
 | 
						|
+
 | 
						|
When changing the diff base in the `Old Version History` on the change
 | 
						|
screen and then entering the Side-By-Side view for a file, clicking on
 | 
						|
the back button in the browser (reentering the change screen) was
 | 
						|
causing the files to be wrongly compared with `Base` again.
 | 
						|
 | 
						|
* Don't NPE if current patch set is not available
 | 
						|
+
 | 
						|
Broken changes may have the current patch set field incorrectly
 | 
						|
specified, causing currentPatchSet to be unable to locate the
 | 
						|
correct data and return it. When this happens don't NPE, just
 | 
						|
claim the change is not reviewed.
 | 
						|
 | 
						|
* link:https://code.google.com/p/gerrit/issues/detail?id=1555[issue 1555]:
 | 
						|
  Fix displaying of file diff if draft patch has been deleted
 | 
						|
+
 | 
						|
Displaying any file diff for a patch set failed if the change had any
 | 
						|
gaps in its patch set history. Patch sets can be missing, if they
 | 
						|
have been drafts and were deleted.
 | 
						|
 | 
						|
* link:https://code.google.com/p/gerrit/issues/detail?id=856[issue 856]:
 | 
						|
  Fix displaying of comments on deleted files
 | 
						|
+
 | 
						|
Published and draft comments that are posted on deleted files were not
 | 
						|
loaded and displayed.
 | 
						|
 | 
						|
* link:https://code.google.com/p/gerrit/issues/detail?id=735[issue 735]:
 | 
						|
  Fix `ArrayIndexOutOfBoundsException` on navigation to next/previous
 | 
						|
  patch
 | 
						|
+
 | 
						|
An `ArrayIndexOutOfBoundsException` could occur when navigating from
 | 
						|
one patch to the next/previous patch if the next/previous patch was a
 | 
						|
newly added binary file. The exception occurred if the user was not
 | 
						|
signed in or if the user was signed in and had `Syntax Coloring` in the
 | 
						|
preferences enabled.
 | 
						|
 | 
						|
* link:https://code.google.com/p/gerrit/issues/detail?id=816[issue 816]:
 | 
						|
  Fix wrong file indention in Side-by-Sie diff viewer on right side
 | 
						|
 | 
						|
* Only set reviewed attribute on open changes
 | 
						|
+
 | 
						|
If a change is merged or abandoned, do not consider the reviewed
 | 
						|
property for the calling user, so that the change is not highlighted
 | 
						|
as unreviewed on the user's dashboard.
 | 
						|
 | 
						|
* Change PatchTable pointer when loading patch
 | 
						|
+
 | 
						|
This patch fixes an issue with the "file list" table displayed by
 | 
						|
clicking on the "Files" sub-menu when viewing a diff.
 | 
						|
+
 | 
						|
Originally when navigating between patch screens the highlighted row
 | 
						|
(pointer) of the file list table would not change when not directly
 | 
						|
interacting with the table e.g. by clicking on the previous or next
 | 
						|
file link.
 | 
						|
+
 | 
						|
This patch updates the file list table whenever a new patch screen is loaded
 | 
						|
so that the pointer corresponds to the current patch being displayed.
 | 
						|
 | 
						|
* Don't hyperlink non-internal groups
 | 
						|
+
 | 
						|
When an external group (such as LDAP) is used in a permission rule,
 | 
						|
don't attempt to link to the group in the internal account system UI.
 | 
						|
The group won't load successfully. Instead just display the name and
 | 
						|
put the UUID into a tooltip to show the full DN.
 | 
						|
 | 
						|
* Fix: Popup jumps back to original position when resizing screen
 | 
						|
+
 | 
						|
On 'Watched Projects' screen, the 'Browse' button displays a popup
 | 
						|
window. If the user moves it and then resizes the screen, it won't snap
 | 
						|
back to the original position.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1457[issue 1457]:
 | 
						|
  Prevent groups from being renamed to empty string
 | 
						|
 | 
						|
* Fixed AccountGroupInfoScreen search callback
 | 
						|
+
 | 
						|
If the search returned no results, the search button would not be
 | 
						|
enabled and the status panel was not shown. Fixed the panel and button
 | 
						|
to always be enabled.
 | 
						|
 | 
						|
* Fix NullPointerException on `/p/`
 | 
						|
+
 | 
						|
Requesting just `/p/` caused a NullPointerException as the redirection
 | 
						|
logic had no project name to form a URL from. Detect requests for `/p/`
 | 
						|
and redirect to 'Admin' > 'Projects' to show the projects the caller
 | 
						|
has access to.
 | 
						|
 | 
						|
Mail
 | 
						|
~~~~
 | 
						|
 | 
						|
* Fix: Rebase did not mail all reviewers
 | 
						|
 | 
						|
* Fix email showing in AccountLink instead of names
 | 
						|
+
 | 
						|
Prefer the full name for the display text of the link.
 | 
						|
 | 
						|
* Fix signature delimiter for e-mail messages
 | 
						|
+
 | 
						|
Make sure the signature delimiter is "-- " (two dashes and a space).
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1397[issue 1397]:
 | 
						|
  Don't wait for banner message from SMTP server after STARTTLS
 | 
						|
  negotiation
 | 
						|
+
 | 
						|
According to RFC 2847 section 5.2, SMTP server won't send the banner
 | 
						|
message again after STARTTLS negotiation. The original code will hang
 | 
						|
until SMTP server kicks it off due to timeout and can't send email with
 | 
						|
STARTTLS enabled, aka. `sendemail.smtpEncryption = tls`.
 | 
						|
 | 
						|
* Extract all mail templates during site init
 | 
						|
+
 | 
						|
The example mail templates `RebasedPatchSet.vm`, `Restored.vm` and
 | 
						|
`Reverted.vm` were not extracted during the initialization of a new
 | 
						|
site.
 | 
						|
 | 
						|
SSH
 | 
						|
~~~
 | 
						|
* Fix reject message if bypassing code review is not allowed
 | 
						|
+
 | 
						|
If a user is not allowed to bypass code review, but tries to push a
 | 
						|
commit directly, Gerrit rejected this push with the error message
 | 
						|
"can not update the reference as a fast forward". This message was
 | 
						|
confusing to the user since the push only failed due to missing
 | 
						|
access rights. Go back to the old message that says "prohibited
 | 
						|
by Gerrit".
 | 
						|
 | 
						|
* Fix reject message if pushing tag is rejected because tagger is
 | 
						|
  somebody else
 | 
						|
+
 | 
						|
Pushing a tag that has somebody else as tagger requires the `Forge
 | 
						|
Committer` access right. If this access right was missing Gerrit
 | 
						|
was rejecting the push with "can not create new references". This error
 | 
						|
message was misleading because the user may have thought that the
 | 
						|
`Create Reference` access right was missing which was actually assigned.
 | 
						|
+
 | 
						|
The same reject message was also returned on push of an annotated tag
 | 
						|
if the `Push Annotated Tag` access right was missing. Also in this case
 | 
						|
the error message was not ideal.
 | 
						|
+
 | 
						|
Go back to the old more generic message which says `prohibited by
 | 
						|
Gerrit`.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1437[issue 1437]:
 | 
						|
  Send event to stream when draft change is published
 | 
						|
+
 | 
						|
When a change is uploaded as a draft, a `patchset-created` event is
 | 
						|
sent to the event stream, but since drafts are private to the owner,
 | 
						|
the event is not publicly visible.  When the draft is later published,
 | 
						|
no publicly visible event was sent. As result of this external tools
 | 
						|
that rely on the event stream to detect new changes didn't receive
 | 
						|
events for any changes that were first uploaded as draft.
 | 
						|
+
 | 
						|
There is now a new event, `draft-published`, which is sent to the
 | 
						|
event stream when a draft change is published.  The content of this
 | 
						|
event is the same as `patchset-created`.
 | 
						|
 | 
						|
* Fix: Wrong ps/rev in `change-merged` stream-event
 | 
						|
+
 | 
						|
When using cherry-pick as merge strategy, the wrong ref was set in the
 | 
						|
`change-merged` stream-event.
 | 
						|
+
 | 
						|
The issue stems from Gerrit would not acknowledge the resulting new
 | 
						|
pachset (the actual cherry-pick).
 | 
						|
 | 
						|
* Fix NullPointerException in `query` SSH command
 | 
						|
+
 | 
						|
Running the `query` SSH command with the options `--comments` and
 | 
						|
`--format=JSON` failed with a NullPointerException if a change had a
 | 
						|
message without author. Change messages have no author if they were
 | 
						|
created by Gerrit. For such messages now the Gerrit Server identity is
 | 
						|
returned as author.
 | 
						|
 | 
						|
* Fix the `export-review-notes` command's Guice bindings
 | 
						|
+
 | 
						|
The `export-review-notes` command was broken because of the CachePool
 | 
						|
class being bound twice. The startup of the command failed because of
 | 
						|
that.
 | 
						|
 | 
						|
* Fix sorting of SSH help text
 | 
						|
+
 | 
						|
Commands were displaying in random order, sort commands before output.
 | 
						|
 | 
						|
* `replicate` command: Do not log errors for wrong user input
 | 
						|
+
 | 
						|
If the user provided an invalid combination of command options or an
 | 
						|
non existing project name this was logged in the `error.log` but
 | 
						|
printing the error out to the user is sufficient.
 | 
						|
 | 
						|
Authentication
 | 
						|
~~~~~~~~~~~~~~
 | 
						|
 | 
						|
* Fix NPE in LdapRealm caused by non-LDAP users
 | 
						|
+
 | 
						|
Servers that are connected to LDAP but have non-LDAP user accounts
 | 
						|
created by `gerrit create-account` (e.g. batch role accounts for
 | 
						|
build systems) were crashing with a NullPointerException when the
 | 
						|
LdapRealm tried to discover which LDAP groups the non-LDAP user
 | 
						|
was a member of in the directory.
 | 
						|
 | 
						|
* Fix domain field of HTTP digest authentication
 | 
						|
+
 | 
						|
Per RFC 2617 the domain field is optional. If it is not present,
 | 
						|
the digest token is valid on any URL on the server. When set it
 | 
						|
must be a path prefix describing the URLs that the password would
 | 
						|
be valid against.
 | 
						|
+
 | 
						|
When a canonical URL is known, supply that as the only domain that
 | 
						|
is valid. When the URL is missing (e.g. because the provider is
 | 
						|
still broken) rely on the context path of the application instead.
 | 
						|
 | 
						|
Replication
 | 
						|
~~~~~~~~~~~
 | 
						|
 | 
						|
* Fix inconsistent behavior when replicating `refs/meta/config`
 | 
						|
+
 | 
						|
In `replication.config`, if `authGroup` is set to be used together with
 | 
						|
`mirror = true`, refs blocked through the `authGroup` are deleted from
 | 
						|
the slave/mirror. The same correctly applies if the `authGroup` is used
 | 
						|
to block `refs/meta/config`.
 | 
						|
+
 | 
						|
However, if `replicatePermission` was set to `false`, Gerrit was
 | 
						|
refusing to clean up `refs/meta/config` on the slave/mirror.
 | 
						|
 | 
						|
* Fix bug with member assignment order in PushReplication.
 | 
						|
+
 | 
						|
The groupCache was being used before it was set in the class. Fix the
 | 
						|
ordering of the assignment.
 | 
						|
 | 
						|
Approval Categories
 | 
						|
~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
* Make `NoBlock` and `NoOp` approval category functions work
 | 
						|
+
 | 
						|
The approval category functions `NoBlock` and `NoOp` have not worked
 | 
						|
since the integration of Prolog.
 | 
						|
+
 | 
						|
`MAY` was introduced as a new submit record status to complement `OK`,
 | 
						|
`REJECT`, `NEED`, and `IMPOSSIBLE`. This allows the expression of
 | 
						|
approval categories (labels) that are optional, i.e. could either be
 | 
						|
set or unset without ever influencing whether the change could be
 | 
						|
submitted. Previously there was no way to express this property in
 | 
						|
the submit record.
 | 
						|
+
 | 
						|
This enables the `NoBlock` and `NoOp` approval category functions to
 | 
						|
work as they now emit may() terms from the Prolog rules. Previously
 | 
						|
they returned ok() terms lacking a nested user term, leading to
 | 
						|
exceptions in code that expected a user context if the label was `OK`.
 | 
						|
 | 
						|
* Fix category block status without negative score
 | 
						|
+
 | 
						|
Categories without blocking or approval scores will result in the
 | 
						|
blocking/approved image appearing in the category column after changes
 | 
						|
are merged should the score by the reviewer match the minimum or
 | 
						|
maximum value respectively.
 | 
						|
+
 | 
						|
A check to ignore "No Score" values of 0 was added.
 | 
						|
 | 
						|
* Don't remove dashes from approval category name
 | 
						|
+
 | 
						|
If an approval category name contained a dash, it was removed by
 | 
						|
Gerrit. On the other side a space in an approval category name is
 | 
						|
converted to a dash. This was confusing for writing Prolog submit
 | 
						|
rules. If, for example, one defined a new category named `X-Y`, then in
 | 
						|
the Prolog code the proper name for that category would have been `XY`
 | 
						|
which was unintuitive.
 | 
						|
 | 
						|
* Fix NPE in `PRED__load_commit_labels_1`
 | 
						|
+
 | 
						|
If a change query uses reviewer information and loads the approvals
 | 
						|
map, but there are no approvals for a given patch set available, the
 | 
						|
collection came out null, which cannot be iterated. Make it always be
 | 
						|
an empty list.
 | 
						|
 | 
						|
Other
 | 
						|
~~~~~
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1554[issue 1554]:
 | 
						|
  Fix cloning of new projects from slave servers
 | 
						|
+
 | 
						|
If a new project is created in Gerrit the replication creates the
 | 
						|
repository for this new project directly in the filesystem of the slave
 | 
						|
server. The slave server was not discovering this new repository and as
 | 
						|
result any attempt to clone the corresponding project from the slave
 | 
						|
server failed.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1548[issue 1548]:
 | 
						|
  Create a ref for the patch set that is created when a change is
 | 
						|
  cherry-picked and trigger the replication for it:
 | 
						|
+
 | 
						|
If Cherry Pick is chosen as submit type, on submit a new commit is
 | 
						|
created by the cherry-pick. For this commit a new patch set is created
 | 
						|
which is added to the change. Using any of the download commands to
 | 
						|
fetch this new patch set failed with 'Couldn't find remote ref' because
 | 
						|
no ref for the new patch set was created.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1626[issue 1626]:
 | 
						|
  Fix NullPointerException on cherry-pick if `changeMerge.test` is enabled
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1491[issue 1491]:
 | 
						|
  Fix nested submodule updates
 | 
						|
 | 
						|
* Set link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#transfer.timeout[transfer
 | 
						|
  timeout] for pushes through HTTP
 | 
						|
+
 | 
						|
The transfer timeout was only set when pushing via SSH.
 | 
						|
 | 
						|
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.5/config-gerrit.html#receive.maxObjectSizeLimit[
 | 
						|
  Limit maximum Git object size] when pushing through HTTP
 | 
						|
+
 | 
						|
The limit for the maximum object size was only set when pushing via SSH.
 | 
						|
 | 
						|
* Fix units of `httpd.maxwait`
 | 
						|
+
 | 
						|
The default unit here is minutes, but Jetty wants to get milliseconds
 | 
						|
from the maxWait field. Convert the minutes returned by getTimeUnit to
 | 
						|
be milliseconds, matching what Jetty expects.
 | 
						|
+
 | 
						|
This should resolve a large number of 503 errors for Git over HTTP.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1493[issue 1493]:
 | 
						|
  Fix wrong "change ... closed" message on direct push
 | 
						|
+
 | 
						|
Pushing a commit directly into the central repository with bypassing
 | 
						|
code review wrongly resulted in a "change ... closed" message if the
 | 
						|
commit was already pushed for review and if a Change-Id was included in
 | 
						|
the commit message. Despite of the error message the push succeeded and
 | 
						|
the corresponding change got closed. Now the message is not printed
 | 
						|
anymore.
 | 
						|
 | 
						|
* Fix NPE that can hide guice CreationException on site init
 | 
						|
+
 | 
						|
Note that the `--show-stack-trace` option is needed to print the stack
 | 
						|
trace when a program stops with a Die exception.
 | 
						|
 | 
						|
* Do not automatically add author/committer as reviewer to drafts
 | 
						|
 | 
						|
* Do not automatically add reviewers from footer lines to drafts
 | 
						|
 | 
						|
* Fix NullPointerException in MergeOp
 | 
						|
+
 | 
						|
The body of the commit object may have been discarded earlier to
 | 
						|
save memory, so ensure it exists before asking for the author.
 | 
						|
 | 
						|
* link:http://code.google.com/p/gerrit/issues/detail?id=1396[issue 1396]:
 | 
						|
  Initialize the submodule commit message buffer
 | 
						|
 | 
						|
* Fix file name matching in `commit_delta` to perform substring
 | 
						|
  matching
 | 
						|
+
 | 
						|
The `commit_delta` predicate was matching the entire file name against
 | 
						|
the given regular expression while other predicates (`commit_edits`,
 | 
						|
`commit_message_matches`) performed substring matching. It was
 | 
						|
inconsistent that for `commit_delta` it was needed to write something
 | 
						|
like:
 | 
						|
+
 | 
						|
----
 | 
						|
  commit_delta('.*\.java')
 | 
						|
----
 | 
						|
+
 | 
						|
to match all `*.java` files, while for `commit_edits` it was:
 | 
						|
+
 | 
						|
----
 | 
						|
  commit_edits('\.java$', '...')
 | 
						|
----
 | 
						|
+
 | 
						|
to match the same set of (Java) files.
 | 
						|
 | 
						|
* Create index for submodule subscriptions on site upgrade
 | 
						|
 | 
						|
* Fix URL to Jetty XML DTDs so they can be properly validated
 | 
						|
 | 
						|
* Fix resource leak when `changeMerge.test` is `true`
 | 
						|
 | 
						|
* Fix possible synchronization issue in TaskThunk
 | 
						|
 | 
						|
* Fix possible NPEs in `ReplaceRequest.cmd` usage in `ReceiveCommits`
 | 
						|
+
 | 
						|
The `cmd` field is populated by `validate(boolean)`. If this method
 | 
						|
fails, results on some `ReplaceRequests` may not be set. Guard the
 | 
						|
attempt to access the field with a null check.
 | 
						|
 | 
						|
* Match no labels if current patch set is not available
 | 
						|
+
 | 
						|
If the current patch set cannot be loaded from `ChangeData`, assume no
 | 
						|
label information. This works around an NullPointerException inside of
 | 
						|
`ChangeControl` where the `PatchSet` is otherwise required.
 | 
						|
 | 
						|
* Create new patch set references before database records
 | 
						|
+
 | 
						|
Ensure the commit used by a new change or replacement patch set
 | 
						|
always exists in the Git repository by writing the reference first
 | 
						|
as part of the overall `BatchRefUpdate`, then inserting the database
 | 
						|
records if all of the references stored successfully.
 | 
						|
 | 
						|
* Fix rebase patch set and revert change to update Git first
 | 
						|
+
 | 
						|
Update the Git reference before writing to the database. This way the
 | 
						|
repository cannot be corrupted if the server goes down between the two
 | 
						|
actions.
 | 
						|
 | 
						|
* Make sure we use only one type of NoteMerger for review notes creation
 | 
						|
 | 
						|
* Fix generation of owner group in GroupDetail
 | 
						|
+
 | 
						|
Set the GroupDetail.ownerGroup to the AccountGroup.ownerGroupUUID
 | 
						|
instead of the groupUUID.
 | 
						|
 | 
						|
* Ensure that ObjectOutputStream in H2CacheImpl is closed
 | 
						|
 | 
						|
* Ensure that RevWalk in SubmoduleOp is released
 |