Release notes for Gerrit 2.0.24, 2.0.24.1, 2.0.24.2
===================================================

Gerrit 2.0.24 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 version contains a schema change* (since 2.0.21)

Apply the database specific schema script:
----
  java -jar gerrit.war --cat sql/upgrade018_019_postgres.sql | psql reviewdb
  java -jar gerrit.war --cat sql/upgrade018_019_mysql.sql    | mysql reviewdb
----


LDAP Change
-----------

LDAP groups are now bound via their full distinguished name, and not
by their common name.  Sites using LDAP groups will need to have the
site administrator visit every LDAP backed group through the web UI
(Admin > Groups), search for, and select the underlying LDAP group
from the directory server.

This change was made to remove some of the guesswork when it comes
to setting up an LDAP enabled group, as well as to permit creating
new LDAP enabled groups completely from the web UI.  It also removes
an ambiguous case when different parts of the same directory space
create identically named groups.


New Features
------------
* Check if the user has permission to upload changes
+
The new READ +2 permission is required to upload a change to a
project, while READ +1 permits read but denies uploading a change.
The schema upgrade script automatically converts READ +1 to +2.

* Use LDAP DN to match LDAP group to Gerrit group
* issue 297    Allow admins to search for and bind to LDAP groups
+
As noted above, LDAP groups now use the full DN to match to their
Gerrit database counterpart, rather than just the common name.
Administrators may now create Gerrit groups and attach them to
any LDAP group, by performing a query on the LDAP directory for
matching groups and selecting a result.

* issue 301    Try to prevent forgotten `git add` during replace
+
Users are now stopped from performing a replace of a patch set if
they have not made a meaningful change (modify a file, or modify
the commit message).  If only the commit message was modified,
a warning is printed, but the replace still occurs.

* issue 126    Link to our issue tracker in the page footer
+
The footer now includes a link to the Gerrit project's issue
tracker, so end-users can more easily report bugs or feature
requests back to the developers.

* issue 300    Support SMTP over SSL/TLS
+
Encrypted SMTP is now supported natively within Gerrit, see
[http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html#sendemail.smtpEncryption sendemail.smtpEncryption]

Bug Fixes
---------
* issue 290    Fix invalid drop index in upgrade017_018_mysql
+
Minor syntax error in SQL script.

* Fixed ActiveDirectory LDAP group support. Allows recu...
* issue 307    Set proper LDAP defaults for Active Directory
+
ActiveDirectory is now better supported out of the box.  Defaults
for the LDAP configuration settings are automatically guessed at
startup based upon the type of server configured in ldap.server.
Recursive groups (group which is a member of a group) is also
now supported when using an ActiveDirectory server.  Other LDAP
servers (e.g. OpenLDAP) probably don't support this.

* "250-AUTH " will be returned if 'AUTH' response does ...
* Fix: Authentication fail when authTypes is empty
* Fix a typo that broke the gerrit build
+
Outgoing SMTP sometimes failed to authenticate against a
SMTP server due to slightly incorrect handling of the AUTH
advertisement.

* Correct scp commands in documentation to include -p
+
Our documentation of how to copy the commit-msg hook down via
scp did not include the -p option, which is necessary to make
the client preserve the executable flag on the hook script.

* issue 291    Suggest latin1 charset for MySQL databases
+
Documentation was updated to encourage using latin1 for MySQL
as MySQL fails with key too long errors during schema creation
when the database is using the UTF-8 character set.

* issue 294    Fix OpenID self registration dialog
+
OpenID 'Register' hyperlink was broken due to the dialog having
no content added to it before display.  This bug was fixed by
using the proper OpenID login dialog.

* issue 309    Clear message on publish comments screen after submit...
+
The publish comments button preserved your last comment, making
it easy for a user to accidentally publish the same message on
the same change twice.  The message is now cleared after it has
been successfully sent.

* issue 299    Remove the branches table from the database
* Display current branch SHA-1 in Branches tab
* issue 299    Display not-yet-born HEAD branch in Branches tab
+
The not-yet-born branch in an empty project is now shown in the
Branches tab.  (This is based on the value of the HEAD symbolic
reference within the project's Git repository.)
The branches table was removed from the database.  We now fully
rely upon the Git repository to determine which branches exist
and thus permit changes to be uploaded to.

* issue 296    Make help more friendly over SSH
+
`ssh -p 29418 localhost help` is now more user friendly.

* Don't request registration if the account exists
* issue 38     Fix OpenID delegate authentication
+
OpenID authentication was sometimes asking providers for
registation data when we already had it on hand, fixed.
OpenID delegate identities were being stored rather than claimed
identities when the claimed identity is just a delegate to the
delegate provider.  We now store both in the account.

Fixes in 2.0.24.1
-----------------
* Fix unused import in OpenIdServiceImpl
* dev-readme: Fix formatting of initdb command
+
Minor documentation/code fixes with no impact on execution.

* Fix LDAP account lookup when user not in group
+
Fixes a NullPointerException when a user is not in any group
and the underlying LDAP server is ActiveDirectory.

* issue 315    Correct sendemail.smtppass
+
Fixes sendemail configuration to use the documented smtppass
variable and not the undocumented smtpuserpass variable.

Fixes in 2.0.24.2
-----------------
* Fix CreateSchema to create Administrators group
* Fix CreateSchema to set type of Registered Users group
* Default AccountGroup instances to type INTERNAL
* Document the various AccountGroup.Type states better
+
CreateSchema was broken in 2.0.24 and 2.0.24.1 due to the default
groups being misconfigured during insertion.  Fixed.

* Grant anonymous uses READ +1, registered users READ +...
+
Default permissions were a bit confusing, there is no point in an
anonymous user having READ +2.

* Use the H2 database for unit tests
* Unit test for SystemConfigProvider and CreateSchema
+
Added unit tests to validate CreateSchema works properly, so we
don't have a repeat of breakage here.

Other Changes
-------------
* Start 2.0.24 development
* Merge change Ie16b8ca2
* Switch to the new org.eclipse.jgit package
* Allow default of $JETTY_HOME in to_jetty.sh
* LdapRealm: Remove unused throws declaration
* LdapRealm: Fix missing type parameter warnings
* Remove dead exists method from AccountManager
* Document ldap.groupPattern
* AuthSMTPClient: Fix formatting errors
* style fixup: remote trailing whitespace from our sour...
* show-caches: Correct example output in documentation
* Move server programs section under User Guide
* Revert "Remove dead exists method from AccountManager"
* Ensure prior commit body is parsed before comparing m...
* Gerrit 2.0.24