Release notes for Gerrit 2.0.22
===============================

Gerrit 2.0.22 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
-------------

There is no schema change in this release.

* Restriction on SSH Username
+
There is a new restriction placed on the SSH Username field
within an account.  Users who are using invalid names should
be asked to change their name to something more suitable.
Administrators can identify these users with the following query:
----
     -- PostgreSQL
     SELECT account_id,preferred_email,ssh_user_name
     FROM accounts
     WHERE NOT (ssh_user_name ~ '[a-zA-Z][a-zA-Z0-9._-]*[a-zA-Z0-9]$');

     -- MySQL
     SELECT account_id,preferred_email,ssh_user_name
     FROM accounts
     WHERE NOT (ssh_user_name REGEXP '[a-zA-Z][a-zA-Z0-9._-]*[a-zA-Z0-9]$');
----
   Administrators can force these users to select a new name by
   setting ssh_user_name to NULL; the user will not be able to
   login over SSH until they return and select a new name.


New Features
------------
* GERRIT-280  create-project: Add --branch and cleanup arguments
+
The --branch option to create-project can be used to setup the
default initial branch to be a name other than 'master'.
Argument parsing also changed slightly, especially around the
boolean options and submit type.  Please recheck the documentation
and/or the output of --help.

* GERRIT-216  Add slave mode to ssh daemon
+
The standalone SSH daemon can now be run in a read-only
mode.  This allows use Gerrit's access control database for
access decisions when serving a read-only copy of the project
repositories.  Placing a read-only slave local to a remote office
may reduce sync times for those closer to the slave server.

* Enable multi-line comment highlighting for Scala code
+
Scala source code now highlights more like Java source code does,
especially for multiline `/** ... */` style comments.

* GERRIT-271  Enable forcing ldap.accountSshUserName to lowercase
+
The following properties may now be configured from LDAP using
more complex expressions: accountFullName, accountEmailAddress,
accountSshUserName.  Property expressions permit forcing
to a lowercase string, or performing string concatenation.
These features may help some environments to better integrate
with their local LDAP server.

* Support username/password authentication by LDAP
+
A new auth.type of LDAP was added to support Gerrit prompting
the end-user for their username and password, and then doing a
simple bind against the LDAP server to authenticate the user.
This can simplify installation in environments which lack a
web based single-sign-on solution, but which already have a
centralized LDAP directory for user management.

* Inform submitter of merge failure by dialog box
+
When a change submit fails, a dialog box is now displayed showing
the merge failure message.  This saves the user from needing to
scroll down to the end of the change page to determine if their
submit was successful, or not.

* Better submit error messages
+
Missing dependency submit errors are now much more descriptive
of the problem, helping the user to troubleshoot the issue on
their own.  Merge errors from projects using the cherry-pick
and fast-forward submit types are also more descriptive of the
real cause.  Unfortunately path conflict errors are not any more
descriptive, but path conflict is now only reported when there
is actually a path conflict.

* issue 285   Include pull command line in email notifications
+
Sample git pull lines are now included in email notifications.

Bug Fixes
---------
* create-project: Document needing to double quote descr...
+
The --description flag to create-project require two levels
of quoting if the new description string contains whitespace.
The documentation has been updated to reflect that, and shows some
examples .  Unfortunately this is not easily fixed in software,
due to the way the SSH client passes the command line to the
remote server.

* GERRIT-281  daemon: Remove unnecessary requirement of HttpServletR...
+
The standalone SSH daemon now starts correctly, without needing
to put the Java servlet API into the CLASSPATH.

* Enforce Account.sshUserName to match expression
* Restrict typeable characters in SSH username
* Disallow ., `_` and - in end of SSH Username
+
SSH usernames were permitted to contain any character, including
oddball characters like '\0' and '/'.  We really want them to
be a restricted subset which won't cause errors when we try to
map SSH usernames as file names in a Git repository as we try
to move away from an SQL database.

* GERRIT-282  Fix reply to comment on left side
+
Clicking 'Reply' to a comment on the left hand side sometimes
generated a server error due to a subtle bug in how the reply
was being setup.  Fixed.

* issue 282   Fix NullPointerException if ldap.password is missing
+
The server NPE'd when trying to open an LDAP connection if
ldap.username was set, but ldap.password was missing.  We now
assume an unset ldap.password is the same as an empty password.

* issue 284   Make cursor pointer when hovering over OpenID links
+
The cursor was wrong in the OpenID sign-in dialog.  Fixed.

* Use abbreviated Change-Id in merge messages
+
Merge commits created by Gerrit were still using the older style
integer change number; changed to use the abbreviated Change-Id.

Other Changes
-------------
* Start 2.0.22 development
* Configure Maven to build with UTF-8 encoding
* Document minimum build requirement for Mac OS X
* Merge change 10296
* Remove trailing whitespace.
* Update issue tracking link in documentation
* Merge branch 'doc-update'
* Move client.openid to auth.openid
* Fix minor errors in install documentation.
* Merge change 11961
* Cleanup merge op to better handle cherry-pick, error c...
* GERRIT-67   Wait for dependencies to submit before claiming merge ...
* Move abandonChange to ChangeManageService
* Remove trailing whitespace in install.txt
* Gerrit 2.0.22
