Release notes for Gerrit 2.1.3
==============================

Gerrit 2.1.3 is now available in the usual location:

link:http://code.google.com/p/gerrit/downloads/list[http://code.google.com/p/gerrit/downloads/list]

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

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


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

Web UI
~~~~~~

* issue 289 Remove reviewers (or self) from a change
+
Project and change owners can now remove any reviewer from a change
by clicking an "X" next to their name in the approval table.
Individual users can also remove themselves from any change.
This feature permits users to stop getting notified about a change
they no longer have an interest in, but had commented on previously.

* issue 124 Index changes by external issue tracking id numbers
+
Changes can be searched for by an external issue tracking system's
id numbers.  Site administrators can configure trackingid sections in
gerrit.config to parse and extract issue tracking links from a commit
message's footer, and have them indexed by Gerrit.  Users can search
for relevant changes using the search operator `tr:` or `bug:`,
for example `tr:432181` or `bug:JIRA-42`.  Administrators can index
existing change records using the ScanTrackingIds program.

* List branches/tags containing a merged change
+
Merged change pages now display a new expandable section, 'Included
In', listing all branches and tags that contain the change.

* issue 391 Reduce clicks need to approve and submit
+
Users who have Submit +1 permission for a change can now click
'Publish Comments and Submit' on the publish comments screen,
combining the 'Publish Comments' and 'Submit Patch Set n' actions
into a single click.

* Simplify setup of non-range access such as Submit
+
If an access control doesn't really make sense as a range of values,
Gerrit now displays only one box to select the maximum permitted
value from, rather than two boxes to set the min/max.

* Make Admin > Projects UI accessible to all users
+
All projects that are visible to the current user are now listed
in the Admin > Projects page, as are the project's Branches and
Access tabs.  Editing is obviously disabled, unless the user has
owner level access to the project, or one of its branches.

Access Controls
~~~~~~~~~~~~~~~

* Branch-level read access is now supported
+
Project owners/administrators can now use the access tab to
control which groups can read certain branches, enabling hidden
branches within a more widely visible project.  Additionally,
replication.config honors these settings through the authGroup
variable, allowing a server administrator to limit which branches
are replicated to certain mirrors.

* issue 273 Inherit project permissions from more than just All Projects
+
Projects can now be organized into an inheritance hierarchy, allowing
administrators to cluster common access rules for different groups
of projects.  The create-project command learned a new \--parent
option to set the hierarchy immediately.

* auth.allowedOpenID can limit which providers can be used
+
Administrators can now set auth.allowedOpenID in gerrit.config
to restrict which OpenID provider(s) a user can use to register
for an account.  This may be useful to restrict login to only the
organization's local provider, or a single trusted 3rd party.

* Branch-level access control is now inherited by default
+
Previously branch level access controls were exclusive, locking out
all other groups that may have been inherited from All Projects,
or through a wildcard like 'refs/heads/*'.  Branch access is now
inherited by default, but the old exclusive behavior can be obtained
by prefixing the reference with '-'.

SSH Commands
~~~~~~~~~~~~

* create-account: Permit creation of batch user accounts over SSH
* issue 269 Enable create-project for non-Administrators

* ls-projects: New -b option displays the sha1 of each branch
* ls-projects: New -t option shows the project hierarchy

* gerrit show-queue is now accessible to all users
+
Results are filtered to display only queue entries that are operating
on projects the user is permitted to see.  Replication URLs are
masked for non-admin users, and instead display the remote name
from the replication.config file.

* issue 310 review \--submit: Submit a change over SSH
+
Changes can now be submitted over SSH by using the new \--submit
command line flag to gerrit review.

* gerrit approve deprecated
+
To support the new \--submit flag, gerrit approve has been renamed
to gerrit review, better matching the web UI name for the concept.
The old `gerrit approve` name will be kept around as an alias to
provide time to migrate hooks/scripts/etc.

Hooks / Stream Events
~~~~~~~~~~~~~~~~~~~~~

* \--change-url parameter passed to hooks
+
The change URL was supplied in the stream-events feed, but was
not passed into hooks, making it difficult for a hook to send a
notification email with a link back to Gerrit.  Fixed by adding
the parameter.

* Patch set uploader passed to hooks
+
The identity of the user who uploaded a patch set was added as both
a parameter to patchset-created hook, and to the patch set entity
sent through stream-events.

* issue 506 stream-events: Include the ref in patch sets
+
The reference (e.g. 'refs/changes/12/812/2') to download a patch
set is now included in the stream-events record, making it possible
for a monitor to easily pull down a patch set and compile it.

Contrib
~~~~~~~

* Example hook to auto-re-approve a trivial rebase

Misc.
~~~~~

* transfer.timeout: Support configurable timeouts for dead clients
+
Sometimes `repo sync` can leave dead connections open to Gerrit Code
Review, resulting in worker threads that are tied up indefinitely,
waiting for client IO that will never occur.  Administrators may set
transfer.timeout to place an upper bound on how long the server will
wait for the client before aborting the connection and releasing
the worker thread back into the pool.

* container.slave: Automatically enable --slave
+
Adminstrators can now add `container.slave = true` to their slave's
gerrit.config file, avoiding the need to make sure they always
pass the --slave flag on the command line when starting their
slave server.

* Add separate task queue for non-interactive users
+
Users who are a member of the special 'Non Interactive Users' group
can now have all of their SSH commands scheduled onto a different
thread pool than everyone else.  If enabled, this feature can help
ensure quick response time for normal users when the system is
heavily loaded by batch tasks.

* Explain a remote rejection of a non-fast-forward
+
If the remote peer rejected a non-fast-forward replication, make
it clear that it was the remote that rejected the push, and not
Gerrit Code Review's client logic.  The error is often caused by
the remote repository having receive.denyNonFastForwards being set
to true in $GIT_DIR/config.  Gerrit's error log message now hints
at checking this setting on the remote repository.

* Internal dependencies updated
+
Updated JGit to 0.8.4, Jetty to 7.0.2.v20100331, H2 database to
1.2.134, Apache Commons Codec to 1.4, Apache Commons Net to 2.1,
Apache Commons DBCP to 1.4.


Bug Fixes
---------

Web UI
~~~~~~

* issue 396 Prevent 'no-score' approvals from being recorded
+
Change messages no longer say 'No score; no score' when the user
has not selected a particular approval setting.

* issue 396 Summarize the number of inline comments
+
A change message is now always recorded at the top level of a change
anytime inline comments are published, even if no score change
took place, and no cover letter was supplied by the user. The
auto-generated message is a one line summary indicating how many
inline comments were published at that time.  This makes it easier
to see what has occurred on the change.

* issue 461 Space out Review and Submit Patch Set buttons
+
The risk of clicking 'Submit Patch Set n' when the user meant to
click 'Review' has been reduced by spacing the buttons further apart.

* issue 587 Fix user site header/footer preference
+
The user preference to hide the site header/footer wasn't always
being applied.  Fixed.

* issue 575 Require branches to always start from commits
+
Branches could be created starting from annotated tags, resulting
in crashes when a change gets submitted to the branch.  Fixed by
ensuring branches always start from commits.

* issue 574 Add Cancel button to Register New Email dialog
+
Users couldn't (easily) get out of the dialog popped up by the
'Register New Email...' button.  A cancel button was added to
close the dialog.

Server Programs
~~~~~~~~~~~~~~~

* init: Import non-standardly named Git repositories
+
When scanning for projects, any directory that is a valid Git
repository is now imported, even if its name does not end with
the standard '.git' suffix.

* issue 460 gerrit.sh: Request at least 1024 file descriptors
+
In the default configuration, Gerrit Code Review started with a
hard limit of 256 file descriptors, which is too small for any site.
This caused a number of failures, and a number of bugs were filed.
The default has been raised to 1024.

* issue 578 Improve schema version update by avoiding early pruning
+
Previously init kept trying to remove unused tables or columns
during each schema upgrade step.  These removes are now deferred
until the last step.

* review: Actually log an internal server error's root cause
+
Internal server failures (such as database connectivity errors)
were not properly logged by `gerrit approve` (now gerrit review).
Fixed by logging the root cause of the failure.

Configuration
~~~~~~~~~~~~~

* Display error when HTTP authentication isn't configured
+
Error reporting for a failed login attempt when auth.type is HTTP
and the HTTP server isn't supplying the expected header is now more
explicit about describing the problem.  This helps new site setups,
but doesn't have any impact on an existing site.

* Fix javax.naming.PartialResultException: Unprocessed Continuation
+
LDAP directory trees that require following a referral in order
to lookup a name usually failed with the above Java exception
during sign-in.  Administrators can enable following by adding
`ldap.referral = follow` to their gerrit.config file.

Documentation
~~~~~~~~~~~~~

* documentation: Clarified the ownership of '\-- All Projects \--'
+
The magic project All Projects isn't allowed to have ownership
delegated, and the documentation wasn't clear why.  Fixed by
explaining the rationale in more detail.

* issue 533 Fix JAR versions in other container installation
+
The installation process for putting Gerrit Code Review under a
3rd party servlet container was out of date, as some JARs had
the wrong versions listed.  Fixed.

* suexec: Document the suexec command
+
The suexec command introduced in 2.1.2 was never documented.  Fixed.

* Corrected Eclipse documentation on importing Maven projects
+
The Maven plugin changed some of its user interface, resulting in
our step-by-step documentation being out of date.  Fixed to match
the current stable version of the Maven plugin.


Version
-------

e8fd49f5f7481e2f916cb0d8cfbada79309562b4
