Release notes for Gerrit 2.9
============================


Gerrit 2.9 is now available:

link:https://gerrit-releases.storage.googleapis.com/gerrit-2.9.war[
https://gerrit-releases.storage.googleapis.com/gerrit-2.9.war]

*WARNING:* Support for Java 1.6 has been discontinued.
As of Gerrit 2.9, Java 1.7 is required.

Gerrit 2.9 includes the bug fixes done with
link:ReleaseNotes-2.8.1.html[Gerrit 2.8.1],
link:ReleaseNotes-2.8.2.html[Gerrit 2.8.2],
link:ReleaseNotes-2.8.3.html[Gerrit 2.8.3],
link:ReleaseNotes-2.8.4.html[Gerrit 2.8.4],
link:ReleaseNotes-2.8.5.html[Gerrit 2.8.5],
link:ReleaseNotes-2.8.6.html[Gerrit 2.8.6] and
link:ReleaseNotes-2.8.6.1.html[Gerrit 2.8.6.1].
These bug fixes are *not* listed in these release notes.

Important Notes
---------------


*WARNING:* This release contains schema changes.  To upgrade:
----
  java -jar gerrit.war init -d site_path
  java -jar gerrit.war reindex --recheck-mergeable -d site_path
----

*WARNING:* Support for query via the SQL index is removed. The usage of
a secondary index is now mandatory.

*WARNING:* The `sortkey` and `sortkey_prev` options on the query changes
REST endpoint are link:#sortkey-deprecation[deprecated].

*WARNING:* The new change screen only displays download commands if the
`download-commands` core plugin or any other plugin providing download
commands is installed. The `download-commands` plugin provides the
standard download schemes and commands. It is packaged together with
Gerrit and can be installed, or upgraded, during the
link:https://gerrit-review.googlesource.com/Documentation/pgm-init.html[
site initialization]:

.Installing the plugin for the first time
- Batch init:
+
By default the batch init does *not* install any core plugin. To
install the `download-commands` plugin during batch init, specify the
'--install-plugin download-commands' option:
+
----
  $ java -jar gerrit-2.9.war init -d site --batch --install-plugin download-commands
----

- Interactive init:
+
There is a question whether the `download-commands` plugin should be
installed. To install the plugin the question must be answered with `y`:
+
----
  Install plugin download-commands version v2.9 [y/N]? y
----

.Upgrading the plugin
Pay attention that the `download-commands` plugin from Gerrit 2.8 is
*not* compatible with Gerrit 2.9 and must be upgraded:

- Batch init:
+
With the batch init it is *not* possible to upgrade core plugins.

- Interactive init:
+
The interactive init asks whether the plugin should be upgraded:
+
----
  Install plugin download-commands version v2.9 [y/N]? y
  version v2.8.6.1 is already installed, overwrite it [y/N]? y
----

- Manual upgrade:
+
The plugin can be upgraded manually by copying the new plugin jar into
the site's `plugins` folder.

*WARNING:* Upgrading to 2.9.x requires the server be first upgraded to 2.1.7 (or
a later 2.1.x version), and then to 2.9.x.  If you are upgrading from 2.2.x.x or
later, you may ignore this warning and upgrade directly to 2.9.x.


Release Highlights
------------------


* link:http://code.google.com/p/gerrit/issues/detail?id=2065[Issue 2065]:
The new change screen is now the default change screen.
+
The
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-review-ui.html[
documentation of the new review UI] describes the new screens in detail
and highlights the important functionality with screenshots.
+
Users that are accessing the new change screen for the first time are
informed about the new change screen by a welcome popup. The welcome
popup links to the review UI documentation and allows users to go back
to the old change screen.


New Features
------------


Web UI
~~~~~~


Global
^^^^^^

* Project links by default link to the project dashboard.


New Change Screen
^^^^^^^^^^^^^^^^^


* The new change screen is now the default change screen.

* The layout was changed so that the focus is now on the commit
message, the change ID and the change status.

* Draft comments are displayed in the reply box.
+
There are links to navigate to the inline comments which can be used if
a comment needs to be edited.

* New inline comments from other users, that were published after the
current user last reviewed this change, are highlighted in bold.

* New summary comments from other users, that were published after the
current user last reviewed this change, are automatically expanded in
the change history.
+
The support for the old comment visibility strategy is discontinued.

* link:http://code.google.com/p/gerrit/issues/detail?id=93[Issue 93]:
Inline comments are shown in the change history.

* link:http://code.google.com/p/gerrit/issues/detail?id=592[Issue 592]:
A reply icon is shown on each change message.

* Quoting is possible when replying to a comment.

* link:http://code.google.com/p/gerrit/issues/detail?id=2313[Issue 2313]:
Show whether a related change is merged or old.

* New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-review-ui.html#related-changes[
Related Changes] tabs:
** `Cherry-Picks`
** `Same Topic`
** `Conflicts With`

* The title of the `Patch Sets` drop-down panel shows the number of the
currently viewed patch set and the total number of patch sets, in the
form: "current patch set/number of patch sets".

* The currently viewed patch set is displayed in the `Patch Sets` title.

* Keyboard shortcuts to navigate to next/previous patch set.

* Support `[`, `/` and `]` keys to navigate between files in a cycle.

* link:http://code.google.com/p/gerrit/issues/detail?id=2078[Issue 2078]:
Show a tooltip on reviewers indicating on which labels they can vote.

* The `Submit` button is enabled even if the change is not mergeable.
+
This allows to do the conflict resolution for a change series in a
single merge commit and submit the changes in reverse order.

* New `Open All` button in files header.

* If a merge commit is viewed this is highlighted by an icon. In this
case the parent commits are also shown.

* link:http://code.google.com/p/gerrit/issues/detail?id=2191[Issue 2191]:
New copy-to-clipboard button for commit ID.


New Side-by-Side Diff Screen
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* link:http://code.google.com/p/gerrit/issues/detail?id=348[Issue 348]:
The lines of a patch file are linkable.
+
These links can be used to directly link to certain inline comments.

* link:http://code.google.com/p/gerrit/issues/detail?id=2395[Issue 2395]:
The line length preference is used to draw a margin line at that many
columns of text.
+
This allows a user to configure their preferred width (e.g. 80 columns
or 100 columns) and see the margin, making it easier to identify lines
that run over that width.

* link:http://code.google.com/p/gerrit/issues/detail?id=2530[Issue 2530]:
All diff preferences are honored.

* link:http://code.google.com/p/gerrit/issues/detail?id=148[Issue 148]:
The full file path is shown.


Change List / Dashboards
^^^^^^^^^^^^^^^^^^^^^^^^

* The `Status` column shows `Merge Conflict` for changes that are not
mergeable.

* A new `Size` column shows the change size as a colored bar.
** The user preference `Show Change Sizes As Colored Bars In Changes Table`
can be disabled to get the size information displayed as text.
** The number of changed lines by which a change is considered as a
large change can be
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-gerrit.html#change.largeChange[
configured].

* Support to drill down into dashboard section.
+
Clicking on the section title executes the query of this section
without the `limit` operator.


Project Screens
^^^^^^^^^^^^^^^

* The general project screen provides a copyable clone command that
automatically installs the `commit-msg` hook.

* link:http://code.google.com/p/gerrit/issues/detail?id=562[Issue 562]:
Project owners can change `HEAD` from the project branches screen.

* link:http://code.google.com/p/gerrit/issues/detail?id=1298[Issue 1298]:
Administrators can change the parent project from the project access
screen; other users can save changes to the parent project for review
and get the change approved by an administrator.

* The project list displays icons for projects that are read only or
hidden.

* The Git garbage collection can be triggered from the general project
screen if the user has the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/access-control.html#capability_runGC[
Run Garbage Collection] global capability.


User Preferences
^^^^^^^^^^^^^^^^

* Users can choose the UK date format to render dates and timestamps in
the UI.


Secondary Index
~~~~~~~~~~~~~~~

* Support for query via the SQL index is removed. The usage of
a secondary index is now mandatory.

* New `--recheck-mergeable` option on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/pgm-reindex.html[
reindex] program.

ssh
~~~

* New `--notify` option on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/cmd-review.html[
review] command allowing to control when email notifications should be
sent.

* link:http://code.google.com/p/gerrit/issues/detail?id=1752[Issue 1752]:
New `--branch` option on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/cmd-review.html[
review] command.

* New `--all-reviewers` option on the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/cmd-query.html[
query] command allowing query results to include information about all
reviewers added on the change.

* New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/cmd-apropos.html[
apropos] command to search the Gerrit documentation.

* link:http://code.google.com/p/gerrit/issues/detail?id=1156[Issue 1156]:
New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/cmd-create-branch.html[
create-branch] command.

REST API
~~~~~~~~


Changes
^^^^^^^


[[sortkey-deprecation]]
* Results returned by the
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/rest-api-changes.html#list-changes[
query changes] endpoint are now paginated using offsets instead of sortkeys.
+
The `sortkey` and `sortkey_prev` parameters on the endpoint are deprecated.  The
results are now paginated using the `--limit` (`-n`) option to limit the number
of results, and the `-S` option to set the start point.
+
Queries with sortkeys are still supported against old index versions, to enable
online reindexing while clients have an older JS version.

Projects
^^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/rest-api-projects.html#get-content[
Get content of a file from HEAD of a branch].

Documentation
^^^^^^^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/rest-api-documentation.html#search-documentation.html[
Search documentation].

Access Rights
~~~~~~~~~~~~~


* New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/access-control.html#capability_viewAllAccounts[
global capability for viewing all accounts].

* New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/access-control.html#capability_viewPlugins[
global capability for viewing the list of installed plugins].

* link:http://code.google.com/p/gerrit/issues/detail?id=1993[Issue 1993]:
New `Change Owner` group that allows to assign label permissions to the change owner.

* Support link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/access-control.html#category_submit_on_behalf_of[
on behalf of for submit].

* Allow service users to access REST API if `auth.gitBasicAuth = true`.
+
If link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-gerrit.html#auth.gitBasicAuth[
auth.gitBasicAuth] is set to `true` in the `gerrit.config` file all
HTTP traffic is authenticated using standard `BasicAuth` and the
credentials are validated using the same auth method as configured for
the Gerrit Web UI. E.g. for LDAP this means that users must use their
LDAP password for Git over HTTP and for accessing the REST API.
+
Service users are technical users that were created by the
`create-account` SSH command. These users only exist in Gerrit and
hence they do not have any LDAP password. This is why service users
were not able to make use of the REST API if `auth.gitBasicAuth` was
set to `true`.
+
Now if `auth.gitBasicAuth` is set to `true` users that exist only in
Gerrit but not in LDAP are authenticated with their HTTP password from
the Gerrit database.

Search
~~~~~~

* New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-search.html#mergeable[
is:mergeable] search operator.
+
Finds changes that have no merge conflicts and can be merged into the
destination branch.

* link:http://code.google.com/p/gerrit/issues/detail?id=2163[Issue 2163]:
New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-search.html#parentproject[
parentproject] search operator.
+
Finds changes in the specified project or in one of its child projects.

* link:http://code.google.com/p/gerrit/issues/detail?id=2162[Issue 2162]:
New link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-search.html#conflicts[
conflicts] search operator.
+
Finds changes that conflict with the specified change.

* New operators for absolute last-updated-on search.
** link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-search.html#before_until[
before / until]
** link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-search.html#after_since[
after / since]

* Support exact match on file parts in
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-search.html#file[
file] operator.

* Query shortcuts
** `o` = `owner`
** `r` = `reviewer`
** `p` = `project`
** `f` = `file`

Daemon
~~~~~~


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-inspector.html[
Gerrit Inspector]: interactive Jython shell.
+
New `-s` option is added to the Daemon to start an interactive Jython shell for inspection and
troubleshooting of live data of the Gerrit instance.

Documentation
~~~~~~~~~~~~~


* The documentation is now
https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/rest-api-documentation.html#search-documentation.html[
searchable]:
+
On each documentation page there is search box in the right top corner
that allows to search in the documentation.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/user-review-ui.html[
Documentation of the new review UI].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/intro-project-owner.html[
New Project Owner Guide].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/index.html[
Newly structured documentation index].


Configuration
~~~~~~~~~~~~~

* New init step for installing the `Verified` label.

* link:http://code.google.com/p/gerrit/issues/detail?id=2257[Issue 2257]:
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-gerrit.html#repository.name.defaultSubmitType[
Default submit type] for newly created projects can be configured.

* `sshd_log` and `httpd_log` can use log4j configuration.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-gerrit.html#change.allowDrafts[
Draft workflow can be disabled].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-project-config.html#receive.checkReceivedObjects[
Project configuration for checking of received objects].

* link:http://code.google.com/p/gerrit/issues/detail?id=2318[Issue 2318]:
Allow the text of the "Report Bug" link to be configured.


Misc
~~~~

* The removal of reviewers and their votes is recorded as a change
message.

* link:http://code.google.com/p/gerrit/issues/detail?id=2229[Issue 2229]:
The change URL is returned on push if the change is updated.

* The topic is included into merge commit messages if all merged
changes have the same topic.

* Stable CSS class names.


Plugins
~~~~~~~


* Plugin API to invoke the REST API.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#screen[
Plugins can add entire screens to Gerrit].

* Plugins can have a
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#settings-screen[
settings screen] which is linked from plugin list screen.

* Support to edit
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#simple-project-specific-configuration[
project plugin configuration parameters] in the UI.

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-gerrit.html#plugins.allowRemoteAdmin[
Remote plugin administration is by default disabled].


Extension Points
^^^^^^^^^^^^^^^^


* Extension point to provide a "Message Of The Day".

* Validation for
** link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-validation.html#new-project-validation[
project creation].
** link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-validation.html#new-group-validation[
group creation].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#init_step[
Init steps can do initialization after the site is created].
** The `All-Projects` `project.config` can be read and edited

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#receive-pack[
Initialization of ReceivePack].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#post-receive-hook[
Registration of PostReceiveHooks].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#root-level-commands[
Registration of root level commands].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/dev-plugins.html#multiple-commands[
Multiple SSH commands can be bound to the same class].

* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/config-gerrit.html#database.dataSourceInterceptorClass[
DataSource Interception].


JavaScript Plugins
^^^^^^^^^^^^^^^^^^


* link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.9/js-api.html#self_on[
JavaScript Callbacks]
** Gerrit.on(\'history\', f)
** Gerrit.on(\'submitchange\', f)
** Gerrit.on(\'showchange\', f)

* `change_plugins` element on the new change screen that allows to
insert arbitrary HTML fragments from plugins.


Bug Fixes
---------


Access Rights
~~~~~~~~~~~~~


* Fix possibility to overcome BLOCK permissions.


Web UI
~~~~~~


* link:http://code.google.com/p/gerrit/issues/detail?id=2652[Issue 2652]:
Copy label approvals when cherry-picking change to same branch.

* link:http://code.google.com/p/gerrit/issues/detail?id=2662[Issue 2662]:
Limit file list in new change screen to files that were touched in new
patch set.

* link:http://code.google.com/p/gerrit/issues/detail?id=2308[Issue 2308]:
Show related changes in new change screen for merged changes if there
are open descendants.

* link:http://code.google.com/p/gerrit/issues/detail?id=2635[Issue 2635]:
Fix copying of download commands by 'Cmd-C' in Safari.

* link:http://code.google.com/p/gerrit/issues/detail?id=2178[Issue 2178]:
Fix background of reply box on new change screen getting transparent.

* link:http://code.google.com/p/gerrit/issues/detail?id=2362[Issue 2362]:
Show quick approve button only for current patch set.

* link:http://code.google.com/p/gerrit/issues/detail?id=2405[Issue 2405]:
Update `Patch Sets` drop-down panel when draft patch set is deleted.

* link:http://code.google.com/p/gerrit/issues/detail?id=2397[Issue 2397]:
Fix linkifying of topics that are set to a URL.

* link:http://code.google.com/p/gerrit/issues/detail?id=2151[Issue 2151]:
Fix overflowing of long lines in commit message block.

* link:http://code.google.com/p/gerrit/issues/detail?id=2401[Issue 2401]:
Fix truncated long lines in new side-by-side diff screen.

* link:http://code.google.com/p/gerrit/issues/detail?id=2225[Issue 2225]:
Display larger icons for Prev / Next and Up to Change links on new
side-by-side diff screen.

* link:http://code.google.com/p/gerrit/issues/detail?id=2340[Issue 2340]:
Fix selection in new side-by-side diff screen.

* link:http://code.google.com/p/gerrit/issues/detail?id=2409[Issue 2409]:
Show in new side-by-side diff screen updates of submodule links.

* link:http://code.google.com/p/gerrit/issues/detail?id=2481[Issue 2481]:
After showing a binary file in the unified diff screen switch back to
the side-by-side diff screen when the user navigates to the
next/previous file.

* link:http://code.google.com/p/gerrit/issues/detail?id=2417[Issue 2417]:
Respect base diff revision for files REST call.

* link:http://code.google.com/p/gerrit/issues/detail?id=2654[Issue 2654]:
Require the user to confirm setting the username.
+
Once the username has been set, it cannot be edited. This can cause
problems for users who accidentally set the wrong username. A
confirmation dialog now warns the user that setting the username is
permanent and the username is only set when the user confirms.

* link:https://code.google.com/p/gerrit/issues/detail?id=2635[Issue 2635]:
Fix copying from copyable label in Safari.


Secondary Index
~~~~~~~~~~~~~~~

* Fix Online Reindexing.

* Fix for full-text search with Lucene.
+
The full-text search was using a fuzzy query which used the edit
distance to find terms in the index close to the provided search term.
This produced bizarre results for queries like "message:1234".
+
Instead, use Lucene's QueryBuilder with an analyzer to convert a
full-text search word/phrase into a phrase query.

* link:http://code.google.com/p/gerrit/issues/detail?id=2281[Issue 2281]:
Reindex change after updating commit message.


REST
~~~~


* link:http://code.google.com/p/gerrit/issues/detail?id=2568[Issue 2568]:
Update description file during `PUT /projects/{name}/config`.


SSH
~~~


* link:http://code.google.com/p/gerrit/issues/detail?id=2516[Issue 2516]:
Fix parsing of label name on `review` command.

* link:http://code.google.com/p/gerrit/issues/detail?id=2440[Issue 2440]:
Clarify for review command when `--verified` can be used.


Plugins
~~~~~~~


* link:http://code.google.com/p/gerrit/issues/detail?id=2551[Issue 2551]:
Handle absolute URLs in the top level menu.

* link:http://code.google.com/p/gerrit/issues/detail?id=2391[Issue 2391]:
Respect servlet context path in URL for top menu items.


Other
~~~~~


* link:http://code.google.com/p/gerrit/issues/detail?id=2382[Issue 2382]:
Clean left over data migration after removal of TrackingIds table.


Upgrades
--------

* Update JGit to 3.4.0.201405051725-m7
+
This upgrade fixes the MissingObjectExceptions in Gerrit that are
described in link:http://code.google.com/p/gerrit/issues/detail?id=2025[
issue 2025].

* Update gwtjsonrpc to 1.5
* Update gwtorm to 1.13
* Update guava to 16.0

* Update H2 to 1.3.174
+
This version includes a fix for an LOB deadlock between reading and
updating LOB columns. This could lead to a deadlock between web and SSH
clients as described in
link:http://code.google.com/p/gerrit/issues/detail?id=2365[issue 2365].

* Update Jetty to 9.1.0.v20131115
* Update Servlet API to 3.1
* Update Lucene to 4.6.0
* Update GWT to 2.6.0


Plugins
-------

Replication
~~~~~~~~~~~

* Default push refSpec is changed to `refs/*:refs/*` (non-forced push).
+
The default push refSpec for the replication plugin has changed from `forced`
to `non-forced` push (was `+refs/*:refs/*` and now is `refs/*:refs/*`). This change
should not impact typical replication topologies where the slaves are read-only
and can be pushed by their masters only. If you wanted explicitly to overwrite
all changes on the slaves, you need to add a `push=+refs/*:refs/*` configuration
entry for each replication target.

* Support replication of HEAD updates.

* Stream events for ref replication.

* Replications failed due to "failed to lock" errors are retried.

* Configuration changes can be detected and replication is
automatically restarted.

Issue Tracker System plugins
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*WARNING:* The `hooks-*` plugins (`plugins/hooks-bugzilla`,
`plugins/hooks-jira` and `plugins/hooks-rtc`) are deprecated with
Gerrit 2.9.

There are new plugins for the integration with Bugzilla, Jira and IBM
Rational Team Concert:

* link:https://gerrit-review.googlesource.com/#/admin/projects/plugins/its-bugzilla[plugins/its-bugzilla]
* link:https://gerrit-review.googlesource.com/#/admin/projects/plugins/its-jira[plugins/its-jira]
* link:https://gerrit-review.googlesource.com/#/admin/projects/plugins/its-rtc[plugins/its-rtc]

The new issue tracker system plugins have a common base which is
link:https://gerrit-review.googlesource.com/#/admin/projects/plugins/its-base[plugins/its-base].

The configuration of the new plugins is slightly different than the
configuration of the old plugins because they use different section
names in the Gerrit configuration. For easy migration the new plugins
have an init step that allows to take over the configuration from the
old plugins during the Gerrit initialization phase.

New Features:

* The issue tracker integration can be enabled/disabled per project.
* Parent projects can enforce the issue tracker integration for their
  child projects.
* It can be configured for which branches of a project the issue
  tracker integration is enabled.
* Whether the issue tracker integration is enabled/disabled for a
  project can be changed from the ProjectInfoScreen in the Gerrit
  WebUI.
