Release notes for Gerrit 2.0.13, 2.0.13.1
=========================================

Gerrit 2.0.13.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]

*WARNING: This version contains a major configuration change.*

The schema upgrade needs to run in multiple parts.  Apply the first half:
----
  java -jar gerrit.war --cat sql/upgrade011_012_part1.sql | psql reviewdb
----

Now convert the system_config table to `$site_path/gerrit.config`.
----
  java -jar gerrit.war ConvertSystemConfig
----
or, do this conversion by hand.  See below for the mapping.

After verifying `$site_path/gerrit.config` is correct for your installation, drop the old columns from the system_config table.  *This causes configuration data loss.*
----
  java -jar gerrit.war --cat sql/upgrade011_012_part2.sql | psql reviewdb
----

Configuration Mapping
---------------------
|| *system_config*                || *$site_path/gerrit.config*     ||
|| max_session_age                || auth.maxSessionAge             ||
|| canonical_url                  || gerrit.canonicalWebUrl         ||
|| gitweb_url                     || gitweb.url                     ||
|| git_base_path                  || gerrit.basePath                ||
|| gerrit_git_name                || user.name                      ||
|| gerrit_git_email               || user.email                     ||
|| login_type                     || auth.type                      ||
|| login_http_header              || auth.httpHeader                ||
|| email_format                   || auth.emailFormat               ||
|| allow_google_account_upgrade   || auth.allowGoogleAccountUpgrade ||
|| use_contributor_agreements     || auth.contributorAgreements     ||
|| sshd_port                      || sshd.listenAddress             ||
|| use_repo_download              || repo.showDownloadCommand       ||
|| git_daemon_url                 || gerrit.canonicalGitUrl         ||
|| contact_store_url              || contactstore.url               ||
|| contact_store_appsec           || contactstore.appsec            ||

See also [http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html Gerrit2 Configuration].

New Features
------------
* GERRIT-180  Rewrite outgoing email to be more user friendly
+
A whole slew of feature improvements on outgoing email formatting was closed by this one (massive) rewrite of the outgoing email implementation.

* GERRIT-187  Make n/p jump to last/first line if no more hunks are ...
+
When in a patch view (side by side or unified) new key bindings n/p jump to the previous or next hunk, which is very useful if you have context set to Whole File.

* GERRIT-59   Add Next/Previous/Up links to the PatchScreen
+
Patch views now contain links to the next and previous file in the patch set, as well as back up to the change.  This has been a very long standing UI glitch that is finally resolved.

* Add "gerrit show-queue" to display the work queue
* GERRIT-110  Add admin command "gerrit replicate" to force resync a...
* Document all server side command line tools
+
There are new admin commands available over SSH, and all commands are now documented online.  See [http://gerrit.googlecode.com/svn/documentation/2.0/cmd-index.html Command Line Tools].  The new `gerrit replicate` is very useful when a slave goes offline for a bit, and returns later.

* Add remote.`<`name`>`.replicationdelay to control delay
* GERRIT-110  Automatically replicate all projects at startup
* GERRIT-110  Allow replication to match only some hosts
* GERRIT-200  Schedule replication by remote, not by project
+
Replication has been made more robust by allowing the administrator to control the delay, as to isolate replication scheduling into different pools.  This is very useful when replicating to multiple sites, e.g. to a warm-spare in the same data center, and to a far away slave in another country.  Gerrit also now forces a full replication on startup, to ensure all slaves are consistent.

* Move sshd_port to gerrit.config as sshd.listenaddress
+
The internal SSHD can now be bound to any IP address/port combinations, which can be useful if the system has multiple virtual IP addresses on a single network interface.

* Switch from Java Mail to Apache Commons NET basic SMTP...
* Block rcpt to addresses not on a whitelist
+
The new `sendemail` section of `$site_path/gerrit.config` now controls the configuration of the outgoing SMTP server, rather than relying upon a JNDI resource.  See [http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html configuration] section sendemail for more details.

Bug Fixes
---------
* Fix file browser in patch that is taller than the wind...
* GERRIT-184  Make 'f' toggle the file browser popup closed
* GERRIT-188  Fix key bindings in patch when changing the old or new...
* GERRIT-211  Remove spurious whitespace from blank lines in diff vi...
* GERRIT-196  Fix CSS styling on the history table
* GERRIT-193  Automatically switch from empty side-by-side to unifie...
+
Misc. bug fixes on the patch view screens that I identified after the 2.0.12 release.

* GERRIT-182  Don't NPE when the remote peer address isn't yet known
* GERRIT-192  Fix NPE in MergeOp when submit to new branch fails due...
* GERRIT-207  Fix StackOverflowError during cherry-pick submit
+
Misc. internal bugs, primarily caused by stupid programming mistakes.

* Invalid sshkeys cache entries when the sshUserName cha...
+
If a user tried to connect with the wrong user name, then tried to change their SSH User Name through the web UI (by selecting a different preferred email address), the negative cache entry created during their first connection attempt was stuck in the cache and future connections were still rejected.  Gerrit now flushes both the old and the new user name cache entries when the user name changes.

* GERRIT-210  Allow MINA SSHD to log about host key creation
* Make SSH host key loading more consistent over time
+
It has been pointed out several times that its unclear why Gerrit keeps changing its host key with each startup; this is due to a failure to write the generated host key to disk.  We now log about it, and make it less likely that other sorts of configuration modifications would cause an unexpected host key change.

* Always run SSH replication in BatchMode
* Special case NoRemoteRepository during replication
* Simplify error logged for invalid URLs in replication....
* Special case UnknownHostKey during replication
* Allow replication.config to drive the thread pool larg...
* Fix treatment of symbolic refs in PushOp
+
A bunch of bug fixes related to error handling during replication.  Errors are now logged in a more clear fashion, which should help administrators to debug replication problems.

* Restore Ctrl-Backspace in comment editor
* Use server name for ssh_info instead of local address
* Use server name for advertised SSH host keys
* Don't reverse resolve CNAMEs when advertising our SSHD
+
Bug fixes identified after release of 2.0.13, rolled into 2.0.13.1.

Other Changes
-------------
* Start 2.0.13 development
* Use gwtexpui 1.1.1-SNAPSHOT
* Document the Patch.PatchType and Patch.ChangeType enum
* Document the Change.Status enum
* Remove useless boolean return value from ChangeMail he...
* Remove pointless null assignment from PatchScreen
* Move ChangeMail into its own server side package
* Fix patch set replacement emails to correctly retain r...
* Document ReviewDb.nextChangeMessageId
* Document some of the core database entity graph
* Rewrite the replication documentation
* Add an anchor for Other Servlet Containers
* Fix minor formatting style nit in PushQueue
* Extract the PushOp logic from PushQueue
* Refactor PushQueue.scheduleUpdate to be smaller methods
* Refactor WorkQueue to support task inspection
* Reload the submit queue on startup with a 15 second de...
* Move the per-command ReviewDb handle up to AbstractCom...
* Don't attempt to replicate the magic "-- All Projects ...
* Document that remote.<name>.uploadpack is also support...
* Correct the defaults for remote uploadpack, receivepack
* Use a HashSet for the active tasks, rather than a List
* Use gwtorm 1.1.1-SNAPSHOT
* Remove references in documentation to My>Settings
* Mention 'git receive-pack' --cc/--reviewer args
* Fix NPE in "gerrit replicate --all"
* Put a link back to the index in every page footer
* Document the other standard caches
* Delete now unnecessary ImportProjectSubmitTypes
* Don't start background queues during command line tools
* Create GerritConfig after parsing gerrit.config file
* Create a utility to export system_config to gerrit.con...
* Move contact store configuration to gerrit.config
* Move gerrit_git_email,gerrit_git_name to gerrit.config
* Move authentication fields from system_config to gerri...
* Move gitwebUrl to gerrit.config
* Move use_repo_download to gerrit.config
* Move canonical_url, git_daemon_url to gerrit.config
* Move git_base_path to gerrit.config
* Document where the nextval_project_id function is for ...
* Use gwtorm, gwtexpui 1.1.1 final versions
* Add sendemail.enable to disable email output
* Use mvn -offline mode when running ./to_hosted.sh
* Disable AES192CBC and AES256CBC if unlimited cryptogra...
* gerrit 2.0.13