= Release notes for Gerrit 2.1.2

Gerrit 2.1.2 is now available in the usual location:

link:https://www.gerritcodereview.com/download/index.html[https://www.gerritcodereview.com/download/index.html]

== Schema Change

*WARNING* This release contains multiple schema changes.  To upgrade:
----
  java -jar gerrit.war init -d site_path
----


== Breakages

* issue 421 Force validation of the author and committer lines
+
The author line must now match the authenticated user when uploading a
change, and both author and committer must match when pushing directly
into a branch with the Push Branch permission.  This is a new
restriction that did not exist in prior versions and was necessary to
close a hole that permitted users to completely forge commits if they
had Push Branch +1 granted.
+
Project owners may grant the new Forge Identity permission to permit a
user group to forge the author and/or committer lines in commit
objects they are pushing for review, or directly into a branch.  To
match prior behavior grant Forge Identity +1 where Read +2 (Upload)
exists, and Forge Identity +2 where Push Branch >= +1 exists.


== New Features

=== UI - Diff Viewer

* issue 169 Highlight line-level (aka word) differences in files
+
Differences within a replaced line are now highlighted with a
brighter red or green background color.  Some heuristics are
applied to identify and highlight reindented blocks in popular
C/C++/Java/C#-like and Python-like languages.  The highlighting
algorithm is still simple and could benefit from more fine-tuning,
as its largely driven by a simple Myers O(ND) character difference
over the replaced lines.
+
The configuration variable cache.diff.intraline can be used to
disable this feature site-wide, if it causes problems.

* Improve side-by-side viewer look-and-feel
+
The look-and-feel of the side-by-side viewer (and also of the unified
viewer) has been significantly improved in this release.  Coloring of
regions is more consistently applied, reducing reader distraction.
Comment boxes use a cleaner display, and take up less space per line.

* Adjustable patch display settings
+
Users can now set the tab size or number of columns when displaying a
patch.  Toggles are also available to enable or disable syntax
coloring, intraline differences, whitespace errors, and visible tabs.

* issue 416 Add download links to side-by-side viewer
+
The side-by-side viewer now offers links to download the complete file
of either the left or right side.  To protect the users from malicious
cross-site scripting attacks, the download links force the content to
be wrapped inside of a ZIP archive with a randomized file name.
Server administrators may use the mimetype.safe configuration setting
to avoid this wrapping if they trust users to only upload safe file
content.

* Improve performance of 'Show Full Files'
+
The 'Show Full File' checkbox in the file viewers no longer requires
an RPC if the file is sufficiently small enough and syntax coloring
was enabled.  The browser can update the UI using the cached data it
already has on hand.

* Show old file paths on renamed/copied files
+
If a file was renamed or copied, the side-by-side viewer now shows the
old file path in the column header instead of the generic header text
'Old Version'.

* Improved character set detection
+
Gerrit now uses the Mozilla character set detection algorithm when
trying to determine what charset was used to write a text file.
For UTF-8 or ISO-8859-1/ASCII users, there should be no difference
over prior releases.  With this change, the server can now also
automatically recognize source files encoded in:

a. Chinese (ISO-2022-CN, BIG5, EUC-TW, GB18030, HZ-GB-23121)
b. Cyrillic (ISO-8859-5, KOI8-R, WINDOWS-1251, MACCYRILLIC, IBM866, IBM855)
c. Greek (ISO-8859-7, WINDOWS-1253)
d. Hebrew (ISO-8859-8, WINDOWS-1255)
e. Japanese (ISO-2022-JP, SHIFT_JIS, EUC-JP)
f. Korean (ISO-2022-KR, EUC-KR)
g. Unicode (UTF-8, UTF-16BE / UTF-16LE, UTF-32BE / UTF-32LE / X-ISO-10646-UCS-4-34121 / X-ISO-10646-UCS-4-21431)
h. WINDOWS-1252

* issue 405 Add canned per-line comment reply of 'Done'
* issue 380 Use N/P to jump to next/previous comments
* Use RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK for tabs
* Use a tooltip to explain whitespace errors

=== UI - Other

* issue 408 Show summary of code review, verified on all open changes
+
The open changes views now show the status summary columns, just like
a user dashboard shows.  This requires an extra RPC per page display,
but can save user time when trying to identify which reviews should be
examined.

* Only enable 'Delete' button when there are selections
+
In Settings panels the delete button is enabled only if at least one
row has been selected to be removed.

* SSH commands stop option parsing on \--
+
Like most POSIX commands, `\--` now signifies the end of options for
any command accessible over SSH.

* Include formatted HTML documentation in WAR
+
Official release WARs now contain the formatted HTML documentation,
and a 'Documentation' menu will display in the main UI (alongside
'All', 'My', 'Admin') to help users access the local copy rather
than jumping to the remote Google Code project site.

* Enhanced patch set download commands
+
Download commands for patch sets are now offered as a tabbed panel,
allowing the user to select between 'repo download', 'git pull',
or 'git fetch ... && git cherry-pick' or 'git fetch ... && git
format-patch' styles, as well as to select the transport protocol
used, including anonymous Git or HTTP, or authenticated SSH or HTTP.
The current selections are remembered for signed-in users, permitting
end-users to quickly reuse their preferred method of grabbing a
patch set.

* Theme the web UI with different skin colors
+
Site administrators can now theme the UI with local site colors
by setting theme variables in gerrit.config.

=== Permissions

* issue 60 Change permissions to be branch based
+
Almost all permissions are now per-branch within each project.  This
includes Code Review, Verified, Submit, Push Branch, and even Owner.
Permissions can be set on a specific branch, or on a wildcard that
matches all branches that start with that prefix.  Read permission is
still handled at the project level, but future versions should support
per-branch read access as well.

* MaxNoBlock category for advisory review levels
+
The new MaxNoBlock category function can be used in a custom approval
category for reviews that are performed by automated lint tools.
See link:http://gerrit.googlecode.com/svn/documentation/2.1.2/access-control.html#function_MaxNoBlock[access control]
for more details on this function.

=== Remote Access

* Enable smart HTTP under /p/ URLs
+
Git 1.6.6 and later support a more efficient HTTP protocol for both
fetch/clone and push, by relying upon Git specific server side logic.
Gerrit Code Review now includes the necessary server side support when
accessing repositories using URLs of the form
`http://review.example.com/p/'$projectname'.git`.
Authentication over smart HTTP URLs is performed using standard HTTP
digest authentication, with the username matching the SSH username,
but the password coming from a field that is generated by Gerrit and
accessible to the user on their Settings > SSH Keys tab.
Smart HTTP requests enter the same resource queue as SSH requests,
using the embedded Jetty server to suspend the request and later
resume it when processing resources are available.  This ensures HTTP
repository requests don't overtax the server when made concurrently
with SSH requests.

* issue 392 Make hooks/commit-msg available over HTTP
+
The scp filesystem holding client side tools and hooks is now
available over `http://review.example.com/tools/'$name'`.  User
documentation is updated with example URLs.

* issue 470 Allow /r/I... URLs
+
Change-Ids can now be searched for by accessing the URL
`http://example.com/r/'Ichangeid'`, similar to how commits
can be searched by `http://example.com/r/'commitsha1'`.

* gerrit-sshd: Allow double quoted strings
+
SSH command arguments may now be quoted with double quotes, in
addition to single quotes.  This can make it easier to intermix
quoting styles with the shell that is calling the SSH client .

=== Server Administration

* issue 383 Add event hook support
+
Site administrator managed hook scripts can now be invoked at various
points in processing.  Currently these scripts are informational only
and cannot influence the outcome of an event.  For more details see
link:http://gerrit.googlecode.com/svn/documentation/2.1.2/config-hooks.html[hooks].

* Add stream-events command
+
The new 'gerrit stream-events' command can be used over SSH by an
end-user to watch a live stream of any visible patch set creation,
comments and change submissions.  For more details see
link:http://gerrit.googlecode.com/svn/documentation/2.1.2/cmd-stream-events.html[gerrit stream-events].

* Log HTTP activity to $site_path/logs/httpd_log
+
When httpd.listenUrl is http:// or https://, requests are
logged into `'$site_path'/logs/httpd_log`.  This mirrors the
behavior of the SSH daemon, which also logs requests into the
same directory.  For proxy URLs HTTP requests aren't logged,
since the front-end server is expected to be performing the
logging.  Logging can be forced on, or forced off by setting
link:http://gerrit.googlecode.com/svn/documentation/2.1.2/config-gerrit.html#httpd.requestLog[httpd.requestLog].

* Allow the daemon's host key to authenticate to itself
+
The SSH daemon's host key can now be used to authenticate as the
magic user `Gerrit Code Review`.  This user identity is blessed as
even more powerful than a user in the Administrators group, as using
it requires access to the private half of the host key.  For example:
+
----
  ssh -p 29418 -i site_path/etc/ssh_host_rsa_key 'Gerrit Code Review'@localhost gerrit flush-caches --all
----

* Allow $site_path/etc/peer_keys to authenticate peer daemons
+
Additional public keys for the magical 'Gerrit Code Review' user may
be specified in an OpenSSH authorized_keys style file and are
functionally equivalent to authenticating with the daemon's host key.
The keys are primarily intended to be other daemons, most likely
slaves, that share the same set of repositories and database.

* Allow suexec to run any command as any user
+
The new SSH based suexec command can only be invoked by the magic user
`Gerrit Code Review` and permits executing any other command as any
other registered user account.  This forms the foundation of allowing
a slave daemon process to transparently proxy any write request from a
client forward to the current master.
+
The transparent proxy support is not yet implemented in the slave.

* Support automation of gsql by JSON, -c option
+
The gsql command now supports JSON as an output format, making
software driven queries over SSH easier.  The -c option accepts
one query, executes it, and returns.

=== Other

* Warn when a commit message isn't wrapped
+
During receive Gerrit warns the user if their commit messages appears
to be incorrectly formatted, by having lines that aren't hard-wrapped
or that has an extremely long subject line.

* During merge use existing author identity values
+
When Gerrit creates a merge commit in order to submit a change, the
author information of the merge commit is taken from the submitter.
If all of the commits being submitted were written by the submitter,
the authorship of the merge commit is copied from one of those commits
rather than from the user's preferred account information.


== Bug Fixes

=== UI

* Change "Publish Comments" to "Review"
+
The term "Publish Comments" was used on two different buttons that
performed two different actions.  The first usage was to open the
screen which shows the scoring buttons, provides the cover letter
editor, and shows the in-line comments for final review before
publication.  The button that opens that review screen has been
renamed "Review".  The second usage of the button was to actually send
out the notification emails, and expose the comments to others.  This
button is still called "Publish Comments".

* issue 448 Disable syntax highlighting on unified views
+
Syntax highlighting in the unified patch view isn't useful if it hides
the added and removed lines red/green text color.  Disable it entirely
so the add/remove coloring shows up instead.

* Disable 'Syntax Highlighting' and 'Show Full File' on big files
+
If the file is really big (over 9000 lines), 'Show Full File' is
actually disabled on the server side, to prevent the client from
being overrun with data.  The UI now reflects this by disabling
the checkbox for the user, and adds a tooltip to indicate why its
greyed out.

* Don't try to syntax highlight plain text
+
Plain text files can't benefit from syntax highlighting, its actually
more confusing than it is useful.  Skip highlighting on them.

* issue 251 Fix bad syntax highlighting
+
Prior versions performed syntax highlighting on a per-line basis,
resulting in confusing or bogus results in multi-line contexts like
C/Java's "/\* ... \*/" style comment.  Fixed by performing
highlighting on the entire file contents, even if only some lines are
displayed to meet the user's context setting.

* Ensure vertical tabs are visible
+
Vertical tab markers are red, which means they can be hidden against a
whitespace error, or deleted region marker.  Tabs are now shown as
black against these cases.

* Handle bare CR in the middle of a line
+
If a CR ("\r") appears in the middle of a line rather than nestled
against an LF as a CRLF pair, its now displayed as a whitespace
error, and the line isn't broken at the CR.  This fixes an issue
where a mostly CRLF file with a single malformed line ending caused
the side-by-side display to render incorrectly (or not at all).

* issue 438 Skip gitlink modes as we can't get a content difference
+
The special gitlink mode inside of a tree points to a commit in the
submodule project.  We can't show the content of it inside of the
supermodule.

* issue 456 Support enter to submit on most forms
+
Enter key on a lot of forms did not activate the reasonable default
action, e.g. add a reviewer to an existing review.  Fixed.

* issue 347 Improve handling of files renamed between patch sets
+
Comment counts in the "history" section of a file viewer were not
displayed when the file was renamed between two different patch sets
of the same change.  Fixed.

* Fix the style of the Reviewed column header
+
The reviewed column header wasn't displaying with the same style as
its siblings.  Fixed.

* Fix duplicate "Needed By" pointers between changes
+
If a change's current patch set was used as the parent for multiple
patch sets of another change, that dependent change showed up more
than once in the "Needed By" list.  Fixed.

* Expand group names to be 255 characters
* Update URL for GitHub's SSH key guide
* issue 314 Hide group type choice if LDAP is not enabled

=== Email

* Send missing dependencies to owners if they are the only reviewer
+
If the owner of the change is the only reviewer and the change can't
be submitted due to a missing dependency, Gerrit failed to send out an
email notification.  Fixed.

* issue 387 Use quoted printable strings in outgoing email
+
Names or subjects with non-ASCII characters were not quoted properly
in the email notification headers.  Fixed.

* issue 475 Include the name/email in email body if not in envelope
+
When the email address from line is a generic server identity,
there is no way to know who wrote a comment or voted on a change.
An additional from line is now injected at the start of the email
body to indicate the actual user.

=== Remote Access

* issue 385 Delete session cookie when session is expired
+
If the session expires and the user clicks "Close" in the session
expired popup dialog box, delete the cookie so the user can continue
to use the website as an anonymous user.

* Dequote saved OpenID URLs
+
Certain OpenID URLs were getting double quotes thrown around them
after being saved in the last identity cookie on the client.  The
quotes were loading back into the dialog on a subsequent sign-in
attempt, resulting in an error as double quotes aren't valid in an
HTTP URL.  Fixed by dropping the quotes if present.

* Fix NoShell to flush the error before exiting
+
Sometimes users missed the standard error message that indicated no
shell was available, due to a thread race condition not always
flushing the outgoing buffer.  Fixed.

* issue 488 Allow gerrit approve to post comments on closed changes
+
The 'gerrit approve' command previously refused to work on a closed
change, but the web UI permitted comments to be added anyway.
Fixed by allowing the command line tool to also post comments to
closed changes.

* issue 466 Reject pushing to invalid reference names
+
Gerrit allowed the invalid `HEAD:/refs/for/master` push refspec
to actually create the branch `refs/heads/refs/for/master`, which
confused any other client trying to push.  Fixed.

* issue 485 Trim the username before requesting authentication
+
LDAP usernames no longer are permitted to start with or end with
whitespace, removing a common source of typos that lead to users
being automatically assigned more than one Gerrit user account.

=== Server Administration

* daemon: Really allow httpd.listenUrl to end with /
+
If httpd.listenUrl ended with / the configuration got botched during
init and the site didn't work as expected.  Fixed by correctly
handling an optional trailing / in this variable.

* issue 478 Catch daemon startup failures in error_log
+
Startup errors often went to /dev/null, leaving the admin wondering
why the server didn't launch as expected.  Fixed.

* issue 483 Ensure uncaught exceptions are logged
+
Some exceptions were reaching the top of the stack frame without
being caught and logged, causing the JRE to print the exception to
stderr and then terminate the thread.  Since stderr was redirected
to /dev/null by gerrit.sh, we usually lost these messages.  Exception
handlers are now installed to trap and log any uncaught errors.

* issue 451 gerrit.sh: Wait until the daemon is serving requests
+
The gerrit.sh script now waits until the daemon is actually running
and able to serve requests before returning to the caller with a
successful exit status code.  This makes it easier to then start up
dependent tasks that need the server to be ready before they can run.

* gerrit.sh: Don't use let, dash doesn't support it
+
/bin/sh on Debian/Ubuntu systems is dash, not bash.  The dash
shell does not support the let command.

* gerrit.sh: Correct JAVA_HOME behavior
+
JAVA_HOME now can be overridden by container.javaHome, as the
documentation states.

* init: Only suggest downloading BouncyCastle on new installs
+
Upgrades of an existing installation which has not installed the
BouncyCastle library shouldn't be encouraged to download and install
the library again.  The administrator has already chosen not to use
it, we shouldn't nag them about it.

* issue 389 Catch bad commentlink patterns and report them
+
A bad commentlink.match pattern could cause the change screen to
simply not load, with no errors in the server log, and nothing
immediately visible on the client.  Most bad patterns are now caught
during server startup and are reported in the server error_log.
Certain failures are caught on the client side, and sent to the server
error log over RPC.  Bad patterns are simply skipped when logged.

* issue 419 MySQL: Fix account\_group\_members\_audit removed\_on
+
MySQL has a "feature" which prevented the removed_on column from being
NULL when we meant for it to be NULL.  Fixed by using the MySQL
suggested work around, which is non-standard SQL.

* issue 424 WAR truncated during init
+
init sometimes truncated the WAR file to 0 bytes if it was running
from the destination WAR.  Fixed by using JGit's LockFile class which
writes to a temporary file and does an atomic rename to finish.

* issue 423 Bind to LDAP using only the end-user identity
+
Microsoft Active Directory doesn't support anonymous binds, and some
installations might not be able to create a generic role account for
Gerrit Code Review.  The new auth.type LDAP_BIND permits Gerrit to
authenticate using only the end-user's credentials, avoiding the need
for an anonymous or role account bind.

* issue 423 Defer LDAP server type discovery until first authentication
+
Microsoft Active Directory wasn't being detected, because the
anonymous bind during server startup failed.  Instead the server
type is detected during the first user authentication, where we
have a valid directory context to query over.

* issue 486 Reload UI if code split fails to download
+
If the server gets upgraded and the user hasn't reloaded their
browser tab since the upgrade, opening a new section of the UI
sometimes failed.  Fixed by executing an implicit reload in these
cases, reducing the number of times a user sees a failure.

=== Development

* issue 427 Adjust SocketUtilTest to be more likely to pass
+
Some DNS environments, especially those based on OpenDNS, were failing
this test case during a build because the upstream resolver was
returning back a bogus record for an invalid domain name.  The test
was adjusted to use a name that is less likely to be resolved by a
broken upstream resolver.

* Fix /become?user_name=... under GWT debugger
+
The /become URL now accepts ?user_name=who to authenticate, making
it easier to setup a launch configuration to debug a particular
user account in development.

* Show localhost based SSH URLs
+
SSH URLs using localhost as the hostname are now visible in the
web UI, making it easier to copy and paste SSH URLs when debugging
fetching of changes.

* issue 490 Try Titlecase class name first when launching programs
+
Launching daemon or init from the classes directory on a case
insensitive filesystem like Mac OS X HFS+ or Windows NTFS failed.
Fixed.

* Misc. license issues
+
The CDDL javax.servlet package was replaced by an Apache License 2.0
implementation from the Apache Foundation.  The unnecessary OpenXRI
package, which was never even included in the distribution, was
removed from the license file.


== Schema Changes in Detail

* Remove Project.Id and use only Project.NameKey
+
The project_id column was dropped from the projects table, and all
associated subtables, and only the name is now used to link records
in the database.  This simplifies the schema for eventual changes
onto less-traditional storage systems.

* Move sshUserName from Account to AccountExternalId
+
The ssh\_user\_name column in accounts was moved to an additional row
in account\_external\_ids, using external\_id prefix `username:`.
This removes the non-primary key unique index from the table, making
it easier to move to less traditional storage systems.

* Replace all transactions with single row updates
+
Schema update operations have been reworked to not require multi-row
transaction support in the database.  This makes it easier to port
onto a distributed storage system where multi-row atomic updates
aren't possible, or to run on MySQL MyISAM tables.


== Other Changes
* Update gwtorm to 1.1.4-SNAPSHOT
* Add unique column ids to every column
* Remove unused byName @SecondaryKey from ApprovalCategory
* Remove @SecondaryKey from AccountGroup
* documentation: Remove mention of mysql_nextval.sql script
* Drop MySQL function nextval_project_id
* documentation: Remove project_id from manual insert
* Update JGit to 0.5.1.106-g10a3391
* Split the core receive logic out of the SSH code
* Move toProject into PageLinks for reuse
* Correct SSH Username to be just Username
* Don't display the magic username identity on the identities tab
* Show Status column header on the SSH key table
* Queue smart HTTP requests alongside SSH requests
* Add a password field to the account identities
* Authenticate /p/ HTTP and SSH access by password
* Advertise the smart HTTP URLs to references
* Refactor the SSH session state
* Fixing Eclipse settings file
* Add --commit to comment-added as there was previously no way to kno...
* Fix imports inside of PatchScreen.java
* Fix crash while loading project Access tab
* Replace our own @Nullable with javax.annotation.Nullable.
* Correctly hide delete button on inherited permissions
* Allow per-branch OWN +1 to delegate branch ownership
* Block inheritance by default on per-branch permissions.
* Simplify FunctionState as discussed previously
* Restore delete right checkboxes in wild card project
* issue 393 Require branch deletion permission for pushes over HTTP
* issue 399 Update JGit to 0.5.1.140-g660fd39
* Add standard eclipse generated files to .gitignore
* Don't reformat the source if the files are identical
* Fix schema 27 upgrade for H2
* Update JGit to 0.5.1.141-g3eee606
* Manage database connections directly in PatchScriptFactory
* issue 425 Update user documentation to explain branch access control
* Update to gwtjsonrpc 1.2.2-SNAPSHOT
* Allow refs/* pattern on new reference rights
* Trim reference name from user when adding access right
* Execute Git commands with AccessPath.GIT
* Update to GWT 2.0.1
* Update to Ehcache 1.7.2
* Update to mime-util 2.1.3
* Update to H2 1.2.128
* issue 442 Fix IncorrectObjectTypeException on initial commit
* Compute allowed approval categories separately.
* Move new change display to PostReceiveHook
* Drop unused formatLanguage property from patch table
* issue 447 documentation: Improve Apache mod_proxy configuration
* issue 445 Fix whitespace errors with word diff enabled
* issue 439 Move syntax highlighting back to client
* Remove Mozilla Rhino from our build
* Add missing step to add gwtui_dbg configuration
* Remove useless imports from Schema_28
* Fix upgrading H2 from schema 20 to current
* Move release notes into the repository
* issue 454 documentation: Improve bugzilla link example to include #
* Drop unused err PrintWriter in Receive
* documentation: Describe how to do case insensitive commentlink
* Add patch releases to release notes
* Update to gwtorm 1.1.4, gwtjsonrpc 1.2.2, gwtexpui 1.2.1
* Update to GWT 2.0.2
* documentation: Remove stupid ReleaseNotes build rules
* documentation: Use a per-version directory
* Draft 2.1.2 release notes
* documentation: Fix version number to only consider x.y.z format
* Drop XRI related support from our notices list
* documentation: Correct sorting error in notices
* documentation: Add JSR 305 and AOP Alliance to licenses
* documentation: Correct links to the MPL 1.1 license
* Replace CDDL javax.servlet with APLv2 implementation
* documentation: Document database.pool* variables
* Update 2.1.2 release notes to mention juniversalchardet
* Fix whitespace ignore feature
* Fix database connection leak in git-receive-pack
* Delay marking a file reviewed until its displaying
* Simplify patch display to a single RPC
* Fix missing right side border of history, dependency tables
* Cleanup useless leftmost/rightmost CSS classes
* Don't RPC to load the full file if we already have it
* Add Forge Identity +3 to permit pushing filtered history
* Fix source code formatting in RefControl
* Fix combined diffs on merge commits
* Fix SparseFileContent for delete-only patches
* Simplify some CSS rules for side-by-side viewer
* Color entire replace block same background shade
* Cleanup CSS for side-by-side view when there are character differen...
* documentation: Fix typo on the word database
* Always use class wdc on replace line common sections
* Fix side-by-side table header CSS glitch
* Fix file line padding in side-by-side viewer
* Improve the way inline comments are shown
* Fix side by side view column headers to use normal font
* Tweak the intraline difference heuristics
* Refactor and add to streaming events schema
* Documentation schema for stream-events command
* Fix source code formatting errors in MergeOp
* Cleanup display of branches panel when gitweb isn't configured
* Fix "Show Tabs" checkbox
* Update 2.1.2 release notes
* Reorganize 2.1.2 release notes into categories
* Hide syntax highlighting checkbox in unified view
* Change default tab width to 8
* Ensure drafts redisplay when refreshing the page
* Fix tab marker RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
* issue 473 Don't aggressively coalesce across lines
* Fix intraline difference off-by-one when LF is added
* Mark add or delete regions with darker colors
* Invalidate the diff cache
* Fix build breakage due to missing constants
* Fix editable username when authType is LDAP or HTTP_LDAP
* issue 481 Fix enter with completion in add reviewer box
* Make intraline differences easier to debug
* Avoid "es" replaced by "es = Address"
* Cleanup line insertions joined against indentation change
* Change become to use user_name field
* Stop leaking patch controls CSS to other widgets
* Fix coloring of tab markers in syntax highlighting
* Fix toggling syntax highlighting on partial file
* Permit use of syntax highlighting in unified view
* Use hunk background colors on unified views with syntax highlighting
* Fix source code formatting in ApproveCommand.java
* issue 483 Log the type of a non-task after it executes
* Update to GWT 2.0.3
* issue 489 Drop host name resolution failure test
* issue 483 Remove reliance on afterExecute from WorkQueue

71b04c00b174b056ed2579683e2c1546d156b75a
