= Release notes for Gerrit 2.8.4

There are no schema changes from link:ReleaseNotes-2.8.3.html[2.8.3].

Download:
link:https://www.gerritcodereview.com/download/gerrit-2.8.4.war[
https://www.gerritcodereview.com/download/gerrit-2.8.4.war]


== Bug Fixes


=== Secondary Index


* Disable `commitWithin` when running Reindex.
+
If `commitWithin` was set to a low value, it caused poor performance
when running the Reindex program on sites with a large amount of changes.
+
The `commitWithin` setting is now disabled from within Reindex by overriding
the configuration with '-1'. Index updates are auto-flushed but not
auto-committed, which is the least safe but the most efficient for reindexing
the entire site.

* Fix memory leak in Lucene index.
+
`SubIndex.NrtFuture` objects were being added as listeners of `searchManager`
and never released.

=== Change Screen


* link:https://code.google.com/p/gerrit/issues/detail?id=2456[Issue 2456]:
Respect the comment visibility preference in the new change screen.
+
The "Expand All" and "Collapse All" settings now work like they did on
the old change screen.

* link:https://code.google.com/p/gerrit/issues/detail?id=2538[Issue 2538]:
Don't show the "Patch File" download for merge commits.
+
The patch file download does not work for commits with more than one
parent (i.e. merges) and results in an error being displayed. Now the
link is not shown for merge commits; a solution for merge patches will
be investigated for future releases.

* link:https://code.google.com/p/gerrit/issues/detail?id=2526[Issue 2526]:
Hide the `refs/heads/` prefix in branch suggestion list for cherry-picks.
+
Regular branches like `refs/heads/stable/` will now be displayed as
just `stable` in the suggestion list when cherry-picking a change in the
Web UI.

* Disable the "Save" button after it is pressed when editing the commit
message.
+
The "Save" button was not being disabled, and could be pressed multiple
times while the message was being saved, resulting in multiple new patch
sets being created.

* Fix syntax highlighting for shell files in new side-by-side diff.

* Fix inconsistent behavior of diff view when viewing binary files.
+
In the new change screen, if the user clicked on a binary file in
the file list, the unified view was used. Then when navigating to
a previous or next file that is not binary, the diff view stayed in
the old unified setting.

* Make the skip bar more user friendly in side-by-side diff.
+
The whole "skipped xxx common lines" text is now a link, rather
than just the number.

* Show previous and next file shortcut keys in new side-by-side
navigation arrow tooltips.
+
In the top right corner of a file the navigation cluster has a
tooltip on the up arrow but did not show the tooltip on the left
or right arrows.

=== Plugins


* Fix ChangeListener auto-registered implementations.
+
Add missing `@ExtensionPoint` in `ChangeListener` so implementors can
use `@Listen` to register.

* Escape dollar sign in plugin manifest entries.
+
Plugins could be built, but not loaded, if they had any manifest entries
that contained a dollar sign.

=== Misc


* link:https://code.google.com/p/gerrit/issues/detail?id=2564[Issue 2564],
link:https://code.google.com/p/gerrit/issues/detail?id=2571[Issue 2571]:
Emit ref-updated event when editing project access via Web UI.

* link:https://code.google.com/p/gerrit/issues/detail?id=2557[Issue 2557]:
By default don't allow admins to create new branches by push.
+
When pushing changes it is easy to make a typo in the refspec and in this case
new branches should not be created. If administrators want to create branches
by push they should explicitly assign themselves the needed access rights.

* Do not refresh project list if filter did not change.
+
The project list was being refreshed on every key event even if the
filter did not change, e.g. moving the cursor inside the text entry was
causing the list to update unnecessarily.

* Fix mail thread getting stuck when waiting for response from SMTP server.
+
It is now possible to configure the default thread pool size, the size of
the thread pool for sending emails, and the SMTP server connection timeout.

* link:https://code.google.com/p/gerrit/issues/detail?id=2215[Issue 2215]:
Paginate the project list screen.
+
The project list screen was taking a long time to render over a large
amount of projects (1,000+) and with even larger number of projects
(3,000+), it could make the browser unresponsive.
+
The project list screen now uses pagination to resolve this issue. The
number of projects displayed is determined by the 'Maximum Page Size'
user preference.
+
Option 'S' is added to the projects REST API to support query offset.

* link:https://code.google.com/p/gerrit/issues/detail?id=2599[Issue 2599]:
Always auto confirm adding reviewers in `set-reviewers` SSH command.
+
If a group contains more than 'addreviewer.maxWithoutConfirmation'
members, adding it as reviewer to a change requires a confirmation. A
user should only be asked for the confirmation when reviewers are
added from the Web UI but not when the `set-reviewers` SSH command is
used.

* Set uploader to current user in `patchset-created` event upon cherry-picking.
+
When using the Web UI (both old and new change screens) to cherry-pick a
change to a branch that already has this change (e.g. cherry-picking
on the same branch to get rid of dependencies), the corresponding
`patchset-created` event had its `patchSet.uploader` set to the change's
owner instead of the current user. It is now set to the current user,
so stream-events consumers can properly detect who uploaded the
rebased patch set.

=== Documentation


* link:https://code.google.com/p/gerrit/issues/detail?id=1273[Issue 1273]:
Update the MySQL documentation concerning character sets.
+
The setup documentation is updated to mention that there is no need to use
latin1 encoding if you are using an engine other than MyISAM.

* Use consistent grammatical tense in ssh command descriptions.

* Add more detail about `refs/drafts` in
link:https://gerrit-documentation.storage.googleapis.com/Documentation/2.8.4/access-control.html[
access control documentation].
