1ff91c0d82
Change-Id: I5fb811eab02d48a649990c6418977915c7dd7430
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, Eclipse 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 Eclipse
|
|
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
|