Release notes for Gerrit 2.8.2
==============================

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

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


Lucene Index
------------

* Support committing Lucene writes within a fixed interval.
+
The `ramBufferSize` and `maxBufferedDocs` options control how often the
writer is flushed, but this does not fsync files on disk and thus
might not be permanent, particularly in a machine under heavy load.
+
As a result, commits to the index may not be completed, and updates may
be lost if the server goes down.
+
A new option `commitWithin` is added, to control how frequently the
indexes are committed.


General
-------

* Only add "cherry picked from" when cherry picking a merged change.
+
The "(cherry picked from commit ...)" line was being added in the commit
message when cherry picking from closed changes, which included abandoned.

* Fix PUSH permission check for draft changes.
+
It was not possible to block pushes to the `refs/drafts` namespace.

* Don't allow project owners to create branches if create is blocked.
+
Project owners were able to create branches through the WebUI, REST and SSH
even when the 'create reference' permission was actually blocked for them.

* link:https://code.google.com/p/gerrit/issues/detail?id=2397[Issue 2397]:
Remove quotes and trailing period from "topic edited" messages.
+
The quotes and trailing period were causing linkification to fail for topics
that were set to a URL.

* Check if user can read HEAD commit when resolving detached HEAD.
+
If HEAD was detached the `GetHead` REST endpoint refused to resolve HEAD
when the user was not a project owner.

* link:https://code.google.com/p/gerrit/issues/detail?id=2932[Issue 2932]:
Keep `status:closed` limit below MySQL Connector/J's hard limit.
+
Since MySQL Connector/J 5.1.21 does not allow limits above 50M rows
and aborts them with 'setMaxRows() out of range', we cannot use `MAX_VALUE`
as limit for plain `status:closed` queries.

* Fix IllegalArgumentException when running query with `limit:0` on secondary
index.
+
Running a query with `limit:0` when the secondary index is enabled was causing
an internal server error.

* link:https://code.google.com/p/gerrit/issues/detail?id=2331[Issue 2331]:
Make sure `change-merged` event contains correct patch set number.
+
When a change is submitted with the cherry-pick strategy, or when the
change is rebased with the "rebase if necessary" strategy, a new patch
set is created.  The newly created patch set was not being set in the
`change-merged` event.

* Guard against `diff.mnemonicprefix` in `commit-msg` hook.
+
When `diff.mnemonicprefix` was enabled in the git config, committing
changes with `git commit -v` caused the diff to be included in the
generated commit message.

* link:https://code.google.com/p/gerrit/issues/detail?id=2453[Issue 2453]:
Fix submit rule evaluation for non blocking labels.
+
Putting a negative score on a label configured as `NoBlock` was causing
the submit button to be disabled.

* link:https://code.google.com/p/gerrit/issues/detail?id=2331[Issue 2331]:
Allow to create branch with new commits.
+
Branches could not be created with a new commit which is not on other branches
already.

* Fix incompatibility between "Rebase if Necessary" and "copy scores".
+
When a project was set up with "Rebase if Necessary", one of its labels had
`copyAllScoresOnTrivialRebase` or `copyMaxScore`, and a change that actually
needed a trivial rebase was submitted, Gerrit first rebased the change, and in
the process copied the approval for the label.  It then copied all the
approvals, including the one already copied, which resulted in a constraint
violation on the database.

* Add `Implementation-Vendor` default manifest entry for plugins.
+
In buck, the `java_binary` rule merges manifest entries from dependent JARs
unless the input JAR possesses these entries itself.  This was causing some
plugins to display the wrong vendor information if they had dependency on
another JAR file that provided a `Implementation-Vendor` value.

* Remove dependency on joda time library in gerrit launcher.
+
The joda time library was being unnecessarily packaged in the root of
the gerrit.war file.

Change Screen / Diff Screen
---------------------------


* link:https://code.google.com/p/gerrit/issues/detail?id=2398[Issue 2398]:
Enable syntax highlighting for Groovy, Clojure, Lisp, Ruby and Perl.

* link:https://code.google.com/p/gerrit/issues/detail?id=2416[Issue 2416]:
Fix copy functionality in Firefox and Safari.
+
Ctrl-C/Cmd-C was activating the 'insert comment' feature, and preventing the
browser from copying the selected text to the clipboard.

* link:https://code.google.com/p/gerrit/issues/detail?id=2428[Issue 2428]:
Fix truncation of long lines in side-by-side diff.
+
Lines whose length exceeded the width of the window were being truncated
and only shown fully after zooming out/in on the browser.

* Fix handling of the enter key when editing the topic.
+
The enter key was causing the file diff view to open, instead of confirming
the topic edit.

* Fix wrong button being passed to the 'revert' action.
+
The action was using the cherry-pick button instead of the revert button.

* Improve the error message shown when cherry picking a change fails.
+
The error message "Could not create merge commit during cherry pick" was
confusing for users, and is replaced with simply "Cherry pick failed".

* Add newline on commit messages created by cherry picking a change in the UI
or via the REST API.
+
If a commit was cherry-picked from the UI or via the REST API, the
trailing newline on the end of the commit message was lost.

* link:https://code.google.com/p/gerrit/issues/detail?id=2405[Issue 2405]:
Update change to invalidate cache after deletion of draft revision.
+
When a non-current draft patch set was deleted no update of the change
was made, causing the change screen to not work properly because it
relied on cached data.

* Extend change screen's horizontal bars to full width.
+
This allows the title of the change message to have some padding within
the bar.

* Fix tab alignment to be correct width in side-by-side diff.
+
This fixes the tab width to be the user's preference, rather than
1 + user's preference when show tabs is enabled.

* Fill the browser width in side-by-side diff.
+
Filling the browser available space with each side of the diff at
50% size allows the user to more easily view long lines if they
have a wide display, and better fit on more narrow displays by
splitting the available width at 50%.

* Fire `comment-added` stream event even when mail notification is not sent.
+
Unchecking the "and send email" option on the change screen prevented the
`comment-added` event from being sent to the event stream.

* link:https://code.google.com/p/gerrit/issues/detail?id=2493[Issue 2493]:
Set uploader to current user in `patchset-created` event upon rebasing
a change in the UI.
+
When a change was rebased from the change screen, the `uploader` field
of the `patchset-created` event was incorrectly set to the original
change uploader, rather than the user that performed the rebase.

ssh
---


* Support for nio2 backend is removed.
+
The nio2 backend is link:https://issues.apache.org/jira/browse/SSHD-252[
broken in MINA SSHD].  Support is removed until the next release of MINA
SSHD in which it is fixed.

* link:https://code.google.com/p/gerrit/issues/detail?id=2424[Issue 2424]:
Add descriptions on commands that are disabled in slave mode.
+
Commands that are disabled on a server running in slave mode were being listed
with an empty description.

* Remove obsolete commands from slave mode commands list.
+
The `approve` and `replicate` commands, which no longer exist, were still being
listed in the available commands shown when running the ssh `gerrit` command
without any arguments on a server running in slave mode.

* Remove 'including replication' from the `show-queue` command description.
+
The `replication` command is provided by the replication plugin, so it is no
longer relevant to mention this in the description of a core command.

* Fix aliasing of SSH commands.

* link:https://code.google.com/p/gerrit/issues/detail?id=2515[Issue 2515]:
Fix internal server error when updating an existing label with `gerrit review`.

Replication Plugin
------------------


* Never replicate automerge-cache commits.
+
Commits in the `automerge-cache` namespace are used on the master to
improve performance of the diff UI.  They are not needed on remote
mirrors and it is wasteful to replicate them.

* link:https://code.google.com/p/gerrit/issues/detail?id=2420[Issue 2420]:
Fix failure to create missing remote repository via git:// protocol.
+
When replicating to a mirror over the anonymous git:// protocol and the
repository did not exist on the remote (i.e. if the remote was offline
when the repository was originally created), the replication failed with
a "remote repository error", rather than the expected "no repository".

* Improve info logging related to repository creation and deletion, and
differentiate between local and remote repository errors.

* Update documentation to clarify replication of refs/meta/config when
refspec is 'all refs'.

Upgrades
--------


* JGit is upgraded to 3.2.0.201312181205-r

Documentation
-------------


* Add missing documentation of the secondary index configuration.
+
Document that open and closed changes are indexed in separate indexes,
and for Lucene indexes the RAM buffer size and maximum buffered documents
can be configured.

* Correct the Gerrit download link.
+
The link on the documentation index was pointing to the Google Code page,
which has not been used for some time.

* Correct the description of the `revisions` field in the REST API's
`ChangeInfo` entity.

* Add a link from the plugin documentation to the validation listeners API
documentation.

* Remove double border around code snippets.

* Add border around tables.
