Release notes for Gerrit 2.1
============================

Gerrit 2.1 is now available in the usual location:

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


New site_path Layout
--------------------

The layout of the `$site_path` directory has been changed in 2.1.
Configuration files are now stored within the `etc/` subdirectory
and will be automatically moved there by the init subcommand.

Upgrading From 2.0.x
--------------------

  If the server is running a version older than 2.0.24, upgrade the
  database schema to the current schema version of 19.  Download
  'schema-upgrades003_019.zip' from the download area and run the
  scripts by hand as listed in README until the server is caught up.

Run init to convert the layout of $site_path:
----
  java -jar gerrit.war init -d $site_path
----

If there is a GerritServer.properties file handy, ensure it is in the
current working directory or inside of $site_path when running init.
If present, init will reuse this information rather than prompting
for it.  If the file is not found, init will prompt for database
connection information.

While moving the server's configuration files into the new
etc/ subdirectory, init will also move secret settings such as
sendemail.smtpPass and ldap.password out of gerrit.config into a
read-protected secure.config file.

New Daemon Mode
---------------

Gerrit 2.1 and later embeds the Jetty servlet container, and
runs it automatically as part of `java -jar gerrit.war daemon`.
This is the preferred method of running Gerrit Code Review, and is
how sites like review.source.android.com are operating.

To simplify management on UNIX systems an rc.d style startup script
is created in `$site_path/bin/gerrit.sh`.  This script can be used
to start and stop the background daemon process.  When started
from this script the daemon calls itself `GerritCodeReview` in ps,
but may still show up in top as `java`.

Configuration of the daemon is handled by gerrit.config.  For more
information see the 2.1 documentation.

link:http://gerrit.googlecode.com/svn/documentation/2.1/index.html[http://gerrit.googlecode.com/svn/documentation/2.1/index.html]


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

* issue 19     Link to issue tracker systems from commits
+
Hyperlinks from commit messages and any inline comments to
bug tracking systems can be enabled by configuring one or
more commentlink regular expressions in gerrit.config.

* Git replication security
+
Git replication can now be controlled on the sending side by
configuring one or more authGroups for a remote and granting
READ +1 access to only certain projects.

* Better repo upload/git push throughput
+
MINA SSHD was misconfiguring the host's TCP/IP stack, this
limited throughput of git push to under 16 KiB/s.  Fixed.
Its such a huge improvement that its an important feature,
rather than a bug fix.  :-)

* issue 320    Queue SSH commands and ensure consistent throughput
+
SSH commands are entered into a queue and executed in FIFO order
as processor capacity becomes available.  The queue enables
the server to work on a finite number of commands at once and
ensures running commands complete in a timely fashion, no matter
how many concurrent connections are being established.
The queue allows sites to maintain consistent throughput without
thrashing, even as the number of requests increase beyond server
capacity.  The change was made in anticipation of `repo sync`
learning how to fetch all projects at once, inducing a load of
over 200 concurrent commands per user/Android checkout.
Server administrative commands such as kill or gsql (below) bypass
the queue and are allowed to execute as soon as they are received.

* kill: Support killing any queued task
+
A new administrative kill command was introduced to terminate
any queued or running tasks.  Unlike UNIX kill, a killed task
will continue until its next safe interruption point, which is
usually at the next network read or write.

* issue 327    gsql: query tool on command line and SSH
+
Gerrit supports an interactive SQL query tool for administrators.
The query tool is available over SSH as `gerrit gsql`, or locally
as `java -jar gerrit.war gsql`.  The query tool is primarily
useful with H2 databases, where the database is only accessible
to the running Java process.

* issue 202    Self contained daemon mode
* issue 328    daemon: Automatically log into $site_path/logs
* daemon: Automatically compress our log files
+
As noted above, Jetty 7.0.1.v20091125 is now bundled, making new
site installation easier.  Logs from daemon mode are written
out to the site's logs/ subdirectory.  Logs are rotated and
compressed daily.

* issue 330    init: Create a command to setup a new site
* issue 343    init: Create database indexes during schema creation
* Remove CreateSchema command
+
The init command can be used to initialize a new site, or
as noted above, to upgrade an existing site to the current
software version.  Since init now does the work of CreateSchema,
and everything else that used to be listed out as individual
steps in the installation guide, CreateSchema was deleted.

* issue 325    Allow secure.config to overlay gerrit.config
* Configure database from gerrit.config
+
Database connectivity is now configured out of gerrit.config
and secure.config, rather than GerritServer.properties.

* Bundle PostgreSQL, H2, DBCP, MySQL, Bouncy Castle
+
JDBC drivers for PostgreSQL, H2, and the Apache Commons DBCP
connection pool implementation are now bundled, reducing the
number of external dependencies that must be obtained before
getting a working installation.
The MySQL driver is automatically downloaded and verified by
init if required, as is the Bouncy Castle Crypto provider.
These JARs are not packaged in the standard distribution due to
export and/or license restrictions.

* issue 183    Support invoking gitweb from within Gerrit
+
The standard gitweb.cgi can now be automatically configured and
executed through Gerrit's servlet container, making it easier to
publish a repository for browsing on the web.
Project level access controls are honored when browsing through
this gitweb interface.

* issue 105    Support OpenID when behind an HTTP proxy
* issue 323    Use JGit's http_proxy based initialization
+
HTTP proxies are now supported for OpenID authentication, as
well as for init's optional external library download.

* Add a Register link when using LDAP authentication
+
When auth.type is LDAP the Register link in the top right corner
can point to an administrator defined URL.  This external URL
might be as simple as a 'mailto:...' link, to help the user
request a new LDAP account from the directory administrators.

* Switch remote JSON services to use JSON-RPC 2.0
+
The JSON-RPC interface now speaks the JSON-RPC 2.0 draft
specification, in addition to the prior JSON-RPC 1.1
specification previously used.

* issue 336    Update MINA SSHD to SVN 891122
* issue 324    Update JGit to 0.5.1.51-g96b2e76
* Update JUnit to 3.8.2
* Update args4j to 2.0.16
* Update slf4j-log4j12 to 1.5.8
* Update Ehcache to 1.7.1
* Update commons-pool to 1.5.4
* Update H2 to 1.2.125
* Update to gwtjsonrpc 1.2.0, gwtexpui 1.1.4
+
Most dependencies were updated to their current stable versions.

Bug Fixes
---------

* issue 259    Improve search hint to include owner:email
+
The hint text in the search box in the upper right corner has
been improved to suggest owner:email and reviewer:email, as
these tags were not discoverable.

* issue 335    daemon: Refuse to launch unless gerrit.config exists
+
Gerrit now refuses to launch until the site path has been
properly initialized with init.  This is true both in daemon
mode and also when deployed inside of any servlet container.

* issue 152    Allow adding users who are missing a preferred email
+
The user suggestion boxes now permit adding a user that has not
yet selected a preferred email address on their contact panel.

* issue 319    Automatically set preferred email to first configured
+
If a user has no email addresses, the first address they register
through the next OpenID login, LDAP login, or 'Register New Email'
feature will be automatically set as the preferred email address
for their account.

* issue 356    Fix committer identity on cherry-pick
+
The committer identity created when cherry-picking a change was
formatted incorrectly, it used the internal account identity.
Fixed to use the submitter's preferred email address only.

* issue 345    Make "call11" readable in file content
+
The prior font made the string "call11" (c-a-ell-ell-one-one)
impossible to read because the ell and one looked the same.
Fixed by changing to different fonts for the fixed width file
content display.

* Automatically make first user account administrator
+
To simplify installation, the first user to login to a brand
new site is added to the 'Administrators' group.  This avoids
the need to update the database manually via SQL and restart
the daemon to have it be picked up.

* Always trim Change-Id lines to handle whitespace
+
Some users were adding trailing whitespace on a Change-Id line
by accident, causing Gerrit to not always honor it when uploading
a replacement patch.  Fixed.

* Fix duplicate branches in the branches panel
+
The Branches tab under a project displayed the HEAD branch twice,
but every other branch once.  Fixed.

* Enforce all HTTP requests through SSL
+
JSON-RPC requests are now required to be over SSL if the site
prefers to use SSL for communication.
Prior to 2.1 the JSON-RPC requests from the web UI were performed
over https:// if the web UI loaded over https://, but JSON-RPC
requests from other tools (e.g. a command line script) were
still allowed over plain text HTTP.

* Work around NPE when patch list fails to compute
+
Rather than return NullPointerException to the browser return
a "not found" error, as the source of the null pointer is the
underlying diff operation returned no results.

* Fix stuck "Loading Gerrit Code Review ..."
+
Many users have noticed that after about a week of server uptime
Gerrit no longer loads in their browser, until the server is
restarted.  This was usually caused by Jetty unpacking the WAR
file contents to /tmp, and the system having a cron task that
deleted files more than a week old from /tmp.
Under the daemon command the WAR file contents are unpacked into
`$HOME/.gerritcodereview/tmp`, which should be isolated from
the host system's /tmp cleaner.

Other=
------

* Pick up gwtexpui 1.1.4-SNAPSHOT
* Merge change Ia64286d3
* Merge branch 'maint-2.0.24.1'
* Merge change Ic6f00304
* Merge branch 'maint-2.0.24.2'
* Add H2 database as a test dependency
* Update Ehcache to 1.7.0
* Fix formatting
* Rewrite our build as modular maven components
* Forbid use of anonymous servlets on any container
* Use listeners to manage server startup/shutdown
* Load additional JARs from $site_path/lib
* Fix PostgreSQL/H2 access under gwtdebug sessions
* Fix Become link in hosted mode debugging sessions
* Fix ssh:// URLs on change pages
* daemon: Update help for --slave option
* daemon: Remove -DGerritServer from documentation
* Launcher: Clarify the purpose of the daemon command
* daemon: Fix --site-path documentation
* Remove unused imports from pgm.DataSourceProvider
* launcher: Don't print stack trace with reflection frames
* Move H2 database down into $site_path/db
* Remove dead code identified by Eclipse 3.5.1
* Add missing default serialVersionUID
* pgm_daemon: Remove unnecessary -DGerritServer flag
* Move configuration files under $site_path/etc
* Update documentation to point to etc subdirectory
* Display the full stack trace if requested
* init: Don't delete site path on database creation fail
* Simplify errors reported by command line database fail
* init: Correct defaults for httpd.listenUrl in --batch
* issue 341    gsql: Fix \d on H2
* gsql: Improve formatting of column types and indexes
* pgm: Move non commands into a util package
* issue 342    gsql: Reduce connections used to only 1
* WorkQueue: Drop the word "-thread" from thread names
* documentation: Correct links in dev-design
* Fix port number in ssh pull lines in emails
* Update MINA SSHD to 0.3.0
* Update Jetty to 7.0.1.v20091125
* launcher: Refactor how we return the status code
* cat, ls: move inside our main program package
* Default temporary directory to $HOME/.gerritcodereview
* Clean up stale empty temporary directories
* daemon: Unpack the WAR contents to a local directory
* daemon: Run correctly under Eclipse debugger
* Create a rc.d style start/stop script for our daemon
* Remove unused ADMIN_PEOPLE link
* Ignore unsupported ulimit -x errors
* Use more portable printf instead of echo -n
* Support starting as current user without start-stop-daemon
* Make startup output universally the same
* Get the canonical path to our temporary directory
* init: Start daemon and open web browser when done
* documentation: Clean up references to 'Gerrit2'
* Cleanup the reflog identity generation
* Update to gwtjsonrpc 1.2.0-SNAPSHOT
* init: Configure gerrit.canonicalWebUrl if reverse proxy
* tools/version.sh: Quick hack to edit our Maven version
* Call the next version 2.1
* documentation: Rewrite installation guide
* Fix gerrit.sh to run properly on SuSE systems
* documentation: Fix formatting of remote.name.authGroup
* Fix missing @Override warning in IoUtil
* Don't enable replication if replication.config is empty
* Give H2 a canonical file path
* init: Add --no-auto-start to prevent starting the daemon
* init: Support updating an existing site configuration
* init: Open browser to gerrit.canonicalWebUrl
* daemon: Allow httpd.listenUrl to end with /
* issue 358    init: Don't abort on empty directory
* init: Initialize system_config.site_path
* Remove dead class MessagePanel
* issue 331    documentation: Update developer docs
* documentation: Link to apache2 reverse proxy setup
* init: Fix LDAP prompts to store to ldap section
* init: Store httpd.sslKeyPasword in secure.config
* init: Fix a minor source code formatting error
* commentlink: Support raw HTML replacements
* documentation: Cleanup formatting in gerrit-config
* Delete legacy schema upgrade scripts
* Remove legacy tools/to_jetty.sh
* Remove standalone Jetty 6.x support scripts
* Move all resource files into src/main/resources
* init: Move optional library download configuration
* init: Refactor init to be small parts created
* Test SitePaths class
* Test SocketUtil class
* Test init's Libraries class
* Test init's upgrade from 2.0.x layout to 2.1 layout
* pgm_daemon launch: Run ../test_site like docs suggest...
* tools/version.sh: Don't mangle the git describe output
* Use SitePaths to locate the logs directory
* Resolve out any symlinks before starting logging
* Mark compressed log files read-only
* tools/release.sh: Simplify our release build process
* Teach Main to check the Java runtime version
* documentation: Mention Google Code Prettify in licens...
* Refactor GitRepositoryManager to be an interface
* issue 346    Fix duplicate branches showing in the Branches tab
* Completely remove GerritServer.properties
* Clean up the DWIMery for database.* configuration set...
* Never compress a pid file under $site_path/logs
* Fix reading the $site_path/etc/ssh_host_key in serial...
* gerrit 2.1