Release notes for Gerrit 2.0.5
==============================

Gerrit 2.0.5 is now available in the usual location:

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

WARNING: This version contains a schema change.

Schema upgrade:

 java -jar gerrit.war --cat sql/upgrade005_006.sql | psql reviewdb

If you use an OpenID authentication provider, you may want to review the new trusted providers functionality added by this release.  See the OpenID section in the SSO documentation for more details:

link:http://gerrit.googlecode.com/svn/documentation/2.0/config-sso.html[http://gerrit.googlecode.com/svn/documentation/2.0/config-sso.html]

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

* GERRIT-62  Work around IE6's inability to set innerHTML on a tbody ...
* GERRIT-62  Upgrade to gwtjsonrpc 1.0.2 for ie6 support
+
These add (crude) support for Microsoft Internet Explorer 6 and 7.

* Allow users to delete OpenID identities no longer used
* Show the trust status of a user's identities
* Allow effective permissions only for trusted OpenID prov...
+
These features allow a site to lock down access to only a trusted OpenID provider.  review.source.android.com uses this to give out approval access only to users who have registered with the site's trusted OpenID provider, Google Accounts.

* Add clippy.swf to support copying download commands to t...
* Display the clippy button for the permalink of a change
* Allow clicking on a copyable text to switch label to inp...
+
These features make it easier to copy patch download commands.

Bug Fixes
---------

* GERRIT-79  Error out with more useful message on "push :refs/change...
* Invalidate all SSH keys when otherwise flushing all cach...

Other Changes
-------------

* Set version 2.0.4-SNAPSHOT
* Correct note in developer setup about building SSHD
* Change the order of links in developer setup
* Document how to enable SSL with Jetty and Apache2
* Ignore errors when current row no longer exists in a tab...
* Show the Web Identities panel when on HTTP authentication
* Relabel the "Web Identities" tab as just "Identities
* Use an &nbsp; when showing an empty cell in the identity...
* Simplify the Gerrit install from source procedure to avoi...
* Support -DgwtStyle=DETAILED to support browser debugging
* Don't link to JIRA in our docs, link to our issues page
* Use &nbsp; in the identities table email column when emp...
* Fix GWT Mac OS X launcher to include all sources
* Catch any unexpected exceptions while closing a replicat...
* Fix indentation in UserAgent.gwt.xml
* Only load the flash clippy button if flash plugin is ava...
* Fix border in the info block on the settings page
* Reuse code that was moved to gwtexpui
* Rename our CSS to encourage caching
* Add gwtexpui to our license list
* Fix account settings screen by correcting row offset
* Replace DomUtil with SafeHtmlBuilder
* Mention the OpenID provider restriction feature in our d...
* Mention the contact information encryption in our design...
* Switch to gwtexpui's iframe busting code
* Use gwtexpui 1.0
* gerrit 2.0.5