Complete Gerrit 2.5 release notes
Added sections for Documentation, Dev, Mail, Miscellaneous, Performance, Upgrades and Bug-Fixes. Change-Id: Ia311a475061536e01d4174494f0a2eacdece3d30 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
parent
a2803537d6
commit
745684dd73
@ -70,6 +70,7 @@ Duplicate the existing `pgm_daemon` launch configuration:
|
||||
* Change Save as to be Local file.
|
||||
|
||||
|
||||
[[hosted-mode]]
|
||||
Running Hosted Mode
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -100,6 +101,7 @@ Duplicate the existing `gwtui_dbg` launch configuration:
|
||||
* Change Save as to be Local file.
|
||||
|
||||
|
||||
[[known-problems]]
|
||||
Known problems
|
||||
--------------
|
||||
|
||||
|
@ -535,6 +535,17 @@ The user's draft comments are now available under `My` >
|
||||
* Show NotFoundScreen if a user that can't create projects tries to
|
||||
access the ProjectCreationScreen
|
||||
|
||||
* Add Edit, Reload next to non-editable Full Name field
|
||||
+
|
||||
If the user database is actually an external system users might need go
|
||||
to another server to edit their account data, and then re-import their
|
||||
account data by going through a login cycle. This is highly similiar to
|
||||
LDAP where the directory provides account data and its refreshed every
|
||||
time the user visits the `/login/` URL handler.
|
||||
+
|
||||
The URL for the external system can be configured for the
|
||||
link:#custom-extension[`CUSTOM_EXTENSION`] auth type.
|
||||
|
||||
Access Rights
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
@ -554,6 +565,7 @@ Restoring a change is similar to uploading a new change. If a branch
|
||||
gets closed by removing the access rights to upload new changes it
|
||||
shouldn't be possible to restore changes for this branch.
|
||||
|
||||
[[hide-config]]
|
||||
* Make read access to `refs/meta/config` by default exclusive to
|
||||
project owners
|
||||
+
|
||||
@ -624,3 +636,895 @@ e.g. '.. gerrit create-project -b master -b foo -b bar ...'
|
||||
The verbose mode enabled by the new option makes the ls-groups
|
||||
command output a tab-separated table containing all available
|
||||
information about each group (though not its members).
|
||||
|
||||
Documentation
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Commands
|
||||
^^^^^^^^
|
||||
|
||||
* document for the link:../documentation/cmd-create-group.html[`create-group`]
|
||||
command that for unknown users an account is automatically created if
|
||||
the LDAP authentication succeeds
|
||||
|
||||
* Update documentation and help text for the
|
||||
link:../documentation/cmd-review.html[`review`] SSH command
|
||||
+
|
||||
The review command can be applied to multiple changes, but the
|
||||
help text was written in singular tense.
|
||||
+
|
||||
Add a paragraph in the documentation explaining that the
|
||||
`--force-message` option will not be effective if the `review` command
|
||||
fails because the user is not permitted to change the label.
|
||||
|
||||
* Clarify that `init --batch` doesn't drop old database objects
|
||||
|
||||
* Update the list of unsupported slave commands
|
||||
|
||||
* Fix link:../Documentation/cmd-stream-events.html[`stream-events`]
|
||||
documentation
|
||||
+
|
||||
Some attributes contained in the events were not described, for a few
|
||||
others the name was given in a wrong case.
|
||||
|
||||
* Fix and complete synopsis of commands
|
||||
|
||||
Access Control
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
* Clarify the ref format for
|
||||
link:../Documentation/access-control.html#category_push_merge[`Push
|
||||
Merge Commit`]
|
||||
+
|
||||
Elaborate on the required format of the ref used for `Push Merge Commit`
|
||||
access right entries to avoid user confusion when granting access to
|
||||
`refs/heads/*` still doesn't allow them to push any merge commits.
|
||||
|
||||
* Document the
|
||||
link:../Documentation/access-control.html#capability_emailReviewers[
|
||||
`emailReviewers`] capability
|
||||
|
||||
Error
|
||||
^^^^^
|
||||
* Improve documentation of link:../Documentation/error-change-closed.html[
|
||||
`change closed` error]
|
||||
+
|
||||
The `change closed` error can also occur when trying to submit a
|
||||
review label with the SSH review command onto a change that has
|
||||
been closed (submitted and merged, or abandoned) or onto a patchset
|
||||
that has been replaced by a newer patchset.
|
||||
|
||||
* Correct documentation of `invalid author` and `invalid committer`
|
||||
errors
|
||||
+
|
||||
The error messages `you are not committer ...` and `you are not
|
||||
author ...` were replaced with `invalid author` and `invalid
|
||||
committer`.
|
||||
|
||||
Dev
|
||||
^^^
|
||||
|
||||
* Update push URL in link:../SUBMITTING_PATCHES[SUBMITTING_PATCHES]
|
||||
+
|
||||
Pushes are now accepted at the same address as clone/fetch/pull.
|
||||
|
||||
* Update link:../Documentation/dev-contributing.html[contributor
|
||||
document]
|
||||
+
|
||||
We now prefer to use Guava (previously known as Google Collections).
|
||||
|
||||
* Fixed broken link to source code
|
||||
+
|
||||
Updated the documentation source code links to point to:
|
||||
http://code.google.com/p/gerrit/source/checkout
|
||||
|
||||
* State link:../Documentation/dev-eclipse.html#known-problems[known issues]
|
||||
when debugging Gerrit with Eclipse
|
||||
|
||||
* Improved the section on
|
||||
link:../Documentation/dev-eclipse.html#hosted-mode[hosted mode
|
||||
debugging]
|
||||
+
|
||||
The existing section on hosted mode debugging left out a couple of
|
||||
steps, and the requirement to use `DEVELOPMENT_BECOME_ANY_ACCOUNT`
|
||||
instead of `OpenID` was not mentioned anywhere.
|
||||
|
||||
* Add a link:../Documentation/dev-release.html[release preparation
|
||||
document]
|
||||
+
|
||||
Document what it takes to make a Gerrit stable or stable-fix release,
|
||||
and how to release Gerrit subprojects.
|
||||
|
||||
Other
|
||||
^^^^^
|
||||
|
||||
* Specify output file for curl commands in documentation
|
||||
+
|
||||
For downloading the `commit-msg` hook and the `gerrit-cherry-pick`
|
||||
script users can either use scp or curl. Specify the output file for
|
||||
each curl command so that the result is equal to the matching scp
|
||||
command.
|
||||
|
||||
* Document that user must be in repository root to install `commit-msg`
|
||||
hook
|
||||
|
||||
* Add some clarifications to the
|
||||
link:../Documentation/install-quick.html[quick installation guide]
|
||||
|
||||
* Add missing documentation about
|
||||
link:../Documentation/config-gerrit.html#hooks[hook configuration]
|
||||
+
|
||||
Add documentation of hook config for `change-restored`, `ref-updated`
|
||||
and `cla-signed` hooks.
|
||||
|
||||
* Mention that also MySQL supports replication, not just Postgres
|
||||
|
||||
* Make sorting of release notes consistent so that the release notes
|
||||
for the newest release is always on top
|
||||
|
||||
* Various corrections
|
||||
+
|
||||
Correct typos, spelling mistakes, and grammatical errors.
|
||||
|
||||
Dev
|
||||
~~~
|
||||
* Add link:../Documentation/dev-release.html#plugin-api[script for
|
||||
releasing plugin API jars]
|
||||
|
||||
* Pushes are now accepted at the same address as clone/fetch/pull
|
||||
+
|
||||
To submit patches commits can be pushed to
|
||||
https://gerrit.googlesource.com/gerrit
|
||||
|
||||
* Add `-Pchrome`, `-Pwebkit`, `-Pfirefox` aliases for building
|
||||
+
|
||||
This makes it easier to build for the browser you want to
|
||||
test on, rather than remembering what its GWT name is.
|
||||
|
||||
* Disable assertions for KeyCommandSet when running in gwtdebug mode
|
||||
+
|
||||
The assertions in the KeyCommandSet class cause exceptions when a
|
||||
KeyCommand is registered several times.
|
||||
|
||||
* Add the run profiles to the favorites menu
|
||||
|
||||
* Add Intellij IDEA files to ignore list
|
||||
|
||||
* Move local Maven repository to Google Cloud Storage
|
||||
|
||||
* Make sure asciidoc uses unix line endings in generated HTML.
|
||||
+
|
||||
Use an explicit asciidoc attribute to make sure the produced HTML will
|
||||
always contain unix line endings. This will help in producing build
|
||||
results that are better comparable by size.
|
||||
|
||||
* Remove timestamp from all `org.eclipse.core.resources.prefs` files
|
||||
+
|
||||
Eclipse overwrites these files when we import projects using m2e.
|
||||
Eclipse 3 writes a timestamp at the top of these files making the Git
|
||||
working tree dirty. Eclipse 4 (Juno) still overwrites these files but
|
||||
doesn't write the timestamp. This should help to keep the working tree
|
||||
clean. However, since the timestamp is currently present in these
|
||||
files, Eclispe 4 would still make them dirty by overwriting and
|
||||
effectively removing the timestamp.
|
||||
+
|
||||
This change removes the timestamp from these files. This helps those
|
||||
using Eclipse 4 and doesn't make it worse for those still using Eclispe
|
||||
3.
|
||||
|
||||
* Add Maven profile to skip build of plugin modules
|
||||
+
|
||||
Building the plugin modules ('Plugin API' and 'Plugin Archetype') may
|
||||
take a significant amount of time (since many jars are downloaded).
|
||||
During development it is not needed to build the plugin modules. A new
|
||||
Maven profile was added that skips the build of the plugin modules,
|
||||
so that developers have a faster turnaround. This profile is called
|
||||
`no-plugins` and it's active by default. To include the plugin modules
|
||||
into the build activate the `all` profile:
|
||||
+
|
||||
----
|
||||
mvn clean package -P all
|
||||
----
|
||||
+
|
||||
The script to make release builds has been adapted to activate the
|
||||
`all` profile so that the plugin modules are always built for release
|
||||
builds.
|
||||
|
||||
Mail
|
||||
~~~~
|
||||
|
||||
* Add unified diff to newchange mail template
|
||||
+
|
||||
Add `$email.UnifiedDiff` as new macro to the `NewChange.vm` mail
|
||||
template. This macro is expanded to a unified diff of the patch.
|
||||
|
||||
* link:../Documentation/config-gerrit.html#sendemail.includeDiff[
|
||||
sendemail.includeDiff]: Enable `$email.UnifiedDiff` in `NewChange.vm`
|
||||
+
|
||||
Instead of making site administrators hack the email template, allow
|
||||
admins to enable the diff feature by setting a configuration variable
|
||||
in `gerrit.config`.
|
||||
|
||||
* link:../Documentation/config-gerrit.html#sendemail.maximumDiffSize[
|
||||
sendemail.maximumDiffSize]: Limit the size of diffs sent by email
|
||||
+
|
||||
If a unified diff included in an email will exceed the limit configured
|
||||
by the system administrator, only the affected file paths are listed in
|
||||
the email instead. This gives interested parties some context on the
|
||||
size and scope of the change, without killing their inbox.
|
||||
|
||||
* Catch all exceptions when emailing change update
|
||||
|
||||
* Allow unique from address generation
|
||||
+
|
||||
Allow the from email address to be a ParameterizedString that handles
|
||||
the `${userHash}` variable. The value of the variable is the md5 hash
|
||||
of the user name. This allows unique generation of email addresses, so
|
||||
GMAIL threads names of users in conversations correctly. For example,
|
||||
the from pattern for gerrit-review defined in the Gerrit configuration
|
||||
looks like this:
|
||||
+
|
||||
----
|
||||
[sendemail]
|
||||
from = ${user} <noreply-gerritcodereview+${userHash}@google.com>
|
||||
----
|
||||
|
||||
* Show new change URLs in the body of the new change email
|
||||
+
|
||||
Some email clients hide the signature section of an email
|
||||
automatically. If there are no reviewers listed on a new change,
|
||||
such as when a change is pushed over HTTP and a notification is
|
||||
automatically sent out to any subscribed watchers, the URL was
|
||||
hidden inside of the signature and not readily available.
|
||||
+
|
||||
Show the URL right away in the body.
|
||||
|
||||
Miscellaneous
|
||||
~~~~~~~~~~~~~
|
||||
* Back in-memory caches with Guava, disk caches with H2
|
||||
+
|
||||
Instead of using Ehcache for in-memory caches, use Guava. The Guava
|
||||
cache code has been more completely tested by Google in high load
|
||||
production environments, and it tends to have fewer bugs. It enables
|
||||
caches to be built at any time, rather than only at server startup.
|
||||
+
|
||||
By creating a Guava cache as soon as it is declared, rather than
|
||||
during the LifecycleListener.start() for the CachePool, we can promise
|
||||
any downstream consumer of the cache that the cache is ready to
|
||||
execute requests the moment it is supplied by Guice. This fixes a
|
||||
startup ordering problem in the GroupCache and the ProjectCache, where
|
||||
code wants to use one of these caches during startup to resolve a
|
||||
group or project by name.
|
||||
+
|
||||
Tracking the Gauva backend caches with a DynamicMap makes it possible
|
||||
for plugins to define their own in-memory caches using CacheModule's
|
||||
cache() function to declare the cache. It allows the core server to
|
||||
make the cache available to administrators over SSH with the gerrit
|
||||
show-caches and gerrit `flush-caches` commands.
|
||||
+
|
||||
Persistent caches store in a private H2 database per cache, with a
|
||||
simple one-table schema that stores each entry in a table row as a
|
||||
pair of serialized objects (key and value). Database reads are gated
|
||||
by a BloomFilter, to reduce the number of calls made to H2 during
|
||||
cache misses. In theory less than 3% of cache misses will reach H2 and
|
||||
find nothing. Stores happen on a background thread quickly after the
|
||||
put is made to the cache, reducing the risk that a diff or web_session
|
||||
record is lost during an ungraceful shutdown.
|
||||
+
|
||||
Cache databases are capped around 128M worth of stored data by running
|
||||
a prune cycle each day at 1 AM local server time. Records are removed
|
||||
from the database by ordering on the last access time, where last
|
||||
accessed is the last time the record was moved from disk to memory.
|
||||
|
||||
* Add OpenID SSO support.
|
||||
+
|
||||
Setting `OPENID_SSO` for
|
||||
link:../Documentation/config-gerrit.html#auth.type[`auth.type`] in the
|
||||
`gerrit.config` will allow the admin to specify an SSO entry point URL
|
||||
so that users clicking on "Sign In" are sent directly to that URL.
|
||||
|
||||
* Git over HTTP BasicAuth against Gerrit basic auth.
|
||||
+
|
||||
Allows the configuration of native Gerrit username/password
|
||||
authentication scheme used for Git over HTTP BasicAuth, as alternative
|
||||
of the default DigestAuth scheme against the random generated password
|
||||
on Gerrit DB.
|
||||
+
|
||||
Example setting for link:../Documentation/config-gerrit.html#auth.type[
|
||||
`auth.type`] and link:../Documentation/config-gerrit.html#auth.gitBasicAuth[
|
||||
`auth.gitBasicAuth`]:
|
||||
+
|
||||
----
|
||||
[auth]
|
||||
type = LDAP
|
||||
gitBasicAuth = true
|
||||
----
|
||||
+
|
||||
With this configuration Git over HTTP protocol will be authenticated using
|
||||
`HTTP-BasicAuth` and credentials checked on LDAP.
|
||||
|
||||
* Migrate existing internal LDAP groups
|
||||
+
|
||||
Previously, LDAP groups were mirrored in the AccountGroup table and
|
||||
given an Id and UUID the same as internal groups. Update these groups
|
||||
to be backed by only a GroupReference, with a special "ldap:" UUID
|
||||
prefix. Migrate all existing references to the UUID in ownerGroupUUID
|
||||
and any `project.config`.
|
||||
+
|
||||
This made the LDAP group type obsolete and it was removed.
|
||||
|
||||
* Abstract group systems into GroupBackend interface
|
||||
|
||||
* Add more link:../Documentation/config-gerrit.html#theme[theme color
|
||||
options]
|
||||
+
|
||||
** Add a theme option to change outdated background color
|
||||
** Add odd/even row background color for tables such as list of open
|
||||
reviews. This makes them more visible without clicking on them.
|
||||
|
||||
* link:../Documentation/user-notify.html[Add `notify` section in
|
||||
`project.config`]
|
||||
+
|
||||
The notify section allows project owners to include emails to users
|
||||
directly from `project.config`. This removes the need to create fake
|
||||
user accounts to always BCC a group mailing list.
|
||||
|
||||
* Include the contributor agreements in the `project.config` and
|
||||
migrate contributor agreements to `All-Projects`
|
||||
+
|
||||
Update the parsing of `project.config` to support the contributor
|
||||
agreements.
|
||||
+
|
||||
Add a new schema to move the ContributorAgreement, AccountAgreement,
|
||||
and AccountGroupAgreement information into the `All-Projects`
|
||||
`project.config`.
|
||||
|
||||
* Add `sameGroupVisibility` to `All-Projects` `project.config`
|
||||
+
|
||||
The `sameGroupVisiblity` is needed to restrict the visibility of
|
||||
accounts when `accountVisibility` is `SAME_GROUP`. Namely, this is a
|
||||
way to make sure the `autoVerify` group in a `contributor-agreements`
|
||||
section is never suggested.
|
||||
|
||||
* Log sign in failures on info level
|
||||
+
|
||||
If for a user signing in into the Gerrit web UI fails, this can have
|
||||
many reasons, e.g. username is wrong, password is wrong, user is marked
|
||||
as inactive, user is locked in the user backend etc. In all cases the
|
||||
user just gets a generic error message 'Incorrect username or
|
||||
password.'. Gerrit administrators had trouble to find the exact reason
|
||||
for the sign in problem because the corresponding AccountException was
|
||||
not logged.
|
||||
|
||||
* Do not log 'Object too large' as error with full stacktrace
|
||||
+
|
||||
If a user pushes an object which is larger than the configured
|
||||
`receive.maxObjectSizeLimit` parameter, the push is rejected with an
|
||||
'Object too large' error. In addition an error log entry with the full
|
||||
stacktrace was written into the error log.
|
||||
+
|
||||
This is not really a server error, but just a user doing something that
|
||||
is not allowed, and thus it should not be logged as error. For a Gerrit
|
||||
administrator it might still be interesting how often the limit is hit.
|
||||
This is why it makes sense to still log this on info level.
|
||||
+
|
||||
For the user pushing a too large object we now do not print the
|
||||
'fatal: Unpack error, check server log' message anymore, but only the
|
||||
'Object too large' error message.
|
||||
|
||||
* Add better explanations to rejection messages
|
||||
+
|
||||
Provide information to the user why a certain push was rejected.
|
||||
|
||||
* Automatic schema upgrade on Gerrit startup
|
||||
+
|
||||
In case when Gerrit administrator(s) don't have a direct access to the
|
||||
file system where the review site is located it gets difficult to
|
||||
perform a schema upgrade (run the init program). For such cases it is
|
||||
convenient if Gerrit performs schema upgrade automatically on its
|
||||
startup.
|
||||
+
|
||||
Since this is a potentially dangerous operation, by default it will not
|
||||
be performed. The configuration parameter
|
||||
link:../Documentation/config-gerrit.html#site.upgradeSchemaOnStartup[
|
||||
site.upgradeSchemaOnStartup] is used to switch on automatic schema
|
||||
upgrade.
|
||||
|
||||
* Shorten column names that are longer than 30 characters
|
||||
+
|
||||
Some databases can't deal with column names that are longer than 30
|
||||
characters. Examples are MaxDB and
|
||||
link:http://groups.google.com/group/repo-discuss/browse_thread/thread/ecb713d42c04ae8a/cc963525d8247a17?lnk=gst#cc963525d8247a17[Oracle].
|
||||
+
|
||||
Gerrit had two column names in the `accounts` table that exceeded the
|
||||
30 characters: `displayPatchSetsInReverseOrder`,
|
||||
`displayPersonNameInReviewCategory`
|
||||
+
|
||||
These 2 columns were renamed so that their names fit within the 30
|
||||
character range.
|
||||
|
||||
* Increase the maximum length for tracking ID's to 32 characters
|
||||
+
|
||||
So far tracking ID's had a maximum length of only 20 characters.
|
||||
|
||||
* Set `GERRIT_SITE` in Gerrit hooks as environment variable
|
||||
+
|
||||
Allows development of hooks parametrised on Gerrit location. This can
|
||||
be useful to allow hooks to load the Gerrit configuration when needed
|
||||
(from `$GERRIT_SITE`) or even store their additional config files under
|
||||
`$GERRIT_SITE/etc` and retrieve them at startup.
|
||||
|
||||
* Add an exponentially rolling garbage collection script
|
||||
+
|
||||
`git-exproll.sh` is a git garbage collection script aimed specifically
|
||||
at reducing exccessive garbage collection and particularly large
|
||||
packfile churn for Gerrit installations.
|
||||
+
|
||||
Excessive garbage collection on "dormant" repos is wasteful of both CPU
|
||||
and disk IO. Large packfile churn can lead to heavy RAM and FS usage
|
||||
on Gerrit servers when the Gerrit process continues to hold open the
|
||||
old delete packfiles. This situation is most detrimental when jgit is
|
||||
configured with large caching parameters. Aside from these downsides,
|
||||
running git gc often can be very beneficial to performance on servers.
|
||||
This script attempts to implement a git gc policy which avoids the
|
||||
downsides mentioned above so that git gc can be comfortably run very
|
||||
regularly.
|
||||
+
|
||||
`git-exproll.sh` uses keep files to manage which files will get
|
||||
repacked. It also uses timestamps on the repos to detect dormant repos
|
||||
to avoid repacking them at all. The primary packfile objective is to
|
||||
keep around a series of packfiles with sizes spaced out exponentially
|
||||
from each other, and to roll smaller packfiles into larger ones once
|
||||
the smaller ones have grown. This strategy attempts to balance disk
|
||||
space usage with avoiding rewriting large packfiles most of the time.
|
||||
+
|
||||
The exponential packing objective above does not save a large amount of
|
||||
time or CPU, but it does prevent the packfile churn. Depending on repo
|
||||
usage, however the dormant repo detection and avoidance can result in a
|
||||
very large time savings.
|
||||
|
||||
* Unpack JARs for running servers in `$site_path/tmp`
|
||||
+
|
||||
Instead of unpacking a running server into `~/.gerritcodereview/tmp`
|
||||
only use that location for commands like init where there is no active
|
||||
site. From gerrit.sh always use `$site_path/tmp` for the JARs to
|
||||
isolate servers that run on the same host under the same UNIX user
|
||||
account.
|
||||
|
||||
[[custom-extension]]
|
||||
* Allow for the `CUSTOM_EXTENSION` `auth.type` to configure URLs for
|
||||
editing the user name and obtaining an HTTP password
|
||||
+
|
||||
Allow `CUSTOM_EXTENSION` auth type to supply by `auth.editFullNameUrl`
|
||||
a URL in the web UI that links users to the other account system,
|
||||
where they can edit their name, and then use another reload URL to
|
||||
cycle through the `/login/` step and refresh the data cached by Gerrit.
|
||||
+
|
||||
Allow `CUSTOM_EXTENSION` auth type to supply by `auth.httpPasswordUrl`
|
||||
a URL in the web UI that allows users to obtain an HTTP password.
|
||||
+
|
||||
Like the rest of the `CUSTOM_EXTENSION` stuff, this is hack that will
|
||||
eventually go away when there is proper support for authentication
|
||||
plugins.
|
||||
|
||||
Performance
|
||||
~~~~~~~~~~~
|
||||
* Assume labels are correct in ListChanges
|
||||
+
|
||||
To reduce end-user latency when displaying changes in a search result
|
||||
or user dashboard, assume the labels are accurate in the database at
|
||||
display time and don't recompute the access privileges of a reviewer.
|
||||
|
||||
* Notify the cache that the git_tags was modified
|
||||
+
|
||||
The tag cache was updated in-place, which prevented the H2 based
|
||||
storage from writing out the updated tag information. This meant
|
||||
servers almost never had the right data stored on disk and had to
|
||||
recompute it at startup.
|
||||
+
|
||||
Anytime the value is now modified in place, put it back into the
|
||||
cache so it can be saved for use on the next startup.
|
||||
|
||||
* Special case hiding `refs/meta/config` from Git clients
|
||||
+
|
||||
VisibleRefFilter requires a lot of server CPU to accurately provide
|
||||
the correct listing to clients when they cannot read `refs/*`.
|
||||
+
|
||||
Since the default configuration is now to link:#hide-config[
|
||||
hide `refs/meta/config`], use a special case in VisibleRefFilter that
|
||||
permits showing every reference except `refs/meta/config` if a user can
|
||||
read every other reference in the repository.
|
||||
|
||||
* Avoid second remote call to lookup approvals when loading change
|
||||
results
|
||||
+
|
||||
By using the new link:../Documentation/rest-api.html#changes[`/changes/`]
|
||||
REST endpoint the web UI client now obtains the label information
|
||||
during the query and avoids a second round trip to lookup the current
|
||||
approvals for each displayed change. For most users this should improve
|
||||
the way the page renders. The verified and code review columns will be
|
||||
populated before the table is made visible, preventing the layout from
|
||||
"jumping" the way the old UI did when the 2nd RPC finally finished and
|
||||
supplied the label data.
|
||||
|
||||
* Load patch set approvals in parallel
|
||||
+
|
||||
ResultSet is a future-like interface, the database system is free to
|
||||
execute each result set asynchronously in the background if it
|
||||
supports that. gwtorm's default SQL backend always runs queries
|
||||
immediately and then returns a ListResultSet, so for most installs this
|
||||
has no real impact in ordering.
|
||||
+
|
||||
For the system that runs gerrit-review, each query has a high cost in
|
||||
network latency, the system treats ResultSet as a future promise to
|
||||
supply the matching rows. Getting all of the necessary ResultSets up
|
||||
front allows the database to send all requests to the backend as early
|
||||
as possible, allowing the network latency to overlap.
|
||||
|
||||
Upgrades
|
||||
--------
|
||||
* Update Gson to 2.1
|
||||
* Update GWT to 2.4.0
|
||||
* Update JGit to 2.0.0.201206130900-r.23-gb3dbf19
|
||||
|
||||
* Use gwtexpui 1.2.6
|
||||
+
|
||||
** Hide superfluous status text from clippy flash widget
|
||||
** Fix diappearance of text in CopyableLabel when clicking on it
|
||||
|
||||
* Update Guava to 12.0.1
|
||||
+
|
||||
This fixes a performance problem with LoadingCache where the cache's
|
||||
inner table did not dynamically resize to handle a larger number
|
||||
of cached items, causing O(N) lookup performance for most objects.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
Security
|
||||
~~~~~~~~
|
||||
* Ensure that only administrators can change the global capabilities
|
||||
+
|
||||
Only Gerrit server administrators (members of the groups that have
|
||||
the `administrateServer` capability) should be able to edit the
|
||||
global capabilities because being able to edit the global capabilities
|
||||
means being able to assign the `administrateServer` capability.
|
||||
+
|
||||
Because of this on the `All-Projects` project it is disallowed to assign
|
||||
+
|
||||
. the `owner` access rights on `refs/*`
|
||||
+
|
||||
Project owners (members of groups to which the `owner` access right
|
||||
is assigned) are able to edit the access control list of the projects
|
||||
they own. Hence being owner of the `All-Projects` project would allow
|
||||
to edit the global capabilities and assign the `administrateServer`
|
||||
capabilitiy without being Gerrit administrator.
|
||||
+
|
||||
In earlier Gerrit versions (2.1.x) it was already implemented like
|
||||
this but the corresponding checks got lost.
|
||||
+
|
||||
. the 'push' access right on `refs/meta/config`
|
||||
+
|
||||
Being able to push configuration changes to the `All-Projects` project
|
||||
allows to edit the global capabilities and hence a user with this
|
||||
access right could assign the `administrateServer` capability without
|
||||
being Gerrit administrator.
|
||||
+
|
||||
From the Gerrit WebUI (ProjectAccessScreen) it is not possible anymore
|
||||
to assign on the `All-Projects` project the `owner` access right on
|
||||
`refs/*` and the `push` access right on `refs/meta/config`.
|
||||
+
|
||||
In addition it is ensured that an `owner` access right that is assigned
|
||||
for `refs/*` on the `All-Projects` project has no effect and that only
|
||||
Gerrit administrators with the `push` access right can push
|
||||
configuration changes to the `All-Projects` project.
|
||||
+
|
||||
It is still possible to assign both access rights (`owner` on `refs/*`
|
||||
and `push` on `refs/meta/config`) on the `All-Projects` project by directly
|
||||
editing its `project.config` file and pushing to `refs/meta/config`.
|
||||
To fix this it would be needed to reject assigning these access rights
|
||||
on the `All-Projects` project as invalid configuration, however doing this
|
||||
would mean to break existing configurations of the `All-Projects` project
|
||||
that assign these access rights. At the moment there is no migration
|
||||
framework in place that would allow to migrate `project.config` files.
|
||||
Hence this check is currently not done and these access rights in this
|
||||
case have simply no effect.
|
||||
|
||||
Web
|
||||
~~~
|
||||
|
||||
* Do not show "Session cookie not available" on sign in
|
||||
+
|
||||
When LDAP is used for authentication, clicking on the 'Sign In' link
|
||||
opens a user/password dialog. In this dialog the "Session cookie not
|
||||
available." message was always shown as warning. This warning was
|
||||
pretty useless since the user was about to sign in because he had no
|
||||
current session.
|
||||
+
|
||||
This problem was discussed on the
|
||||
link:https://groups.google.com/forum/#!topic/repo-discuss/j-t77m8-7I0/discussion[
|
||||
Gerrit mailing list].
|
||||
|
||||
* Reject restoring a change if its destination branch does not exist
|
||||
anymore
|
||||
|
||||
* Reject submitting a change if its destination branch does not exist
|
||||
anymore
|
||||
+
|
||||
If a branch got deleted and there was an open change for this branch,
|
||||
it was still possible to submit this open change. As result the
|
||||
destination branch was implicitly recreated, even if the user
|
||||
submitting the change had no privileges to create branches.
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1352[issue 1352]:
|
||||
Don't display "Download" link for `/COMMIT_MSG`
|
||||
+
|
||||
The commit message file is special, it doesn't actually exist and
|
||||
cannot be downloaded. Don't offer the download link in the side by
|
||||
side viewer.
|
||||
|
||||
* Dependencies were lost in the ChangeScreen's "Needed By" table
|
||||
+
|
||||
Older patchsets are now iterated for decendents, so that the dependency
|
||||
chain does not break on new upstream patchsets.
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1442[issue 1442]:
|
||||
Only show draft change dependency if current user is owner or reviewer
|
||||
+
|
||||
In the change screen, the dependencies panel was showing draft changes
|
||||
in the "Depends On" and "Needed By" lists for all users, and when there
|
||||
was no user logged in.
|
||||
|
||||
* Fix disappearance of action buttons when selecting the last patch set
|
||||
as `Old Version History`
|
||||
|
||||
* Fix updating patch list when `Old Version History` is changed
|
||||
+
|
||||
If a collapsed patch set panel was expanded and re-closed it's patch
|
||||
list wasn't updated anymore when the selection for `Old Version History`
|
||||
was changed.
|
||||
|
||||
* Don't NPE if current patch set is not available
|
||||
+
|
||||
Broken changes may have the current patch set field incorrectly
|
||||
specified, causing currentPatchSet to be unable to locate the
|
||||
correct data and return it. When this happens don't NPE, just
|
||||
claim the change is not reviewed.
|
||||
|
||||
* Fix displaying of comments on deleted files
|
||||
+
|
||||
Published and draft comments that are posted on deleted files were not
|
||||
loaded and displayed.
|
||||
|
||||
* Only set reviewed attribute on open changes
|
||||
+
|
||||
If a change is merged or abandoned, do not consider the reviewed
|
||||
property for the calling user, so that the change is not highlighted
|
||||
as unreviewed on the user's dashboard.
|
||||
|
||||
* Change PatchTable pointer when loading patch
|
||||
+
|
||||
This patch fixes an issue with the "file list" table displayed by
|
||||
clicking on the "Files" sub-menu when viewing a diff.
|
||||
+
|
||||
Originally when navigating between patch screens the highlighted row
|
||||
(pointer) of the file list table would not change when not directly
|
||||
interacting with the table e.g. by clicking on the previous or next
|
||||
file link.
|
||||
+
|
||||
This patch updates the file list table whenever a new patch screen is loaded
|
||||
so that the pointer corresponds to the current patch being displayed.
|
||||
|
||||
* Don't hyperlink non-internal groups
|
||||
+
|
||||
When an external group (such as LDAP) is used in a permission rule,
|
||||
don't attempt to link to the group in the internal account system UI.
|
||||
The group won't load successfully. Instead just display the name and
|
||||
put the UUID into a tooltip to show the full DN.
|
||||
|
||||
* Fix: Popup jumps back to original position when resizing screen
|
||||
+
|
||||
On 'Watched Projects' screen, the 'Browse' button displays a popup
|
||||
window. If the user moves it and then resizes the screen, it won't snap
|
||||
back to the original position.
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1457[issue 1457]:
|
||||
Prevent groups from being renamed to empty string
|
||||
|
||||
* Fixed AccountGroupInfoScreen search callback
|
||||
+
|
||||
If the search returned no results, the search button would not be
|
||||
enabled and the status panel was not shown. Fixed the panel and button
|
||||
to always be enabled.
|
||||
|
||||
* Fix NullPointerException on `/p/`
|
||||
+
|
||||
Requesting just `/p/` caused a NullPointerException as the redirection
|
||||
logic had no project name to form a URL from. Detect requests for `/p/`
|
||||
and redirect to 'Admin' > 'Projects' to show the projects the caller
|
||||
has access to.
|
||||
|
||||
Mail
|
||||
~~~~
|
||||
|
||||
* Fix: Rebase did not mail all reviewers
|
||||
|
||||
* Fix email showing in AccountLink instead of names
|
||||
+
|
||||
Prefer the full name for the display text of the link.
|
||||
|
||||
* Fix signature delimiter for e-mail messages
|
||||
+
|
||||
Make sure the signature delimiter is "-- " (two dashes and a space).
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1397[issue 1397]:
|
||||
Don't wait for banner message from SMTP server after STARTTLS
|
||||
negotiation
|
||||
+
|
||||
According to RFC 2847 section 5.2, SMTP server won't send the banner
|
||||
message again after STARTTLS negotiation. The original code will hang
|
||||
until SMTP server kicks it off due to timeout and can't send email with
|
||||
STARTTLS enabled, aka. `sendemail.smtpEncryption = tls`.
|
||||
|
||||
SSH
|
||||
~~~
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1437[issue 1437]:
|
||||
Send event to stream when draft change is published
|
||||
+
|
||||
When a change is uploaded as a draft, a `patchset-created` event is
|
||||
sent to the event stream, but since drafts are private to the owner,
|
||||
the event is not publicly visible. When the draft is later published,
|
||||
no publicly visible event was sent. As result of this external tools
|
||||
that rely on the event stream to detect new changes didn't receive
|
||||
events for any changes that were first uploaded as draft.
|
||||
+
|
||||
There is now a new event, `draft-published`, which is sent to the
|
||||
event stream when a draft change is published. The content of this
|
||||
event is the same as `patchset-created`.
|
||||
|
||||
* Fix: Wrong ps/rev in `change-merged` stream-event
|
||||
+
|
||||
When using cherry-pick as merge strategy, the wrong ref was set in the
|
||||
`change-merged` stream-event.
|
||||
+
|
||||
The issue stems from Gerrit would not acknowledge the resulting new
|
||||
pachset (the actual cherry-pick).
|
||||
|
||||
* Fix the `export-review-notes` command's Guice bindings
|
||||
+
|
||||
The `export-review-notes` command was broken becasue of the CachePool
|
||||
class being bound twice. The startup of the command failed because of
|
||||
that.
|
||||
|
||||
* Fix sorting of SSH help text
|
||||
+
|
||||
Commands were displaying in random order, sort commands before output.
|
||||
|
||||
* `replicate` command: Do not log errors for wrong user input
|
||||
+
|
||||
If the user provided an invalid combination of command options or an
|
||||
non existing project name this was logged in the `error.log` but
|
||||
printing the error out to the user is sufficient.
|
||||
|
||||
Authentication
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
* Fix NPE in LdapRealm caused by non-LDAP users
|
||||
+
|
||||
Servers that are connected to LDAP but have non-LDAP user accounts
|
||||
created by `gerrit create-account` (e.g. batch role accounts for
|
||||
build systems) were crashing with a NullPointerException when the
|
||||
LdapRealm tried to discover which LDAP groups the non-LDAP user
|
||||
was a member of in the directory.
|
||||
|
||||
* Fix domain field of HTTP digest authentication
|
||||
+
|
||||
Per RFC 2617 the domain field is optional. If it is not present,
|
||||
the digest token is valid on any URL on the server. When set it
|
||||
must be a path prefix describing the URLs that the password would
|
||||
be valid against.
|
||||
+
|
||||
When a canonical URL is known, supply that as the only domain that
|
||||
is valid. When the URL is missing (e.g. because the provider is
|
||||
still broken) rely on the context path of the application instead.
|
||||
|
||||
Replication
|
||||
~~~~~~~~~~~
|
||||
|
||||
* Fix inconsistent behaviour when replicating `refs/meta/config`
|
||||
+
|
||||
In `replication.config`, if `authGroup` is set to be used together with
|
||||
`mirror = true`, refs blocked through the `authGroup` are deleted from
|
||||
the slave/mirror. The same correctly applies if the `authGroup` is used
|
||||
to block `refs/meta/config`.
|
||||
+
|
||||
However, if `replicatePermission` was set to `false`, Gerrit was
|
||||
refusing to clean up `refs/meta/config` on the slave/mirror.
|
||||
|
||||
* Fix bug with member assignment order in PushReplication.
|
||||
+
|
||||
The groupCache was being used before it was set in the class. Fix the
|
||||
ordering of the assignment.
|
||||
|
||||
Approval Categories
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Make `NoBlock` and `NoOp` approval category functions work
|
||||
|
||||
* Fix category block status without negative score
|
||||
+
|
||||
Categories without blocking or approval scores will result in the
|
||||
blocking/approved image appearing in the category column after changes
|
||||
are merged should the score by the reviewer match the minimum or
|
||||
maximum value respectively.
|
||||
+
|
||||
A check to ignore "No Score" values of 0 was added.
|
||||
|
||||
* Fix NPE in `PRED__load_commit_labels_1`
|
||||
+
|
||||
If a change query uses reviewer information and loads the approvals
|
||||
map, but there are no approvals for a given patch set available, the
|
||||
collection came out null, which cannot be iterated. Make it always be
|
||||
an empty list.
|
||||
|
||||
Other
|
||||
~~~~~
|
||||
|
||||
* Set link:../Documentation/config-gerrit.html#transfer.timeout[transfer
|
||||
timeout] for pushes through HTTP
|
||||
+
|
||||
The transfer timeout was only set when pushing via SSH.
|
||||
|
||||
* link:../Documentation/config-gerrit.html#receive.maxObjectSizeLimit[
|
||||
Limit maximum Git object size] when pushing through HTTP
|
||||
+
|
||||
The limit for the maximum object size was only set when pushing via SSH.
|
||||
|
||||
* Fix units of `httpd.maxwait`
|
||||
+
|
||||
The default unit here is minutes, but Jetty wants to get milliseconds
|
||||
from the maxWait field. Convert the minutes returned by getTimeUnit to
|
||||
be milliseconds, matching what Jetty expects.
|
||||
+
|
||||
This should resolve a large number of 503 errors for Git over HTTP.
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1493[issue 1493]:
|
||||
Fix wrong "change ... closed" message on direct push
|
||||
+
|
||||
Pushing a commit directly into the central repository with bypassing
|
||||
code review wrongly resulted in a "change ... closed" message if the
|
||||
commit was already pushed for review and if a Change-Id was included in
|
||||
the commit message. Despite of the error message the push succeeded and
|
||||
the corresponding change got closed. Now the message is not printed
|
||||
anymore.
|
||||
|
||||
* Fix NPE that can hide guice CreationException on site init
|
||||
+
|
||||
Note that the `--show-stack-trace` option is needed to print the stack
|
||||
trace when a program stops with a Die exception.
|
||||
|
||||
* Do not automatically add author/committer as reviewer to drafts
|
||||
|
||||
* Fix NullPointerException in MergeOp
|
||||
+
|
||||
The body of the commit object may have been discarded earlier to
|
||||
save memory, so ensure it exists before asking for the author.
|
||||
|
||||
* link:http://code.google.com/p/gerrit/issues/detail?id=1396[issue 1396]:
|
||||
Initialize the submodule commit message buffer
|
||||
|
||||
* Create index for submodule subscriptions on site upgrade
|
||||
|
||||
* Fix URL to Jetty XML DTDs so they can be properly validated
|
||||
|
||||
* Fix resource leak when `changeMerge.test` is `true`
|
||||
|
||||
* Fix possible synchronization issue in TaskThunk
|
||||
|
||||
* Make sure we use only one type of NoteMerger for review notes creation
|
||||
|
||||
* Fix generation of owner group in GroupDetail
|
||||
+
|
||||
Set the GroupDetail.ownerGroup to the AccountGroup.ownerGroupUUID
|
||||
instead of the groupUUID.
|
||||
|
Loading…
Reference in New Issue
Block a user