Release notes for Gerrit 2.0.2
==============================

Gerrit 2.0.2 is now available for download:

link:https://www.gerritcodereview.com/[https://www.gerritcodereview.com/]

Important Notes
---------------

Starting with this version, Gerrit is now packaged as a single WAR file.
Just download and drop into your webapps directory for easier deployment.
The WAR file itself is also executable via "java -jar gerrit.war", so tools
like CreateSchema are easier to invoke ("java -jar gerrit.war
CreateSchema").

The following optional 3rd party JARs are not included in the WAR:

* Bouncy Castle Crypto API
* H2 JDBC Driver
* c3p0 pooled DataSource
+
Existing Gerrit administrators either need to change the SSH host key used
by their servers, or download the Bouncy Castle Crypto API.  The OpenSSH key
file format can only be read if Bouncy Castle is available, so you need to
install that library to continue using an existing host key.  If you are
using Jetty, you can download the library (
http://www.bouncycastle.org/java.html) to $JETTY_HOME/lib/plus, then restart
Jetty.
If you use H2 as your database, you will need to download the JDBC driver
and insert it into your container's CLASSPATH.  But I think all known
instances are on PostgreSQL, so this is probably not a concern to anyone.

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

* Trailing whitespace is highlighted in diff views
* SSHD upgraded with "faster connection" patch discussed on list
* Git reflogs now contain the Gerrit account information of who did the push
* Insanely long change subjects are now clipped at 80 characters

All Changes
-----------

* Switch back to -SNAPSHOT builds
* Overhaul our build system to only create a WAR file
* Rename top level directory devutil to gerrit1_import
* Move appjar contents up one level to normalize our struc...
* Refactor the project admin screen into tabs
* Move "Publish Comments" before "Submit Patch Set"
* Fix to_jetty.sh to account for the WAR not having a scri...
* Don't close SSH command streams as MINA SSHD does it for...
* Avoid NPE if sign-in goes bad and is missing a token
* Describe how to make /ssh_info unprotected for repo
* Improve documentation links to Apache SSHD
* Fix Documentation Makefile to correctly handle new files
* Insert some line breaks to make Documentation/install.tx...
* Don't require Bouncy Castle Crypto
* Don't require c3p0 or H2 drivers
* Show the account id in the user settings screen
* Fix log4j.properties to not run in DEBUG
* Don't log DEBUG data out of c3p0's SqlUtils class
* Fix to_jetty so it doesn't unpack c3p0 from our WAR
* Cleanup c3p0 connection pools if used
* Yank the mobile specific OpenID login panel
* GERRIT-23  Highlight common whitespace errors such as whitespace on...
* Fix tabs in Gerrit.css to be 2 spaces
* Record the account identity in all reflogs
* Don't allow the project name in change tables to wrap
* Clip all change subject lines at 80 columns in change ta...
* gerrit 2.0.2