Release notes for Gerrit 2.1.7
==============================

Gerrit 2.1.7 is now available:

link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.1.7.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.1.7.war]

Schema Change
-------------
*WARNING* This release contains multiple schema changes.  To upgrade:
----
  java -jar gerrit.war init -d site_path
----

To export prior review information into `refs/notes/review` branches
within each Git repository:
----
  java -jar gerrit.war ExportReviewNotes -d site_path
----

Memory Usage Increase
---------------------
*WARNING* The JGit delta base cache, whose size is controlled by
`core.deltaBaseCacheLimit`, has changed in this release from being a
JVM-wide singleton to per-thread. This alters the memory usage, going
from 10M for the entire JVM to 10M per concurrent operation. The
change improves performance on big repositories, but may need a larger
`container.heapLimit` if the number of concurrent operations is high.

New Features
------------

Change Data
~~~~~~~~~~~
* issue 64 Create Git notes for submitted changes
+
Git notes are automatically added to the `refs/notes/review`.

Query
~~~~~
* Search project names by substring
+
Entering a word with no operator (for example `gerrit`) will be
expanded to all projects whose names contain the string 'gerrit'.

* issue 722 ownerin and reviewerin search predicates
+
New search predicates `ownerin:'GROUP'` and `reviewerin:'GROUP'`
search for changes whose owner or that has a reviewer in (or not
in if prefixed with `-`) the specified group.

Web UI
~~~~~~
* Add reviewer/verifier name beside check/plus/minus
+
Change lists (such as from a search result, or in a user's dashboard)
can now optionally display the name of the reviewer or verifier who
gave the score being shown in the summary column. This is an optional
per-user preference that can be enabled in the Settings screen.

* Add a "revert change"-button to a submitted patchset
+
Clicking "Revert Change" creates a new change with the inverse of
the submitted patch set ready for review and submission. This makes
it easy to undo a build-breaking change right from the web UI.

* issue 194 Diff patch sets
+
Change pages now offer a selection box, "Old Version History",
to compare patch sets against one another and view only the files
that differ between two patch sets. This new feature can speed up
re-reviewing a change.

* issue 913 Support different color palette when not signed in
+
Site administrators can configure a different theme in gerrit.config for
the signed-in and signed-out states, making it more obvious to site users
they are currently signed-in (or not).

* Add parent info to each change screen Patch Set
+
This mirrors the data shown in the 'Commit Message' file, making
it easy to identify the parent(s) of the commit without opening
up the Commit Message or gitweb.

* Remove the SSH key loading applet
+
The Java based SSH key loading applet is no longer included as part of
the Gerrit Code Review interface. Users need to copy and paste their
SSH public key files by hand.


SSH Commands
~~~~~~~~~~~~
* issue 674 Add abandon/restore to `gerrit review`
* Add `gerrit version` command

Change Upload
~~~~~~~~~~~~~
* Display a more verbose "you are not author/committer" message

Documentation
~~~~~~~~~~~~~
* Detailed error message explanations
+
Most common error messages are now described in detail in the
documentation under 'User Guide', 'Error Messages'.  Each error is
explained, along with possible courses of action for an end-user to
resolve the issue.

* issue 905 Document reverse proxy using Nginx
* Updated system scaling data in 'System Design'

Outgoing Mail
~~~~~~~~~~~~~
* Optionally add Importance and Expiry-Days headers
+
New gerrit.config variable `sendemail.importance` can be set to `high`
or `low` to classify outgoing mail, and `sendemail.expiryDays` can be
set to suggest clients should automatically expire or expunge messages
this many days after being sent.

* Add support for SMTP AUTH LOGIN

Administration
~~~~~~~~~~~~~~
* Group option to make group visible to all users
+
A new group option permits the group to be visible to all users,
rather than just its members. Some sites may find this useful for
a project owners group, to help users contact the relevant folks.

* Group option to only email change authors on updates
+
A new group option causes all users who are a member of that group to
only send email notifications to change authors, excluding reviewers
and watchers. This can be useful for automated build and testing users
to reduce the amount of email sent to reviewers.

* Hide non-visible groups from suggestion service
+
Groups that are not visible to a user are not shown as suggestions in
contexts where a group name completion is supported.  The previously
mentioned 'make group visible to all users' flag can be used on a
per-group basis to expose groups to everyone.

* Use suggest.accounts to control user completion suggestions
+
The new `suggest.accounts` configuration variable in gerrit.config
can control how suggestions for users are offered.

* Permit groups to be members of other groups
+
Groups can now be a member of another group, users are automatically
a member of the transitive closure of their group membership.

* READ +3 permission required to upload merges
+
The new READ +3 permission is required to upload merge commits. Users
with only READ +2 permission may upload new changes, but not merges.
The schema upgrade will automatically convert any current READ +2
access lines to be READ +3 to maintain prior behavior.

* "Show Inherited Rights" checkbox in Project Access
+
This checkbox enables showing or hiding the lines that are inherited
from the parent project. This makes it easier to find the rules that
are unique to the project being viewed.

* Allow single letter usernames
+
Username requirements are relaxed to permit single letter usernames.

* Fine-grained control over authentication cookie
+
Site administrators can now set `auth.cookieSecure` to request
browsers only send the cookie over https:// connections, preventing
eavesdropping.
+
Site administrators can now set `auth.cookiePath` to override the
path used for the authentication cookie, which may be necessary if
a reverse proxy maps requests to the managed gitweb.

Replication
~~~~~~~~~~~
* Add adminUrl to replication for repository creation
+
Replication remotes can be configured with `remote.name.adminUrl` to
indicate an SSH path for repository creation that is different from
the normal push URL in `remote.name.url`. The adminUrl can be used by
Gerrit to create a new repository when the normal URL is a non-SSH
URL, such as git:// or http://.

* Support HTTP authentication for replication
+
Replication can now be performed over an authenticated smart HTTP
transport, in addition to anonymous Git and authenticated SSH.

Misc.
~~~~~
* Alternative URL for Gerrit's managed Gitweb
+
The internal gitweb served from `/gitweb` can now appear to be from a
different URL by using a reverse proxy that does URL rewriting.

* Internal dependencies updated
+
Updated H2 Database to 1.2.147, PostgreSQL JDBC Client to 9.0-801,
openid4java to 0.9.6, ANTLR to 3.2, GWT to 2.1.1, JSch to 0.1.44, Gson
to 1.6, Apache Commons Net to 2.2, Apache Commons Pool to 1.5.5, JGit
to 0.12.1.53-g5ec4977, MINA SSHD to 0.5.1-r1095809.

Bug Fixes
---------

Web UI
~~~~~~
* issue 853 Incorrect side-by-side display of modified lines
+
A bug in JGit lead to the side-by-side view displaying wrong and
confusing output of modified lines. This bug also caused some
automatic merges to be carried out incorrectly, usually resulting in
compile failures. Fixed.

* Disallow negative/zero columns in difference views
+
Previously a negative or zero value in the number of columns field
would break the user's account and prevent them from viewing any file
differences through the web UI. Values less than 1 are now rejected,
and existing broken accounts will work again by resetting to a sane
column count.

* Fix branches table displaying symbolic references (e.g. HEAD).
+
In the project's "Branches" tab symbolic references like HEAD always
displayed the wrong target name. Fixed to display the target name of
the reference.

* Disallow deletion of HEAD and targets of symbolic refs
+
Deleting the target of a symbolic reference causes the symbolic to
become dangling, and it becomes useless.

* Prevent creating 'refs/for/branch' in web UI.

* issue 804 Display proper error message on invalid group
+
Attempting to browse a group that does not exist or that is not
visible to the current user now displays a proper error message,
instead of a scary generic "Application Error, Server Error".

* issue 822 Up To Change link activates last browsed patch set
* issue 846 Disable buttons during RPCs
* issue 915 Always display button text in black
* issue 946 Make sure that ENTER works in all text fields
* issue 963 Go back to change screen if 'Publish and Submit' fails
* Enable "Sign Out" when auth.type = CLIENT_SSL_CERT_LDAP.
* Fix handling of "Session Expired" with SSL certificates.
* Fix compatibility with recent releases of Gitweb.
* Fix "review" link in Gitweb integration.
* Always display button text in black
* Always disable content merge option if user can't change project

commit-msg Hook
~~~~~~~~~~~~~~~
* issue 922 Fix commit-msg hook to run on Solaris

Outgoing Mail
~~~~~~~~~~~~~
* issue 780 E-mail about failed merge should not use Anonymous Coward
+
Some email was sent as Anonymous Coward, even when the user had a
configured name and email address. Fixed.

* Fix calculation of project owners
+
When sending out new changes for review, Gerrit automatically
tries to address the project owners on the To line of the outgoing
message. This sometimes included the owner of a branch. Fixed.

* Do not email reviewers adding themselves as reviewers
* Fix comma/space separation in email templates

Pushing Changes
~~~~~~~~~~~~~~~
* Avoid huge pushes during refs/for/BRANCH push
+
With Gerrit 2.1.6, clients started to push possibly hundreds of
megabytes for what should be a tiny patch set changing 1 line of 1
file. This large push was caused by the server advancing ahead of the
client (e.g. due to another change being submitted) and the client not
having fetched the new version. Fixed by adding some recent history to
the advertisement so that clients don't have to upload the entire
project for a small change.

* issue 414 Reject pushing multiple commits with same Change-Id
+
If multiple new commits are uploaded to a refs/for/ branch and
they have the same Change-Id, the push is now rejected.  Within
a project, the Change-Id should be unique and users should either
squash the commits, or modify them to use unique Change-Ids.

* issue 635 Match Change-Id by project and branch combination
* issue 635 Auto close changes by Change-Id on same branch only
+
Changes are automatically closed during direct push to branch only if
the Change-Id line matches and the branch name matches. Previously
changes were closed automatically if only the Change-Id matched,
making it difficult to cherry-pick changes across branches.

* issue 947 Disallow to push to non-connected target
+
If a repository stores disconnected history graphs on different
branches, changes may only be pushed to the correct branch.

* Always do Change-Id checks on receiving commits
+
Ensure Change-Ids aren't incorrectly used, even if the project does
not require them to be present.  Previously some validity checks were
only performed if the project required Change-Id lines.

* Make Change-Id requirement applicable only to reviews
+
Change-Ids are not required when directly pushing to a branch. This
permits projects that normally require Change-Ids to still perform
direct branch pushes for updates received from an upstream project
that does not use Change-Ids.

* Reject invalid Change-Id lines
+
Severely malformed Change-Id lines were previously accepted by the
server. These are now rejected.

* Fix error message returned on push to closed change
+
If a commit with a Change-Id was pushed, and the corresponding change
was already closed, the server incorrectly errored out with "No new
changes". Now it reports the change is closed and does not accept a
new patch set.

* Fix error message for rejecting a change of another project
+
Instead of saying 'change not found' when pushing to a commit to
a refs/changes/NNNN reference that belongs in another project, the
error now indicates the change belongs to another project.

* Better help message when commit message is malformed
+
If the commit message is badly formatted Gerrit displays an error
message to the client. This message has been extended to offer
suggestions on how to correct the commit message.

* Log warning on 'change state corrupt' error
+
If a change state corrupt error is reported to a client, there was
no mention if it on the server error log. Now it is reported so the
site administrator also knows about it.

SSH Commands
~~~~~~~~~~~~
* issue 755 Send new patchset event after its available
* issue 814 Evict initial members of group created by SSH
* issue 879 Fix replication of initial empty commit in new project
* Disallow setting a project as parent for itself
* Automatically create user account(s) as necessary
* Move SSH command creation off NioProcessor threads

Administration
~~~~~~~~~~~~~~
* Enable git reflog for all newly created projects
+
Previously branch updates were not being recorded in the native Git
reflogs ($GIT_DIR/logs/refs/heads) due to a misconfiguration on new
projects created by gerrit create-project. Fixed.

* Fix IllegalArgumentException caused by non-ASCII user names
+
An invalid username is now always reported in UTF-8.

* PostgreSQL: conditional installation of PL/pgSQL.
+
Conditional installation is needed to install Gerrit on PostgreSQL 9.

* issue 961 Fix NPE on Gerrit startup if mail.from is invalid
* issue 966 Enable git:// download URLs if canonicalGitUrl set
* Stop logging 'keepalive@jcraft.com' errors in error_log
* gerrit.sh: Fix issues on SuSE Linux
* gerrit.sh: Fix issues on Solaris
* gerrit.sh: Support spaces in JAVA_HOME

Documentation
~~~~~~~~~~~~~
* issue 800 documentation: Show example of review -m
* issue 896 Clarify that $\{name\} is required for replication.
* Fix spelling mistake in 'Searching Changes' documentation
* Fix spelling mistake in user-upload documentation
* Document cache diff_intraline
* Document change set dependencies and cherry-pick
* Include user in scp commands to copy commit hook
* Adjust documentation to build with current AsciiDoc version
