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 those that were
abandoned.

* link:https://code.google.com/p/gerrit/issues/detail?id=2513[Issue 2513]:
Improve the "This patchset was cherry picked" message.
+
When cherry-picking a change, the message "This patchset was cherry picked to
change: <Change-Id>" was added as a message on the change.  This was not very
useful as the Change-Id is the same on the newly created change.
+
The message is changed to "This patchset was cherry picked to branch <branch
name> as commit <SHA1>".

* 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=2392[Issue 2392]:
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=2441[Issue 2441]:
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.

* link:https://code.google.com/p/gerrit/issues/detail?id=2498[Issue 2498]:
Handle null commits when updating submodules.
+
In some edge cases it was possible that a null commit would exist, and this
caused a crash when updating submodules.

* Update and insert comments/approvals in a single step.
+
When a review includes both new label scores and updates to existing label
scores, use `upsert` to record them all at the same time, rather than in
separate `update` and `insert` operations.

* link:https://code.google.com/p/gerrit/issues/detail?id=2374[Issue 2374]:
Prevent duplicate commits in same project when uploading to `refs/changes/n`.
+
Under certain circumstances, when pushing to `refs/changes/n`, the same
commit could be pushed onto multiple changes even if the changes were on the
same branch.

* 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.

* Display a warning instead of an error when the intraline diff times out.
+
Displaying an error was confusing for users and administrators.

* link:https://code.google.com/p/gerrit/issues/detail?id=2514[Issue 2514]:
Display an error message when commentlink regex is invalid.
+
If a commentlink was configured with an invalid regular expression, for example
an expression that is valid in Java but not in JavaScript, the change screen
failed to load.
+
Now, an error message will be displayed in the UI.

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.
