Gerrit 2.1 is now available in the usual location:

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.

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