Release notes for Gerrit 2.8.5
==============================

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

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


Bug Fixes
---------


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


* Fix deadlocks on index shutdown.


Change Screen
~~~~~~~~~~~~~


* Only permit current patch set to edit the commit message.
+
Do not allow users to replace a more recent patch set with an older
patch set when there is a race between the web UI and the command
line git client.

* Prevent draft changes from being abandoned.
+
When a draft change was abandoned it was published to all
users by setting the status to ABANDONED.  Restoring the change
effectively published the change, as the status was set to NEW.

* Don't show the submit button for draft patch sets.
+
The button was enabled for all open changes, but if the patch set
was a draft, pressing it resulted in an error.

* Only reset the commit message text on cancel.
+
Allow the user to begin editing the commit message, dismiss the
box by clicking outside of it (e.g. to copy part of a file name
from the Files table), and then re-open the current draft text
without resetting the box.
+
Only reset the box when the user explicitly clicks Cancel.

* Fix failure to load side-by-side diff due to "ISE EditIterator out of bounds"
error.

ssh
~~~

* Upgrade SSHD to version 0.11.0.
+
Fixes https://code.google.com/p/gerrit/issues/detail?id=2406[Issue 2406]:
"git clone" hangs after 100% resolving deltas with git over SSH.
+
Fixes a number of other issues including a
link:https://issues.apache.org/jira/browse/SSHD-307[null pointer exception]
that could cause ssh commands to hang.

* Upgrade bouncycastle to version 1.49.
+
Required by the SSHD upgrade.

* Re-enable nio2 backend.
+
The nio2 backend was disabled in Gerrit version 2.8.4 because of a
link:https://issues.apache.org/jira/browse/SSHD-252[bug in SSHD].  That bug
was fixed in SSHD version 0.10.0, so now we can re-enable nio2.

Misc
~~~~


* Keep old timestamps during data migration.
+
Migrating the change database through schema 77, which was introduced in
Gerrit 2.6, was causing patch set approval timestamps to be changed.

* link:https://code.google.com/p/gerrit/issues/detail?id=2607[Issue 2607]:
Fix incorrect "commit already exists (in the project)" error.

* link:https://code.google.com/p/gerrit/issues/detail?id=2569[Issue 2569]:
Enable automatic close changes on `refs/meta/config`.
+
Changes pushed for review on `refs/meta/config` and then force pushed
into the repository were not being automatically closed.

* Do not refresh group list if filter did not change.
+
The group 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.

* Paginate the group list screen.
+
The group list screen now uses pagination. The number of groups displayed is
determined by the 'Maximum Page Size' user preference.
+
Option 'S' is added to the groups REST API to support query offset.

