Release notes for Gerrit 2.0.14, 2.0.14.1
=========================================

Gerrit 2.0.14.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 schema change* (since 2.0.13)

Apply the database specific schema script:
----
  java -jar gerrit.war --cat sql/upgrade012_013_postgres.sql | psql reviewdb
  java -jar gerrit.war --cat sql/upgrade012_013_mysql.sql | mysql reviewdb
----

New Features
------------
* GERRIT-177  Display branch name next to project in change list
+
Now its easier to see from your Mine>Changes what branch each change goes to.  For some users this may help prioritize reviews.

* GERRIT-27   Add commit SHA-1 search to search panel
+
The search box in the top right now accepts full or abbreviated commit SHA-1s, in addition to change numbers.  This is a more user friendly way to locate a change, instead of hacking the URL with the legacy /r/commitsha1 reference.

* Add "Ignore whitespace" to patch views
+
You can now ask for a difference ignoring leading/trailing whitespace, which may be useful in a review when a block of code is moved underneath an if, or moved out of an if.

* Added a checkbox to switch between contextual/full fil...
+
You can now switch a side-by-side view to full context without going to Settings and returning back.

* GERRIT-115  Automatically close changes when a commit is pushed in...
* GERRIT-54   Close change if a replacement patch set is already sub...
+
These pair of changes basically mean that if you download and merge a commit locally, then push that directly into a branch (assuming you have been granted Push access), the change closes automatically.  Likewise, if a replacement patch set is uploaded to a change, but is already merged to a branch, the change closes automatically.  These close some loopholes where the branches and the changes weren't necessarily always in sync.

* Add a micro scp daemon to our SSHD
* Create gerrit-cherry-pick for client usage
+
Gerrit now runs a micro scp daemon as part of its SSHD, and that scp provides a read-only access of some utility functions for client computers.
gerrit-cherry-pick is a small Bourne shell script end-users can scp onto their local system, then use to download and cherry-pick changes from Gerrit by change number.
More tools are likely to be developed in the future.

* Audit group member addition and removals
* Add automaticMembership flag to account groups
* GERRIT-17   Enable groups to manage contributor agreements
+
Group membership changes are now audited in the account_group_members_audit table, but the information is not currently published in the web UI.  This is a start in the direction of keeping track of "who had access to do what when".  In addition, if you use contributor agreements (like review.source.android.com does), CLA acknowledgement can now be done through group membership, rather than a per-user basis.

* GERRIT-174  Record the submitter in the reflog during merge
+
This is really for the server admin, the Git reflogs are now more likely to contain actual user information in them, rather than generic "gerrit2@localhost" identities.  This may help if you are mining "WTF happened to this branch" data from Git directly.

Bug Fixes
---------
* GERRIT-213  Fix n/p on a file with only one edit
* GERRIT-66   Always show comments in patch views, even if no edit e...
* Correctly handle comments after last hunk of patch
+
Bug fixes for patch views (e.g. side by side and unified).  Always showing comments is a really nice plus, it helps during a review to ensure that reviewer comments were addressed, even if there was no edit made in that region of the file.

* Don't allow commits to replace in wrong project
+
It was possible to upload a replacement commit in project Foo to a change created in project Bar, putting the Bar change into a corrupt and not-viewable state.  This is now correctly error-checked.

* Update SSHD to 1.0-r784137
* GERRIT-199  Update JGit to 0.4.0-388-gd3d9379
* Update JGit to 0.4.0-398-ge866578
+
JGit suffered from some performance problems when the client was very far ahead of the server, e.g. fetching an Android msm kernel (which is based on an older Linux kernel) into a recent bleeding edge kernel repository took hours.  It now takes seconds.  SSHD was bumped to pick up MINA 2.0.0-M6 which fixes some minor bugs, and is likely to be the final 2.0.0 release version.

* Fix double click on patch set SHA-1 to select only SHA...
* GERRIT-190  Provide feedback when a reviewer is invalid
* GERRIT-191  Show email address matched by completion rather than p...
+
Minor cosmetic improvements.

* Fix multiple recipient To/CC headers in emails
+
Fixed run-on addresses when more than one user was listed in To/CC headers.

Other Changes
-------------
* Start 2.0.14 development (again)
* Small doc updates.
* Merge change 10282
* documentation: Use git config --file path
* Skip the ssh:// download URL if the SSHD is unknown
* Refactor submitter to PersonIdent mapping in MergeOp
* Refactor MergeOp.getSubmitter to return the ChangeAppr...
* Remove invalid usage of List.subList(int,int)
* Convert command line programs to use args4j
* Don't permit overlapping Edit instances in patch scrip...
* Merge change 10347
* Update executablewar to 1.2
* Pass the PatchScriptSettings back as part of the Patch...
* Move PatchScriptSettings to .data package
* Use ValueChangedHandler for CheckBox update events in ...
* Display post-image lines in side-by-side view when ign...
* Use binary search when pulling lines from SparseFileCo...
* Fix compile error in PatchFile
* Don't try to auto-close changes on branch delete
* Document the new gerrit-cherry-pick command
* gerrit 2.0.14
+

* Start 2.0.15 development
* GERRIT-221  Ensure RevCommit's body buffer is available when needed
* Fix stack trace capture in Receive error path
* Fix --reviewer during replace patch set
* Document git receive-pack with Gerrit options
* Add toString debugging aids to SparseFileContent
* GERRIT-220  Fix bad diff display near empty comment caused edits
* gerrit 2.0.14.1