Release notes for Gerrit 2.1.2
==============================

Gerrit 2.1.2 is now available in the usual location:

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

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.  The highlighting algorithm is still
crude and could benefit from more fine-tuning, as its largely driven
by a simple Myers O(ND) character difference over the replaced lines.

* 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

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' 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
avaliable 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'`.

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 equivilent 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.

* 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.

* 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.

* 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.

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.

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 451 gerrit.sh: Wait until the daemon is serving requests
+
The gerrit.sh script now waits until the deamon 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.

* 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.

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.

* 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
* Merge "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.
* Merge "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.
* Merge "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
* Merge "Add MaxNoBlock category for advisory review levels"
* Add standard eclipse generated files to .gitignore
* Merge "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
* Merge "Update JGit to 0.5.1.141-g3eee606"
* Manage database connections directly in PatchScriptFactory
* issue 425 Update user documentation to explain branch access control
* Merge "Update user documentation to explain branch access control"
* Update to gwtjsonrpc 1.2.2-SNAPSHOT
* Merge "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
* Merge "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
71934c63512a40d4c04b54e29e002b0f7efdf53d
