Download: 3.10.8 | 3.10.7 | 3.10.6 | 3.10.5 | 3.10.4 | 3.10.3 | 3.10.2 | 3.10.1 | 3.10.0
Documentation: 3.10.8 | 3.10.7 | 3.10.6 | 3.10.5 | 3.10.4 | 3.10.3 | 3.10.2 | 3.10.1 | 3.10.0
Java 11 is EOL since September 2023 and Gerrit already supports Java 17. Support for building Gerrit with Java 11 has been dropped and the default minimum version set to Java 17.0.5.
It's now possible to rebase merge commits directly from the UI.
It's now possible to have plugin generated suggested fixes directly in the UI. This opens the door for AI integration in the review process with Gerrit Code Review.
Please see more details here
Imported projects from other servers is now fully supported, including also queries by change number on Lucene.
It's now possible to list all experiments currently enabled on a Gerrit server by hitting the config/server/experiments
endpoint. Please see more details here
A number of rest endpoints have been added to simplify management and observability of Gerrit indexes. It's now possible to:
Attention has been put on reducing the number of email notifications that Gerrit users receive even when no actions need to be taken.
Gerrit no longer send emails to everyone when additional reviewers or CCs are added. Please note, this is also a breaking change, see more details on the change, Change 400822.
Only add owner and uploader to the attention set if the label is copied over to the latest patchset, avoiding emails for votes on older patchsets that don't affect the latest one. The reason for the user being in the attention set is also automatically updated.
Stop always cc'ing all “reviewers by email”, as otherwise they receive more emails than intended.
So far querying changes using the change:
predicate did not allow to use the project~changeNumber
format. However, since Change 387794 this is the default ID format returned in the ChangeInfo. Being able to use it directly for further queries would be advantageous.
i.e. https://gerrit-review.googlesource.com/q/change:gerrit~399319
This reinforces the concept that project~changeNumber
should be the Id to use when trying to unique identify changes. This should be preferred to project~branch~changeId
as this can theoretically contain duplicates, as specified in Issue 313935024
Schedule of cache pruning of H2 caches is now configurable. This means that it doesn't necessarily need to run on startup, therefore improving Gerrit startup times. Find more information in the docs.
Indexes have been added to the H2 cache databases, greatly improving performance of persistent caches, especially pruning and building bloom filters.
Robot Comments have been officially deprecated for some time and the checks API framework is recommended since Gerrit 3.6. This is great as it provides a way of greatly reducing the size of the repository. However, unlike fixes suggested in Robot-Comments, Human Suggested fixes could not be applied programmatically, until now.
Gerrit 3.10 introduces a way of suggesting fixes that could then be programmatically applied with the the Apply Stored Fixes endpoint. This is done by adding an extra field fix_suggestions
in CommentInfo that will be stored separately on NoteDB.
We don't consider this a breaking change as the comment info payload is serialized as JSON and unknown fields should be ignore when parsing such data format. To be extra cautious, this field is only written if the experiment is enabled.
The experiment can be enabled in gerrit.config
like so
[experiments] enabled = GerritBackendFeature__allow_fix_suggestions_in_comments
So far Gerrit admins have always needed to rely on external tools to delete old logs files, now this feature is brought within Gerrit itself and made easily configurable. See more details under log.timeToKeep
It's now possible to update the commit message with a secondary email, both in the UI and via Rest API.
It's now possible to update the author and the committer identities directly in the UI.
plugins.loadPriority
Currently there is no way of specifying an order in which plugins should be loaded, other than alphabetical. However, in some complex Gerrit deployments, the order in which plugins are enabled during startup matters.
I.e. In a multi-site setup, if whichever flavour of events-broker implementation is loaded before pull-replication, then some events could effectively go lost, as pull-replication won't be ready to consume them.
By using plugins.loadPriority
we can now define the order in which plugins should be loaded, ensuring that no events are lost.
Note: If manually enabling/disabling plugins at runtime, the order is no longer guaranteed.
Change 394841: The commit-msg hook now operates as a no-op for temporary commits, which are identified by a lowercase word followed by an exclamation mark (e.g., fixup!, squash!).
Configure gerrit.createChangeId to ‘always’ to force creation on these cases.
Change 394841 Introduce server_id in change_notes cache and update its version number.
This means that if you're using the change_notes cache, the file needs to be deleted. It will be automatically regenerated.
The accounts
index version has been increased to version 14. The changes
index version has been increased to version 86. The groups
index version has been increased to version 11. The projects
index version has been increased to version 9.
The schema version hasn't been updated, however, because Lucen was bumped 2 versions from 7.x to 9.8 the upgrade is supported only from Gerrit v3.9, as Lucene libraries do not support more than one version upgrade at a time.
By default, if you’re upgrading from 3.9, the index is automatically rebuilt upon Gerrit startup after the upgrade.
If you’re upgrading from 3.8 or an earlier version, you must use the Offline upgrade steps below, because of the Lucene upgrade mentioned above.
Note that it is advised to backup existing indexes prior the upgrade in case there is a need to rollback as already existing indexes are affected.
Download the new gerrit.war
Stop Gerrit
Backup the existing indexes in case a rollback is required
Ensure all installed plugins are compatible with the new API
Run init java -jar gerrit.war init -d site_path --batch
Reindex if you are upgrading from a 3.9 versions you don’t need to run reindex (see Online index schema upgrade from 3.9 above). If you still want to you will need to run reindex:
java -jar gerrit.war reindex -d site_path
If you are upgrading from a 3.8 or an earlier version, you must run a reindex of all indexes:
java -jar gerrit.war reindex -d site_path
See the reindex command for other options.
Gerrit v3.10.x supports zero-downtime upgrade from Gerrit v3.9 when configured using either high-availability or multi-site setup.
During the zero-downtime upgrade, Gerrit end-users will not experience any outage or service disruption and will be able to perform any read/write Gerrit operation seamlessly.
The zero-downtime upgrade process for high-availability or multi-site setups consists of the following steps (demo):
Downgrade to Gerrit v3.9 release is possible, but requires the following manual steps:
java -jar gerrit.war init -d site_path --batch java -jar gerrit.war reindex -d site_path
Updated almalinux to 9.3.
Issue 309098227 Change 360646: The introduction of a per-request ref cache for better performance may break the repository consistency
The addition of a new core.usePerRequestRefCache
setting, true by default, introduced a per request (currently per request thread) ref cache, helping reduce the overhead of checking if the packed-refs file was outdated. However, in some scenarios, such as multi-site or concurrency between git-receive-pack
and git-gc
, it may lead to split-brain inconsistencies and, in the worst-case scenario, to the corruption of the underlying repository.
Issue 380898784: The new changes_by_project
cache will make the git-upload-pack
fail intermittently on projects containing one or more inconsistent changes.
The introduction of the changes_by_project
cache is incompatible with projects having one or more inconsistent changes, like changes with /meta refs coming from unexpected Gerrit serverId. The cache makes the git-upload-pack
fail intermittently with internal server errors when it fails to load the change meta-data depending on the status of the cache. As a workaround, disable the changes_by_project
cache as follows in gerrit.config
:
[cache "changes_by_project"] memoryLimit = 0
Change 409738: Added validation for label copy conditions
Change 407417: Branch links in change metadata now ignore status
This means that clicking the branch link in the change detail section returns all changes associated with that branch, rather than the ones matching the change's status. This will return a much greater number of changes than before, potentially impacting plugin/workflow performance.
Change 404717: Deprecate review command without project argument
Change 413537 Added new current_revision_number
field to ChangeInfo that contains the current patch set number
If the consumer is “well designed” adding one extra field in the JSON response should not break any existing behaviour. However, as it‘s a change in the response payload, we’re highlighting this as potentially breaking change.
Change 400821: AutoMerger#lookupFromGitOrMergeInMemory
: Remove mergeStrategy parameter
This only impacts plugins.
Change 401198 DiffOperations: Remove unused diffOptions parameter from load methods
Potentially breaking change as it impacts plugins that use the DiffOperations interface.
Change 401977: Use RetryScheduler
with backoff when server returns 429
Gerrit UI will now automatically retry the Rest API calls to the backend when the HTTP status code is 429. This could lead to duplicated requests sent to the backend and consequently higher load on the system.
Change 396859: Disable dropdown items for downlading files >50 MB
The 50MB limit is hardcoded and cannot be changed via configuration.
Change 400622: PluginCommandModule
requires the plugin name in its constructor, hence all plugins that expose SSH commands need amending with an explicit constructor like the following:
class MySshModule extends PluginCommandModule { @Inject MySshModule(@PluginName String pluginName) { super(pluginName); } }
Change 424338: Fix inline editor
Change 409729: Added REST endpoint to get the commit message of a change
Change 391494: Committer and author identities can be updated in change edit mode via REST
Change 394795: Remove ActionType, ChangeActions and RevisionActions enums forwarded as properties from ChangeActionsPluginApi implementation
Change 405980: Reviewer updates for reviewers by email are returned in change details
Change 410145: Fixed internal server error when posting a review with a ReviewerInput that didn't set the reviewer
field
Change 412617: Fix bug that allows inserting a broken pack
Change 413077: Plugins can use VersionedConfigFile
to read/write a config file stored in git
Change 399657: Fix WorkQueue
bug to ensure reliable execution of scheduled tasks
Change 392460: Added commit sha and change number to “commit already exists (in change)” Push Rejected response.
Change 399237: Improved WorkQueue task thread names
Change 412438: Fix behavior of rules.enable config to disable prolog
Change 419157: Solves a latency regression related to CallerFinder
Change 424957: Mention who owns the change in comment emails
Change 399618: Populate project-created
event with instanceId
Change 398918: Don't fire project-created
events not produced locally
Change 417000: Allow to reindex changes without notifying listeners
Change 413257: Allow listing tags in descending order
Bump JGit version to c0b415f. You can retrieve the full list of changes with:
git log --no-merges --abbrev-commit --format=oneline bf70c9f4c2e35548bc6d7853284b2c4d5e1d29ef...c0b415fb028b4c1f29b6df749323bbb11599495d
Notable changes are:
ref-prefix
scanningIssue 321784734 Fix endless loop when using “is:watched” in project watches.
Previous setting up email notification with is:watched
predicate would create an infinite loop that would take a CPU offline.
Change 424318: Update CodeMirror frontend library
Change 389854: Update protobuf version to 21.7
Change 408697: update Soy library
Change 387360: Update Bazel version to 7.0.0
Change 391534: Bazel: Add support for JDK 21
Change 402759: Update commons-compress to 1.25.0
Change 399557: Update reload4j to 1.2.25
Issue 317782004: Update httpcore to 4.4.16
Issue 317790747: Update auto-value to 1.10.4
Issue 317782000: Update httpclient to 4.5.14
Change 400697: Upgrade yarn deps (January 2024)
Change 412497: Update Truth to 1.4.2.
Issue 315957653: account-chip hover-card shows correct email for author and committer
Change 397457: Add syntax highlight support for cjs, cts, and mts file
Change 400824: Fix scrolling to diff rows covered by the header UI
Change 402837: Revert CLs should still say Ready To Submit UI supports updating commit message using a registered secondary email
Change 407157: Add plugin endpoint for account links
Change 407660: Turn Reply button into Sign in button when logged out
Change 407820: Improve reviewer autocomplete on restricted refs/branches
Change 407823: Show checks findings on file list
Change 407825: Prevent pencil wrapping by itself in change metadata
Issue 40015337: Fix browser BACK button when going to plugin pages
Change 416260: Diff processor was simplified. It does not split up into multiple async chunks of work anymore.
Change 396859: Disable dropdown items for downlading files >50 MB
Change 401384: Stop considering combo key after first hit
Change 403277: Only show the Show Blame button if blame is enabled.
Change 416001: Add a replysent
plugin event
Change 411358: Fix revision actions constantly showing as “loading” when not signed in
Issue 40004507: Added support for filtering branches/tags in plugins
Issue 330574510: Fix issue with gr-file-list-header
not working correctly after writing a comment
Change 394446: fix tabbing for non-emojis starting with colon
Change 395461: Fix emoji selector for all keys
Change 399797: Enable highlighting for Qt code components
Issue 335613081: Fix the saving and rendering of diff-preferences not having an immediate impact on the UI
Change 421257: Fix redirection to the target page upon a successful login
Issue 295374158: Fix UI issue where the focus was unpredictably lost while typing a draft comment
Change 420337: Fix the login button disappearing when the page title was big enough in the navigation bar
Issue 337076005: Fix vertical alignment of header icon and text
Change 425577: Fix bogus account labels
Bug Fixes
Issue 437141693: Fix an issue introduced in Gerrit 3.10.7 where plugins' persisted caches weren't persisted anymore.
Issue 437005987: Prevent creation of tag via rest-api if project is in read only state.
Change 498181 Fix Submit Requirements that used ownerin:group_name
with Gerrit internal group names. Groups with external subgroups were unaffected.
Issue 435230894 Fix instances where changes sequence ref is rewind
Enforced strictly increasing ref sequence values to prevent rare stale-read issues on NFS.
Frontend changes
Known issues
Issue 437141693: Plugins' persisted caches aren‘t persisted anymore, due to the removal of the lazy initialization of the H2Cache’s bloomfilter.
The introduction of the performance improvement in Change 473682 has removed the lazy initialization of the H2Cache's bloomfilter which is needed for enabling the persistence of the cache keys. The consequence is that the plugins that were declaring a persistent cache would not be able to persist their cached values anymore.
JGit changes
This includes a fix for races that could occur when deleting refs and another actor tries to pack refs.
You can retrieve the full list of changes with:
git log --no-merges --format=oneline 3f3f3b5...e328d2
Bug Fixes
Issue 430336832 Align delete refs to the rest of Gerrit
The ChangeEditUtil.deleteRef() and StarredChangesUtilNoteDbImpl.deleteRef() failed to set the new object id in the RefUpdate, causing a situation where other parts of the code are expecting a non-null SHA1 and therefore causing potential NPEs.
Change 486742 Fixed project list cache data race due to Caffeine issue
Change 486741 Fixed removeLabel permission not being displayed in access section UI
Issue 412679366 Fixed an issue with a comment's resolved flag not updating
When PostReview.comments is set, they are supposed to replace the value of the draft with the same id (if one exists). The logic were replacing the message, but not the resolved bit. Leading to the update being lost.
Change 482026 Fixed reindexing stale changes in projects with encoded characters
Without this fix, any project with characters in its name that must be encoded would fail staleness checks with a “repository not found: Invalid name” message
Change 473802 Fix wrong column sort in change list
Change 476822 UI: Fix loading fonts with base url
Change 478326 Fix paper-toggle-button for iOS
Change 486743 Fix a special case for preview/apply fix
Change 487821 Use ASM9 opcodes to avoid plugin Jar scan warning
Enhancements
Change 481621 Checks: Display hovercard for previous run attempts
Change 473682 Do not wait for H2 bloomfilter building to respond to requests
Change 481583 Add ‘shift+h’ keyboard shortcut to hide check code pointers in the diff view
Change 462141 Improve error message when failing a submission for FAST_FORWARD_ONLY projects, avoiding also an NPE on the error_log
Documentation Updates
Plugins
Change 473229 Update webhooks plugin from 2e5ec3b to b00a2c2
You can retrieve the full list of changes with:
git log --no-merges --format=oneline 2e5ec3b...b00a2c
Change 480184 Update plugins/replication from branch ‘stable-3.10’ to 5be3cc55304ebdef853fb43ec184a51f59fdf07f
You can retrieve the full list of changes with:
git log --no-merges --format=oneline 9a750e2...5be3cc
Bug fixes
Issue 396060185: Find changes by change number only if imported server IDs are configured.
Change 467421: Prevent change numbers virtualization for sites without imported server id(s).
Issue 410069478: Fix the computation of the change virtual id for imported changes.
Change 469725: Fix incorrect cherryPickOf
value when using the REST API to cherry-pick a non-current patchset.
Enhancements
Issue 401141848: Fix ref existence check when creating new refs.
Gerrit v3.6 introduced a new check for verifying the existence of refs before crating new refs and avoiding misleading LOCK_FAILURE
errors. The check was implemented using a Repository.resolve()
API which would expand the ref name as it was a logical name resolution causing the inability to push some refs, like tags that use the git describe in their names. The issue is fixed by using a proper refs finding and brings back the full refs creation functionality.
Change 472521: Render markdown in check run description
JGit changes
Change 459004: Bump JGit to e328d203f (stable-6.10 tip).
git log --no-merges --oneline d5cc102e7..e328d203
Notable changes are:
Bug fixes
Issue 387440281: Fix the email notification for comments on unchanged files.
Issue 390647051: Fix the reporting of Git/HTTP errors in the httpd_log.
Issue 391394129: Prevent the generation of duplicate entity numbers when resetting the values with ‘gerrit sequence set’ command.
Issue 396060191: Fix log rotation of gc_log
avoiding to have it overwritten.
Issue 405165896: Fix project's access section when saving changes in the exclusive ACLs.
Change 462582: CreateBranch: Fix detection of conflicting branch names.
Change 455781: Allow using the core.useFileKeyByProjectCache
safely even when performing project removals.
Change 457842: Manage disappearing changes when fetching virtualId.
Issue 396060185: Lookup imported change by change number otherwise it cannot be found.
Enhancements
Issue 40013496: Support SO_TIMEOUT
configuration in SMTP email sender.
Change 454224: Introduce auth.externalIdsRefExpiry.
Introduce auth.externalIdsRefExpiry
to reduce All-Users access overhead by memoizing the latest external-ids SHA-1 for a configurable duration.
Change 461527: Online upgrade now allows skipping reindex.
Add no_reindex
as a supported value for index.onlineUpgrade
to enable zero-downtime upgrades without triggering online reindexing.
Documentation Updates
jgit.config
documentation for NFS v4 caching.Frontend changes
Change 447863: Fixes a bug where selecting the diff content did not exclude the line numbers on Safari.
Change 459523: Search bar: Fix negations with autocomplete.
Plugin changes
codemirror-editor
plugin:
JGit changes
git log --oneline --no-merges c824610ab...d5cc102e7
Notable changes are:
Bug fixes
Issue 389368407: Fix the reporting of UploadValidationListener(s) feedback to the Git client
Issue 388863156: Fix OutOfScopeException reported in error_log
when reloading plugins via REST-API
Issue 383513682: Fix Protobuf deserialization of project config with empty Group UUIDs
Change 445421: Fix “undefined is not an object (evaluating ‘navigator.serviceWorker.controller’)” in Gerrit UX
Change 447522: Reduce memory pressure on the JVM GC by reusing Gson objects across events
Issue 365889749: Fix timeouts calculation in SshDaemon
NOTE: All the SSH timeouts have been broken since the merge of Change 274055 released with Gerrit v3.4.* until v3.9.8. This fix makes the timeouts being considered as documented again, which may result in SSH connections being closed prematurely due to the configured timeouts in
gerrit.config
.
Change 445522: Improve ssh-rsa host key warning message
Change 445242: Add base url to service-worker url in the Gerrit UX
Change 445041: Fix OpenID authentication redirects to application root by avoiding the addition of extra /
Change 444801: Don't encode just a slash for loginUrl, which would have then redirected to //
Dependency Updates
Issue 317782000: Update org.apache.httpcomponents:httpclient to 4.5.14
Issue 317782004: Update org.apache.httpcomponents:httpcore to 4.4.16
JGit changes
Change 441661 and Change 442381: This JGit bump up to the tip of stable-6.10 brings quite a few notable improvements and features.
numberOfPackFilesSinceBitmap
and numberOfObjectsSinceBitmap
git log --oneline --no-merges 1cd87ab79...c824610ab
Notable changes are:
Constants#encode
by JDK implementationnumberOfPackFilesAfterBitmap
to RepoStatisticsFrontend changes
Other changes
Change 441761: Use prebuilt protobuf toolchain to avoid building protoc from source.
Change 443383: Introduce core.useFileKeyByProjectCache
for disabling fileKeyByProjectCache
in LocalDiskRepositoryManager
.
Setting core.useFileKeyByProjectCache=false
allow immediate reflection of the removal of projects from the filesystem to the in-memory Project's state without having to restart Gerrit.
Plugin changes
delete-project updated to c824610abba794a1f8f13d6ff2ec1c09590ce697
git log --no-merges --oneline bd49c1bf4212a166d1246774cb8c70d54ead31ba..e1328bd6cc11542ec909e0537c74b47ae8edecf8
e1328bd
Handle 204 response in delete-projectreplication updated to 9a750e2384ccb8975560b4ca76b9b92c535362af
git log --no-merges --oneline 445cd037108a9ad478c187aeb31cb14a8e889a0f..9a750e2384ccb8975560b4ca76b9b92c535362af
5cfb07a
Fixed chance for exceptions to block future distributor runs. Fixed an issue where exceptions during task accumulation could cause the replaying flag to become stuck, potentially blocking future distributor runs.Dependency Updates
gitiles
to 1.5.0
Security Fixes
Performance fixes
Change 438141: Queries with multiple non-index datasource predicates are re-written correctly
Improved query handling to make searches with multiple filters (that aren’t indexed) faster and more reliable, preventing slowdowns and potential failures with large data sets.
Enhancements
Bug Fixes
Change 436577: Add cherry-pick information to change message when cherry-pick results in a new patchset.
Added cherry-pick information to change messages for updates on existing changes, ensuring consistency with new changes created by cherry-picks.
Change 436957: Set change status to WIP for cases when cherry-pick results in a new PS and has conflicts.
Automatically set change status to Work In Progress
when a cherry-pick results in conflicts or if the source change is already marked as WIP.
Issue 359613387: Fix download of GJF for versions <= 1.7
Change 438361: Fix duplicate index entries after offline reindex with --reuse
.
Prevents duplicate entries during offline reindexing when using the --reuse
flag by replacing existing documents instead of inserting new ones.
Issue 368553867: Fix support for a number of groups higher than the index.maxTerms
Issue 360705824: Fix the ability to access projects URLs starting with a number.
Fix redirects for projects URLs starting with a number by refining regex handling and preserving query strings to prevent HTTP 404 errors.
JGit changes
Change 437301 and Change 438081: Update JGit to 1cd87ab790
You can retrieve the full list of changes with:
git log --no-merges --format=oneline cfdfb01f4..1cd87ab790
Notable changes are:
Enhancements
expand_circle_up
.Bug Fixes
Issue 346618790: Fix reload of plugins causing incorrect deregistration of dynamic items.
Issue 346350837: Fix binding of ApiModule bindings upon plugin reload.
Issue 344608194: Only suggest hashtags for those matching the input, including also regular expressions.
Issue 343218480: Fix translation of custom Prolog rules SubmitRecord to SubmitRequirement(s).
Security Fixes
Performance fixes
Change 431497: Improved offline reindex performance when disk caches have many hits.
Change 430777: Re-use revwalk for loading ChangeKindCache.
Change 431037: Stop calling addPatchSets()
twice call when populating change query result.
Change 431039: Lazy load labelTypes when populating change query result.
Change 431040: Reduce duplicate work when a caller uses both --patch-sets
and --current-patch-set
in change query.
Change 431018: Clone PatchSetAttribute
for currentPatchSet
when populating change query result.
if both --patch-sets
and --current-patch-set
are given, populate the patchSetAttribute
for currentPatchSet
using the fields already populated or all patch sets.
Documentation Fixes
Issue 352081004: Clarify that comment links work on html-escaped text.
Change 432157: HttpPasswordUpdateEmailDecorator: Fix link to http credentials.
UI Fixes
Change 431878: gr-rest-api-impl: Remove duplicate base url from _fetchB64File
Change 431657: Fix code commenting popup position under Firefox.
Change 431417: Add support for using diff3
for rebasing and cherry-pick with conflicts.
change.diff3ConflictView
setting is now honoured also for rebase and cherry-pick with conflicts
Change 429857: Use h2 header for Run GC
command.
Change 429822: Relative comment links without /
prefix are converted to absolute links.
Any link not starting with /
is automatically prefixed https://
.
Plugin changes
replication
updated to 445cd03
You can retrieve the full list of changes with:
git log --no-merges --format=oneline 56b8ffb..445cd03
notable changes are:
Change 384754: Avoid opportunity to inadvertently block the distributor.
Change 383694: Reduced log level for Task deletion errors in MP setups.
Change 352174: Reduced log level for no-op distributor push consolidations.
delete-project
updated to bd49c1bf
You can retrieve the full list of changes with:
git log --no-merges --format=oneline ea78b4b..bd49c1bf
JGit changes
Change 433257 and Change 432237: Update JGit to cfdfb01f4
You can retrieve the full list of changes with:
git log --no-merges --format=oneline c0b415fb0..cfdfb01f4
notable changes are: