Release notes for Gerrit 2.1.6
==============================

Gerrit 2.1.6 is now available:

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

Schema Change
-------------

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


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

Web UI
~~~~~~
* issue 312 Abandoned changes can now be restored.
* issue 698 Make date and time fields customizable
* issue 556 Preference to display patch sets in reverse order
* issue 584 Allow deleted and/or uncommented files to be skipped

* Use HistogramDiff for content differences
+
HistogramDiff is an adaptation of Bram Cohen's Patience Difference
algorithm, and was recently included in the upstream JGit project.
Patience Difference tends to produce more readable differences for
source code files, and JGit's HistogramDiff implementation tends to
run several times faster than the prior Myers O(ND) algorithm.

* Automatic merge file content during submit
+
Project owners can now enable file-level content merge during submit,
allowing Gerrit to automatically resolve many path conflict cases.
This is built upon experimental merge code inherited from JGit,
and is therefore still experimental in Gerrit.

Change Query
~~~~~~~~~~~~
* issue 688 Match branch, topic, project, ref by regular expressions
+
Similar to other features in Gerrit Code Review, starting any of these
expressions with \^ will now treat the argument as a regular
expression instead of an exact string match.

* Search changes by commit messages with `message:` operator.

* issue 729 query: Add a \--all-approvals option to queries
+
The new flag includes approval information for all patch sets in the
resulting query output.

Notifications
~~~~~~~~~~~~ 
* Customize email notification templates
+
Email notifications are now driven by the Velocity template engine,
and may be modified by the site administrator by editing a template
file under `'$site_path'/etc/mail`.

* issue 311 Clarify email texts/subject
+
The default email notification formatting was changed to make the
subject lines and message bodies more consistent, and easier to
understand.

* issue 204 Add project list popup under Settings > Watched Projects
+
The project list panel makes it easier for users to browse all
projects they have at least READ +1 access to, and add them to their
watched project set so notifications can be configured.

* stream-event support for all ref-update events
+
Whenever a ref is updated via either a direct push to a branch or a
Gerrit change submission, Gerrit will now send a new "ref-updated"
event to the event stream.

User Management
~~~~~~~~~~~~~~~
* SSO via client SSL certificates
+
A new auth.type of CLIENT_SSL_CERT_LDAP supports authenticating users
using client SSL certificates.  This feature requires using the
embedded Jetty web server with SSL enabled, and an LDAP directory to
lookup individual account information.

* issue 503 Inactive accounts may be disabled.
+
Administrators can manually update the accounts table, setting
inactive = `Y` to mark user accounts inactive.  Inactive accounts
cannot sign-in, cannot be added as a reviewer, and cannot be added
to a group.

* Improve the no-interactive-shell error message over SSH
+
Instead of giving a short 'no shell available' error, Gerrit Code
Review now prints a banner letting the user know they have
authenticated successfully, interactive shells are disabled, and how
to clone a hosted project:
+
----
$ ssh -p 29418 review.example.com

  ****    Welcome to Gerrit Code Review    ****

  Hi A. U. Thor, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://author@review.example.com:29418/REPOSITORY_NAME.git

Connection to review.example.com closed.
----

* Configure SSHD maxAuthTries, loginGraceTime, maxConnectionsPerUser
+
The internal SSH daemon now supports additional configuration
settings to reduce the risk of abuse.

Administration
~~~~~~~~~~~~~~
* issue 558 Allow Access rights to be edited by clicking on them.

* New 'Project Owner' system group to define default rights
+
The new system group 'Project Owners' can be used in access
rights to mean any user that is a member of any group that
has the 'Owner' access category granted within that project.
This system group is primarily useful in higher level projects
such as '\-- All Projects \--' to define standard access rights
for all project owners.

* issue 557 Allow rejection of changes without Change-Id line.
+
Project owners can set a flag to require all commits to include
the Gerrit specific 'Change-Id: I...' line during initial upload,
reducing the risk of confusion when amends need to occur to
incorporate reviewer feedback.

* issue 613 create-project: Add --permissions-only option
+
The new flag skips creating the associated Git repository, making the
new project suitable for use as a parent to inherit permissions from.

* create-project: Optionally create empty initial commit
+
The `repo` tool used by Android doesn't like to clone an empty Git
repository, making it difficult to setup a review for the initial file
contents.  create-project can now optionally create an empty initial
commit, permitting repo to sync the empty project.

* Block off commands on a server for certain user groups.
+
The upload.allowGroup and receive.allowGroup settings in gerrit.config
can be used to restrict which users can perform git clone/fetch or git
push on this server.  This can be useful if clone/fetch should be
limited to only site administrators, while normal users are supposed
to use to less expensive mirror servers.

* issue 685 Define gerrit.replicateOnStartup to control replication
+
The automatic replicate every project action that occurs during server
startup can now be disabled by setting replicateOnStartup = false.
This is primarily useful for sites with extremely large numbers of
projects and replication targets, but runs the risk of having a target
be out of date relative to the master server.

* New non-blocking function category "NoBlock"
+
Site defined approval categories may now use the function "NoBlock"
to permit scoring without blocking submission.  This is mostly
useful for automated tools to provide optional feedback on a change.

* Ability to reject commits from entering repository
+
The Git-note style branch `refs/meta/reject-commits` can be created
by the project owner or site administrator to define a list of
commits that must not be pushed into the repository.  This can be
useful after performing a project-wide filter-branch operation to
prevent the older (pre-filter-branch) history from being reintroduced
into the repository.

Bug Fixes
---------

Web UI
~~~~~~
* issue 498 Enable Keyboard navigation after change submit
* issue 691 Make ']' on last file go up to change
* issue 741 Make ENTER work for 'Create Group'
* issue 622 Denote a symbolic link in side-by-side viewer
* issue 612 Display empty branch list when project has no repository
* issue 672 Fix deleting exclusive branch level rights
* issue 645 Display 'No difference' between unchanged patchsets
* Display groups as links to group information
* Remove ctrl-d keybinding to discard comment, honor browser default
* Do not auto enable save buttons, wait for changes to be made
* Disable 'Create Group' button if group name not entered
* Show commit message in PatchScreen if old patch sets are compared
* Fixed a number of focus and shortcut bugs in Firefox, Chrome

* issue 487 Work around buggy MyersDiff by killing threads
+
MyersDiff sometimes locked up in an infinite loop when computing
the intraline difference information for a file.  These threads
are now killed after an administrator specified timeout
(cache.diff_intraline.timeout, default is 5 seconds).  If the
timeout is reached the file content is displayed without intraline
differences.  This offers reduced functionality to the end-user, but
prevents the "path of death" which usually took down a Gerrit server.

* Hide access rights not visible to user
+
Users were able to view access rights for branches they didn't
actually have READ +1 permission on.  This may have leaked
information about branches and/or groups to users that shouldn't
know about code names contained within either string.  Users that
are not project owners may now only view access rights for branches
they have at least READ +1 permission on.

Change Query
~~~~~~~~~~~~
* issue 689 Fix age:4days to parse correctly
* Make branch: operator slightly less ambiguous

Push Support
~~~~~~~~~~~~
* issue 695 Permit changing only the author of a commit
+
Correcting only the author of a change failed to upload the new patch
set onto the existing change, as neither the message nor the files
were modified.  Fixed.

* issue 576 Allow Push Branch +3 to force replace a tag
+
Previously it was not possible to replace a tag object, even if
`git push \--force` was used.  Fixed.

* issue 690 Refuse to run receive-pack if refs/for/branch exists
+
If a server repository was corrupted by an administrator manually
creating a reference within the magical refs/for/ namespace, Gerrit
became confused when changes were uploaded for review.  If this case
occurs push now aborts very early, with a clear error message
indicating the problem.  To recover an administrator must clear the
refs/for/ namespace manually.

* Allow receive-pack without Read +2 but with Push Head +1
+
Users who had direct branch push permission but lacked the ability to
create changes for review were unable to push to a project.  Fixed.
This (finally) makes Gerrit a replacement for Gitosis or Gitolite.

Replication
~~~~~~~~~~~
* issue 683 Don't assume authGroup = "Registered Users" in replication
+
Previously a misconfigured authGroup in replication.config may have
caused the server to assume "Registered Users" instead of the group(s)
admin actually wanted.  This may have caused the replication to see
(or not see) the correct set of projects.

* issue 482 Upon replication fail, automatically retry later
+
If replication fails (for example due to temporary network
connectivity problems), other pending replication events to the
same server are deferred and retried later until successful.

* Replicate all refs received from push
+
Replication now replicates all references, not just those that
appear under `refs/heads`, `refs/tags`, or `refs/changes`.  This
fix may be relevant if the server supports user-private sandboxes
such as `refs/dev/'$\{username\}'/*`.

* issue 658 Allow refspec shortcuts (push = master) for replication

User Management
~~~~~~~~~~~~~~~
* Ensure proper escaping of LDAP group names
+
Some special characters may appear in LDAP group names, these must be
escape when looking up the group information from JNDI, otherwise the
lookup fails.  Fixed by applying the necessary escape sequences.

* Let login fail if user name cannot be set
+
If the user name for a new account is supposed to import from LDAP
but cannot because it is already in use by another user on this
server, the new account won't be created.

Administration
~~~~~~~~~~~~~~
* gerrit.sh: actually verify running processes
+
Previously `gerrit.sh check` claimed a server was running if the
pid file was present, even if the process itself was dead.  It now
checks `ps` for the process before claiming it is running.

* Don't allow exclusive branch rights to block Owner inheritance
+
Exclusive branch level rights prevented the a higher level branch
owner from managing the branch rights, unless they had an additional
access right for the exclusive rights.  Now Owner inheritance cannot
be blocked, ensuring that the higher level owner can manage their
entire namespace.

* Allow overriding permissions from parent project
+
Permissions in the parent project could not be overridden in the
child project.  Permissions can now be overidden if the category,
group name and reference name all match.

Version
-------
ef16a1816f293d00c33de9f90470021e2468a709
