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://gerrit-releases.storage.googleapis.com/gerrit-2.8.4.war[
https://gerrit-releases.storage.googleapis.com/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].
