= Release notes for Gerrit 2.1.5

Gerrit 2.1.5 is now available:

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

This is primarily a bug fix release to 2.1.4, but some additional
new features were included so its named 2.1.5 rather than 2.1.4.1.

== Upgrade Instructions

If upgrading from version 2.1.4, simply replace the WAR file in
`'site_path'/bin/gerrit.war` and restart Gerrit.

If upgrading from version 2.1.3 or earlier, stop Gerrit, use
`java -jar gerrit.war init -d 'site_path'` to upgrade the schema,
and restart Gerrit.

== New Features

=== Web UI
* issue 361 Enable commenting on commit messages
+
The commit message of a change can now be commented on inline, and
even compared between patch sets, just like any other file contents.
The message is presented as a magical file called 'Commit Message',
in the first row of every change.

* issue 312 Implement 'Restore Change' to undo 'Abandon Change'
+
Any user who can abandon a change (the change owner, project owner,
or any site administrator) can now restore the change from Abandoned
status back to Review in Progress.

* issue 583 Enable/disable download protocols
+
The new download section in `gerrit.config` controls how the patch
set download links are presented in the web UI.  Administrators
can use this section to enable `repo download`, `git://`, or to
disable `http://` style URLs.  This section replaces the older
repo.showDownloadCommand.

* issue 499 Display the size of a patch (lines added/removed)
+
A 'diffstat' is shown for each file, summarizing the size of the
change on that file in terms of number of lines added or deleted.

=== Email Notifications
* issue 452 Include a quick summary of the size of a change in email
+
After the file listing, a summary totaling the number of files
changed, lines added, and lines removed is displayed.  This may
help reviewers to get a quick estimation on the time required for
them to review the change.

== Bug Fixes

=== Web UI
* issue 639 Fix keyboard shortcuts under Chrome/Safari
+
Keyboard shortcuts didn't work properly on modern WebKit browsers
like Chrome and Safari.  We kept trying to blame this on the browser,
but it was Gerrit Code Review at fault.  The UI was using the wrong
listener type to receive keyboard events in comment editors.  Fixed.

* Make 'u' go up to the last change listing
+
Previously the 'u' key on a change page was hardcoded to take
the user to their own dashboard.  However, if they arrived at the
change through a query such as `is:starred status:open`, this was
quite annoying, as the query had to be started over again to move
to the next matching change.  Now the 'u' key goes back to the
query results.

* issue 671 Honor user's syntax coloring preference in unified view
+
The user's syntax coloring preference was always ignored in the
unified view, even though the side-by-side view honored it.  Fixed.

* issue 651 Display stars in dependency tables
+
The 'Depends On' and 'Needed By' tables on a change page did not
show the current user's star settings, even though the star icon
is present and will toggle the user's starred flag for that change.
Fixed.

=== Access Control
* issue 672 Fix branch owner adding exclusive ACL
+
Branch owners could not add exclusive ACLs within their branch
namespace.  This was caused by the server trying to match the leading
`-` entered by the branch administrator against patterns that did
not contain `-`, and therefore always failed.  Fixed by removing
the magical `-` from the proposed new specification before testing
the access rights.

* '@' in ref specs shouldn't be magical.
+
The dk.brics.automaton package that is used to handle regular
expressions on branch access patterns supports '@' to mean
"any string".  We don't want that behavior.  Fixed by disabling
the optional features of dk.brics.automaton, thereby making '@'
mean a literal '@' sign as expected.

* issue 668 Fix inherited Read Access +2 not inheriting
+
Upload access (aka Read +2) did not inherit properly from the parent
project (e.g. '\-- All Projects \--') if there was any branch level
Read access control within the local project.  This was a coding
bug which failed to consider the project inheritance if any branch
(not just the one being uploaded to) denied upload access.

=== Misc.
* issue 641 Don't pass null arguments to hooks
+
Some hooks crashed inside of the server during invocation because the
`gerrit.canonicalWebUrl` variable wasn't configured, and the hook
was started out of an SSH or background thread context, so the URL
couldn't be assumed from the current request.  The bug was worked
around by not passing the `\--change-url` flag in these cases.
Administrators whose hooks always need the flag should configure
`gerrit.canonicalWebUrl`.

* issue 652 Fix NPE during merge failure on new branch
+
Submitting a change with a missing dependency to a new branch
resulted in a NullPointerException in the server, because the server
tried to create the branch anyway, even though there was no commit
ready because one or more dependencies were missing.  Fixed.

* Fix NPE while matching `file:^` pattern on deleted files
+
Sending email notifications crashed with NullPointerException if the
change contained a deleted file and one or more users had a project
watch on that project using a `file:^` pattern in their filter.
Fixed.

* issue 658 Allow to use refspec shortcuts for push replication
+
A push refspec of `refs/heads/\*` in replication.config is now
supported as a shorthand notation for `refs/heads/\*:refs/heads/\*`.

* issue 676 Fix clearing of topic during replace
+
The topic was cleared if a replacement patch set was uploaded without
the topic name.  The topic is now left as-is during replacement
if no new topic was supplied.  If a new topic is supplied, it is
changed to match the new topic given.

* Allow ; and & to separate parameters in gitweb
+
gitweb.cgi accepts either ';' or '&' between parameters, but
Gerrit Code Review was only accepting the ';' syntax.  Fixed
to support both.

=== Documentation
* Fixed example for gerrit create-account.
* gerrit.sh: Correct /etc/default path in error message

== Version

2765ff9e5f821100e9ca671f4d502b5c938457a5
