Gerrit 2.15

Download: 2.15.1 | 2.15

Documentation: 2.15.1 | 2.15

Release Highlights

  • New change workflows for changes not yet ready for full review (formerly Drafts).

  • The new PolyGerrit UI is mature enough for most uses.

  • Account data is stored in NoteDb.

  • NoteDb for change metadata is considered stable, and new sites use it by default.

  • NoteDb migration for change metadata is available.

  • Made several improvements and additions to the documentation to help users find the information they need.

Important Notes

Schema Changes

This release contains schema changes. To upgrade:

  java -jar gerrit.war init -d site_path

Support for draft changes removed

Support for draft changes and draft patch sets has been completely removed.

In most cases, the new Work-In-Progress workflow is a suitable replacement. Note that in the Draft workflow, an individual patch set can be a Draft. However, in both the new Work-In-Progress and Private workflows, WIP and Private apply to the whole change, not an individual patch set.

When upgrading from an earlier version, draft changes are migrated. This applies to all draft changes, or changes with draft patch sets (even if the highest patch set is not a draft), as follows:

  1. The “Draft” flag is removed from all patch sets.
  2. If the change has been merged or abandoned, no further action is taken.
  3. Otherwise, the change is moved to one of
    • Work-In-Progress change (this is the default)
    • Private change

The upgrade process prompts (once) for what Drafts should be migrated to; either WIP (default) or Private.

The migration means that some draft patch sets, which were previously hidden, might now be visible to some users who could not previously view them.

Change owners can make them private again using the “Mark Private” option in the UI, or using the REST API.

Votes no longer changed retroactively due to permissions

Historically, Gerrit would retroactively change votes on a label when permissions for the voting user changed. For example, if a user voted Code-Review+2, but then later lost permission to vote +2 (for example, was removed from a Maintainers group), all CR+2 votes by that user on open changes would suddenly appear as CR+1. In 2.15, this retroactive behavior no longer applies: the CR+2 votes remain CR+2, even if permissions were changed.

This new behavior makes label permissions more consistent with other permissions: usually, permission changes don‘t apply retroactively (you can’t un-submit a change), and the permission is only checked at the time an action is performed. It also fixes some technical issues and improves performance of reindexing changes.

Release Signatures

Starting in the 2.14.x bugfix series, all release JARs and documentations are signed by the Gerrit maintainers. This policy will continue for all future releases.

New URL Scheme

By default, all Gerrit URLs generated and used by the UI include not just the change number but the project name as well.

  • https://gerrit.mycompany.com/1234 becomes https://gerrit.mycompany.com/c/some/project/+/1234
  • https://gerrit.mycompany.com/#/c/1234 becomes https://gerrit.mycompany.com/#/c/some/project/+/1234
  • https://gerrit.mycompany.com/changes/1234 becomes https://gerrit.mycompany.com/some%2Fproject~1234

In addition to providing more context to humans reading the URL, this new scheme improves performance under NoteDb, and paves the way for load balancing a multi-master installation with repository affinity.

Old URLs will continue to be supported, and simply redirect to the new URLs.

NoteDb for Accounts

Almost all account data is now stored in NoteDb. The account data is migrated automatically during the upgrade process by running gerrit.war init.

The only account data not stored in NoteDb proper is the reviewed flags, which were moved to an external database in 2.13.

For Gerrit slaves the branches that contain the account data must be replicated.

NoteDb for Changes

With this release, the new Gerrit storage backend, NoteDb, is officially supported for storing change metadata and is the default storage backend for new installations.

For existing sites, migration to the new backend may be done either offline or online in a running server.

Support for ReviewDb will be removed in Gerrit 3.0. Gerrit 3.0 will only support offline migration; to run an online migration, you must use the 2.15.x series.

Daemon User Setup

The setup documentation now recommends setting up a user named gerrit instead of gerrit2. This username can be anything; the choice of name doesn't affect any functionality. However, some example commands in the documentation may refer to the new gerrit user, so admins might need to tweak them to refer to gerrit2 instead.

Strict validation on labels

In 2.15, posting a review including a vote on any labels that does not exist or is outside of the permitted range based on the ACLs will now always result in a failure of the entire operation. Previously, if the “strict labels” option was set to disabled in the review input, votes to any invalid labels would be silently ignored. This option has now been removed from the REST API's ReviewInput as well as the SSH review command.

CI systems that rely on the non-strict behaviour of earlier Gerrit versions may require additional configuration to avoid casting votes to labels which are invalid for the change.

Following feedback on the 2.15 release a new configuration option change.strictLabels was introduced in 2.15.2 to allow the new strict functionality to be optionally enabled. By default it is disabled to maintain backwards compatibility with previous release.

New Features

PolyGerrit UI

  • Implement admin interface (projects, groups and plugins).

  • Refreshed UI based on material design.

  • Add hashtag support.

  • Add support to show uploader on change screen.

  • Lots of bug fixes.

New Workflows

Draft, Private, Work-In-Progress

The draft change feature has been removed, and replaced with two separate features:

Ignore Changes, Mark Reviewed

Changes can be ignored, or marked as reviewed, to reduce email notifications and keep dashboards cleaner.

Explicitly Record Reverted Changes

When a change is reverted via the “Revert” button, this fact is recorded in the change metadata of the newly-created revert change, not just in the commit message as in the past. A new search operator revertof: allows for searching for reverts of a given change.

Delete Inline Comments

Individual inline comments can be deleted after the fact by site administrators.

CCs Users By Email

Users may be CCed on changes by entering their email address, even if they have not registered an account on the Gerrit server.

This feature is only available when using NoteDb.

Publish Comments on Push

When pushing new patch sets on a change or a series of changes, users can configure Gerrit to automatically publish any pending draft comments they have on those changes, avoiding the need to click through the web UI to publish all comments.

Mark Changes Due to Rebase

When diffing two patch sets of the same change that have different parents, some differences between the patch sets may be due to the rebase, instead of changes between the patch set and its base. These differences are now highlighted in the UI (PolyGerrit only), and are not counted towards the size of diffs.

Improved Push Error Messages

When a push fails because the user does not have the required permission, the generic message (prohibited by Gerrit) has been replaced with a detailed message describing the exact permissions required.

Documentation updates

With this release, we have updated several sections of the documentation to make it easier for users to find the information they need. These updates include:

We have also made changes to improve navigation throughout the documentation.

REST API

Projects

  • ProjectInfo now contains label configuration information.

Changes

Groups

Config

API

  • New Java API for accessing plugins.

  • New Java API for accessing custom project dashboards.

  • New getGroups method in account API to get a user's group memberships.

  • New ChangeReportFormatter extension point for customizing the report output from git push.

  • Instances of IdString used to return true when equals was given a String instance equal to the IdString's URL-encoded value. This violates symmetry, so this behavior was removed: IdStrings now never compare equal to Strings.

Replication plugin

  • It is now possible to replicate directly to another Gerrit instance.

    Is is possible to enable replication to different Gerrit instance by using gerrit+ssh:// as the protocol name followed by the hostname of another Gerrit server.

Dependency Updates

  • Update Apache Commons Codec to 1.10

  • Update Apache Commons Compress to 1.13

  • Update Apache Commons Validator to 1.6

  • Update Apache Mina SSHD to 1.6.0

  • Update AutoValue to 1.4.1

  • Update Blame Cache to 0.2-5

  • Update Bouncy Castle to 1.57

  • Update Dropwizard to 3.2.4

  • Update Gitiles Blame to 0.2-4

  • Update GWT to 2.8.1

  • Update Jetty to 9.3.18.v20170406

  • Update JGit to 4.9.0.201710071750-r

  • Update Joda-Time to 2.9.9

  • Update juniversalchardet to 2.0.0

  • Update Lucene to 5.5.4

  • Update Pegdown to 1.6.0

  • Update Polymer to 1.11.0

  • Update Soy to 2017-04-23

Bugfix Releases

2.15.2 (in development)

  • Issue 8742: Fix infinite loop in intraline diff loader.

    A regression introduced in 2.15.1 caused excessive CPU usage when loading intraline diffs.

  • Issue 8697: Restore the ability to ignore invalid review labels.

    In 2.15 the strict_labels attribute was removed from the review input entity, and Gerrit no longer silently ignores invalid label scores. This caused breakage in CI systems that submit reviews post-merge and don't have different configurations for if the change is already merged or not. For example the Gerrit Trigger Plugin was broken, as discussed on the Gerrit mailing list.

    A new configuration change.strictLabels is introduced. When enabled, Gerrit will reject invalid labels, otherwise will silently ignore them. By default it is disabled, for backwards compatibility with previous releases.

  • Issue 8728: Allow percent encoding in patch set titles.

  • Polygerrit fixes:

    • Issue 8237: Link account chips to owner search rather than user dashboard.

    • Issue 8375: Add reset button to my menu in settings.

    • Issue 7815: Don't curse over files with up/down keys.

    • Add a link to group page in groups section of settings.

    • Make sure plugins are not double counted.

  • Elasticsearch fixes

    • Issue 8523: Fix configuration of elasticsearch during site initialization.

      When the site was initialized with Elasticsearch as the secondary index, the elasticsearch.prefix was not set, and Elasticsearch server-specific settings were not correctly set under elasticsearch.name.protocol, etc.

    • Issue 8527: Improve documentation of index.maxLimit for Elasticsearch.

      When using Elasticsearch, index.maxLimit should not exceed the value of index.max_result_window configured on the Elasticsearch server.

    • Issue 8553: Fix reindexing of an already initialized site with Elasticsearch.

    • Issue 8690: Allow to use the index start and index activate ssh commands with Elasticsearch.

    • Issue 8525: Fix setting of changed lines in the change info.

    • Issue 8588: Fix setting the star icon status in the change info.

    • Change default Elasticsearch prefix to gerrit_.

2.15.1

  • Issue 8677: Fix internal error when sending raw input to PUT and POST REST endpoints. In particular, this caused errors when using the plugin manager to update or install plugins.

  • Issue 5181: Limit assignee suggestion to users that can see the change.

  • Issue 6112: Add support for “Included In” in the polygerrit change screen.

  • Issue 6583: Fix false negatives for edits due to rebase.

  • Issue 8574: Fix refesh of polygerrit change list with “Shift + R”.

  • Issue 8703: Fix false warning in server log when creating a new project.

  • Issue 8252: Improve error message in polygerrit when adding a group member to a group that does not exist or is not viewable for the current user.

  • Allow admins to toggle the WIP flag on all changes.

  • Fix internal server error when group UUID cannot be resolved when getting audit log.

  • Display group UUID in group audit log if group name is missing.

    The group name can be missing if there is no group backend that handles the group. This can happen for example if a plugin that handled the group was removed.

  • Fix removal of email/password on external ID update.

  • Replication plugin:

    • Fix creation of missing repository.

      When replicating to a destination where the repository does not exist, updating the HEAD reference failed because the passed reference name was not absolute.

    • Add documentation of how to exclude repositories from replication.

    • Fix logging of new project creation and project deletion.

      The “created” and “deleted” logs were emitted even when the operation failed.

  • Allow graceful rolling restarts

    Set a graceful stop timeout for allowing Jetty to wait for incoming requests to be completed before shutting down its sockets.