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 procedue 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