Update Gerrit 2.5 release notes

Describe the recently merged changes in the Gerrit 2.5 release notes.

Change-Id: I8eb902e17068688f1787b4b9be52927a86f05774
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/ReleaseNotes/ReleaseNotes-2.5.txt b/ReleaseNotes/ReleaseNotes-2.5.txt
index 3065b63..53369b0 100644
--- a/ReleaseNotes/ReleaseNotes-2.5.txt
+++ b/ReleaseNotes/ReleaseNotes-2.5.txt
@@ -298,6 +298,8 @@
 successor change was wrongly listing both changes in the 'Depends On'
 section. Now only the predecessor change of the own project is listed.
 
+* Highlight dependencies to abandoned changes by red background
+
 * link:http://code.google.com/p/gerrit/issues/detail?id=1383[issue 1383]:
   Display the approval table on the PublishCommentsScreen.
 +
@@ -408,6 +410,19 @@
 A link was added next to the "Reviewed" checkbox that marks the current
 patch as reviewed and goes to the next unreviewed patch.
 
+* Add key commands to mark a patch as reviewed
++
+Add key commands
++
+. to toggle the reviewed flag for a patch ('m')
++
+and
++
+. to mark the patch as reviewed and navigate to the next unreviewed
+patch ('M').
+
+* Use download icons instead of the `Download` text links
+
 User Dashboard
 ^^^^^^^^^^^^^^
 * Support for link:../Documentation/user-custom-dashboards.html[custom
@@ -491,6 +506,13 @@
 Instead of linking from a user name to the user's dashboards, link to
 a search for changes owned by that user.
 
+* link:../Documentation/config-gerrit.html#gerrit.reportBugUrl[Allow
+  configuring the `Report Bug` URL]
++
+Let site administrators direct users to their own ticket queue, as for
+many servers most of the reported bugs are small internal problems like
+asking for a repository to be created or updating group memberships.
+
 * On project creation allow choosing the parent project from a popup
 +
 In the create project UI a user can now browse all projects and select
@@ -507,6 +529,18 @@
 This allows to see the branches of the `All-Projects` project in the
 web UI.
 
+* Move the project listing menu items to a new top-level item
++
+Finding the project listing was very opaque to end users. Nobody
+expected to look under `Admin` and furthermore, anonymous users were
+unable to find that link at all.
++
+Introduced a new top-level `Projects` menu that has `List` in it to
+take you to the project listing.
++
+In addition the `Create new project` link from the top of that listing
+was moved to this new menu.
+
 * Move form for group creation to own screen
 +
 Move the form for the group creation from the GroupListScreen to an
@@ -514,6 +548,19 @@
 beginning of the GroupListScreen. The link to the CreateGroupScreen is
 only visible if the user has the permission to create new groups.
 
+* Drop the `Owners` column from the group list screen
++
+The `Owners` column on the group list screen has been dropped in order
+to link:#performance-issue-on-showing-group-list[speed up the loading
+of the group list screen].
+
+* Drop the `Group Type` column from the group list screen
++
+Since link:#migrate-ldap-groups[the LDAP group type was removed] there
+is no need to display the group type on the group list screen anymore.
+There are only 3 `SYSTEM` groups using well known names, and everything
+else has the type `INTERNAL`.
+
 * When adding a user to a group create an account for the user if needed
 +
 Trying to add a user to a group that doesn't have an account fails with
@@ -737,6 +784,8 @@
 
 Other
 ^^^^^
+* Describe link:../Documentation/refs-notes-review.html[
+  `refs/notes/review` and its contents]
 
 * Specify output file for curl commands in documentation
 +
@@ -757,6 +806,8 @@
 Add documentation of hook config for `change-restored`, `ref-updated`
 and `cla-signed` hooks.
 
+* Document that the commit message hook file should be executable
+
 * Mention that also MySQL supports replication, not just Postgres
 
 * Make sorting of release notes consistent so that the release notes
@@ -943,6 +994,7 @@
 With this configuration Git over HTTP protocol will be authenticated using
 `HTTP-BasicAuth` and credentials checked on LDAP.
 
+[[migrate-ldap-groups]]
 * Migrate existing internal LDAP groups
 +
 Previously, LDAP groups were mirrored in the AccountGroup table and
@@ -1109,6 +1161,78 @@
 
 Performance
 ~~~~~~~~~~~
+[[performance-issue-on-showing-group-list]]
+* Fix performance issues on showing the list of groups in the Gerrit
+  WebUI
++
+Loading `Admin` > `Groups` on large servers was very slow. The entire
+group membership database was downloaded to the browser when showing
+just the list of groups.
++
+Now the amount of data that needs to be downloaded to the browser is
+reduced by using the more leightweight `AccountGroup` type instead of
+the `GroupDetail` type when showing the groups in a list format. As a
+consequence the `Owners` column that showed the name of the owner group
+had been dropped.
+
+* Add a fast path to avoid checking every commit on push
++
+If a user can forge author, committer and gerrit server identity, and
+can upload merges, don't bother checking the commit history of what is
+being uploaded. This can save time on servers that are trying to accept
+a large project import using the push permission.
+
+* Improve performance of `ReceiveCommits` by reducing `RevWalk` load
++
+JGit RevWalk does not perform well when a large number of objects are
+added to the start set by `markStart` or `markUninteresting`. Avoid
+putting existing `refs/changes/` or `refs/tags/` into the `RevWalk` and
+instead use only the `refs/heads` namespace and the name of the branch
+used in the `refs/for/` push line.
++
+Catch existing changes by looking for their exact commit SHA-1, rather
+than complete ancestory. This should have roughly the same outcome for
+anyone pushing a new commit on top of an existing open change, but
+with lower computional cost at the server.
+
+* Lookup changes in parallel during `ReceiveCommits`
++
+If the database has high query latency, the loop that locates existing
+changes on the destination branch given Change-Id can be slow. Start
+all of the queries as commits are discovered, but don't block on
+results until all queries were started.
++
+If the database can build the `ResultSet` in the background, this may
+hide some of the query latency by allowing the queries to overlap when
+more than one lookup must be performed for a push.
+
+* Perform change update on multiple threads
++
+When multiple changes need to be created or updated for a single push
+operation they are now inserted into the database by parallel threads,
+up to the maximum allowed thread count. The current thread is used
+when the thread pool is already fully in use, falling back to the
+prior behavior where each concurrent push operation can do its own
+concurrent database update. The thread pool exists to reduce latency
+so long as there are sufficient threads available.
++
+This helps push times on databases that are high latency, such as
+database servers that are running on a different machine from the
+Gerrit server itself, e.g. gerrit.googlesource.com.
++
+The new thread pool is
+link:../Documentation/config-gerrit.html#receive.changeUpdateThreads[
+disabled by default], limiting the overhead to servers that have good
+latency with their database, such as using in-process H2 database, or
+a MySQL or PostgreSQL on the same host.
+
+* Use `BatchRefUpdate` to execute reference changes
++
+Some storage backends for JGit are able to update multiple references
+in a single pass efficiently. Take advantage of this by pushing
+any normal reference updates (such as direct push or branch create)
+into a single `BatchRefUpdate` object.
+
 * Assume labels are correct in ListChanges
 +
 To reduce end-user latency when displaying changes in a search result
@@ -1284,6 +1408,14 @@
 list wasn't updated anymore when the selection for `Old Version History`
 was changed.
 
+* link:http://code.google.com/p/gerrit/issues/detail?id=1523[issue 1523]:
+  Update diff base to match old version history
++
+When changing the diff base in the `Old Version History` on the change
+screen and then entering the Side-By-Side view for a file, clicking on
+the back button in the browser (reentering the change screen) was
+causing the files to be wrongly compared with `Base` again.
+
 * Don't NPE if current patch set is not available
 +
 Broken changes may have the current patch set field incorrectly
@@ -1296,6 +1428,16 @@
 Published and draft comments that are posted on deleted files were not
 loaded and displayed.
 
+* link:https://code.google.com/p/gerrit/issues/detail?id=735[issue 735]:
+  Fix `ArrayIndexOutOfBoundsException` on navigation to next/previous
+  patch
++
+An `ArrayIndexOutOfBoundsException` could occur when navigating from
+one patch to the next/previous patch if the next/previous patch was a
+newly added binary file. The exception occurred if the user was not
+signed in or if the user was signed in and had `Syntax Coloring` in the
+preferences enabled.
+
 * Only set reviewed attribute on open changes
 +
 If a change is merged or abandoned, do not consider the reviewed
@@ -1368,6 +1510,14 @@
 
 SSH
 ~~~
+* Fix reject message if bypassing code review is not allowed
++
+If a user is not allowed to bypass code review, but tries to push a
+commit directly, Gerrit rejected this push with the error message
+"can not update the reference as a fast forward". This message was
+confusing to the user since the push only failed due to missing
+access rights. Go back to the old message that says "prohibited
+by Gerrit".
 
 * link:http://code.google.com/p/gerrit/issues/detail?id=1437[issue 1437]:
   Send event to stream when draft change is published
@@ -1506,6 +1656,8 @@
 
 * Do not automatically add author/committer as reviewer to drafts
 
+* Do not automatically add reviewers from footer lines to drafts
+
 * Fix NullPointerException in MergeOp
 +
 The body of the commit object may have been discarded earlier to
@@ -1514,6 +1666,27 @@
 * link:http://code.google.com/p/gerrit/issues/detail?id=1396[issue 1396]:
   Initialize the submodule commit message buffer
 
+* Fix file name matching in `commit_delta` to perform substring
+  matching
++
+The `commit_delta` predicate was matching the entire file name against
+the given regular expression while other predicates (`commit_edits`,
+`commit_message_matches`) performed substring matching. It was
+inconsistent that for `commit_delta` it was needed to write something
+like:
++
+----
+  commit_delta('.*\.java')
+----
++
+to match all `*.java` files, while for `commit_edits` it was:
++
+----
+  commit_edits('\.java$', '...')
+----
++
+to match the same set of (Java) files.
+
 * Create index for submodule subscriptions on site upgrade
 
 * Fix URL to Jetty XML DTDs so they can be properly validated
@@ -1522,6 +1695,31 @@
 
 * Fix possible synchronization issue in TaskThunk
 
+* Fix possible NPEs in `ReplaceRequest.cmd` usage in `ReceiveCommits`
++
+The `cmd` field is populated by `validate(boolean)`. If this method
+fails, results on some `ReplaceRequests` may not be set. Guard the
+attempt to access the field with a null check.
+
+* Match no labels if current patch set is not available
++
+If the current patch set cannot be loaded from `ChangeData`, assume no
+label information. This works around an NullPointerException inside of
+`ChangeControl` where the `PatchSet` is otherwise required.
+
+* Create new patch set references before database records
++
+Ensure the commit used by a new change or replacement patch set
+always exists in the Git repository by writing the reference first
+as part of the overall `BatchRefUpdate`, then inserting the database
+records if all of the references stored successfully.
+
+* Fix rebase patch set and revert change to update Git first
++
+Update the Git reference before writing to the database. This way the
+repository cannot be corrupted if the server goes down between the two
+actions.
+
 * Make sure we use only one type of NoteMerger for review notes creation
 
 * Fix generation of owner group in GroupDetail