Default notify to OWNER when creating WIP changes via REST API When a change is created as Work In Progress (WIP) via Git push (refs/for/master%wip), ReceiveCommits defaults notify handling to NotifyHandling.OWNER (unless overridden via %notify=...). This ensures that project watchers are not notified about WIP changes before they are ready for review. Note that WIP changes differ from Private changes: Private changes rely on visibility ACLs (users with VIEW_PRIVATE_CHANGES permission still receive notifications as tested in watchProjectNotifyOnPrivateChange). WIP changes, on the other hand, are visible to everyone with read access but suppress notifications by defaulting notify handling to OWNER. Users added as reviewers or CCs on WIP changes also do not receive project watch notifications for those WIP changes unless notify=ALL is explicitly specified. However, when a WIP change was created via the REST API (POST /a/changes/), ChangeInput had a field initializer defaulting notify to NotifyHandling.ALL, and CreateChange unconditionally fell back to NotifyHandling.ALL. As a result, WIP changes created via REST (such as via Cog or automation tools) dispatched email notifications to all project watchers by default. Fix this by: 1. Removing the default field initializer from ChangeInput.notify so it is null when unspecified by the caller, and updating ChangeInputProtoConverter to handle nullable notify. 2. In CreateChange, defaulting notify handling to NotifyHandling.OWNER for Work In Progress changes (matching ReceiveCommits and CommitUtil.createRevertChange), while keeping NotifyHandling.ALL for ready changes. 3. Updating the ChangeInput entity documentation in Documentation/rest-api-changes.txt to reflect the contextual default. Add acceptance tests in ProjectWatchIT verifying that project watchers (including users added as reviewers or CCs) do not receive notifications for WIP changes created via REST, updated with new patchsets, or pushed without notify override, while still honoring explicit notify=ALL. Forward-Compatible: checked Google-Bug-Id: b/542620083 Release-Notes: Suppress project watcher email notifications on REST-created Work-In-Progress changes Change-Id: Ic97c7d8c9de5adcdd54475e3869d2a35aeab5736
Gerrit is a code review and project management tool for Git based projects.
Gerrit makes reviews easier by showing changes in a side-by-side display, and allowing inline comments to be added by any reviewer.
Gerrit simplifies Git based project maintainership by permitting any authorized user to submit changes to the master Git repository, rather than requiring all approved changes to be merged in by hand by the project maintainer.
For information about how to install and use Gerrit, refer to the documentation.
Our canonical Git repository is located on googlesource.com. There is a mirror of the repository on Github.
Please report bugs on the issue tracker.
Gerrit is the work of hundreds of contributors. We appreciate your help!
Please read the contribution guidelines.
Note that we do not accept Pull Requests via the Github mirror.
The Developer Mailing list is repo-discuss on Google Groups.
Gerrit is provided under the Apache License 2.0.
Install Bazel and run the following:
git clone --recurse-submodules https://gerrit.googlesource.com/gerrit
cd gerrit && bazel build release
The instruction how to configure GerritForge/BinTray repositories is here
On Debian/Ubuntu run:
apt-get update && apt-get install gerrit=<version>-<release>
NOTE: release is a counter that starts with 1 and indicates the number of packages that have been released with the same version of the software.
On CentOS/RedHat run:
yum clean all && yum install gerrit-<version>[-<release>]
On Fedora run:
dnf clean all && dnf install gerrit-<version>[-<release>]
Docker images of Gerrit are available on DockerHub
To run a CentOS 8 based Gerrit image:
docker run -p 8080:8080 gerritcodereview/gerrit[:version]-centos8
To run a Ubuntu 20.04 based Gerrit image:
docker run -p 8080:8080 gerritcodereview/gerrit[:version]-ubuntu20
NOTE: release is optional. Last released package of the version is installed if the release number is omitted.