| --- |
| title: "Gerrit 3.10.x" |
| permalink: 3.10.html |
| hide_sidebar: true |
| hide_navtoggle: true |
| toc: true |
| --- |
| |
| Download: **[3.10.0-rc3](https://gerrit-releases.storage.googleapis.com/gerrit-3.10.0-rc3.war)** |
| |
| Documentation: **[3.10.0-rc3](http://gerrit-documentation.storage.googleapis.com/Documentation/3.10.0/index.html)** |
| |
| ## Release highlights |
| |
| ### Rebase merge commits |
| |
| It's now possible to rebase merge commits directly from the UI. |
| |
| ### Further improve Suggest Fixes |
| |
| 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](https://gerrit-review.googlesource.com/Documentation/user-suggest-edits.html) |
| |
| ### Import changes from other servers |
| |
| Imported projects from other servers is now fully supported, including also |
| queries by change number on Lucene. |
| |
| ### List enabled features/experiments via REST API |
| |
| 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](https://gerrit-review.googlesource.com/Documentation/rest-api-config.html#list-experiments) |
| |
| ### Index management is now more accessible |
| |
| A number of rest endpoints have been added to simplify management and |
| observability of Gerrit indexes. It's now possible to: |
| - [List |
| indexes](https://gerrit-review.googlesource.com/Documentation/rest-api-config.html#list-indexes) |
| - [Get a |
| index](https://gerrit-review.googlesource.com/Documentation/rest-api-config.html#_get_index), |
| along side information on it's version. |
| - [Create |
| snapshots](https://gerrit-review.googlesource.com/Documentation/rest-api-config.html#snapshot-index) |
| of the index. These can then be used as backups of the index. |
| - [Re-index an index |
| version](https://gerrit-review.googlesource.com/Documentation/rest-api-config.html#_reindex_an_index_version). |
| It is also possible to specify whether to re-use up-to-date index documents. |
| |
| ### Less email notifications |
| |
| 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](https://gerrit-review.googlesource.com/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. |
| |
| ### Support project~changeNumber when querying for changes |
| |
| So far querying changes using the `change:` predicate did not |
| allow to use the `project~changeNumber` format. However, since |
| [Change 387794](https://gerrit-review.googlesource.com/c/gerrit/+/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](https://issues.gerritcodereview.com/issues/313935024) |
| |
| ### Configurable H2 cache pruning |
| |
| 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](https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#cachePruning). |
| |
| ### Improved H2 Cache performances |
| |
| Indexes have been added to the H2 cache databases, greatly improving performance |
| of persistent caches, especially pruning and building bloom filters. |
| |
| ### Allow fixes in Human comments via Rest API |
| |
| Robot Comments have been officially deprecated for some time and the [checks API |
| framework](https://gerrit-review.googlesource.com/Documentation/pg-plugin-checks-api.html) |
| 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](https://review.gerrithub.io/Documentation/rest-api-changes.html#apply-stored-fix) |
| endpoint. |
| This is done by adding an extra field `fix_suggestions` in |
| [CommentInfo](https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#comment-info) |
| 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 |
| ``` |
| |
| ### Native log deletion |
| 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](https://gerrit-review.googlesource.com/Documentation/config-gerrit.html) |
| |
| ### Support for secondary emails |
| It's now possible to update the commit message with a secondary email, both in |
| the UI and via Rest API. |
| |
| ### Update author and committer from the UI |
| It's now possible to update the author and the committer identities directly in |
| the UI. |
| |
| ## Important Notes |
| * [Change 394841](https://gerrit-review.googlesource.com/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](https://gerrit-review.googlesource.com/418257) 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. |
| |
| ### Submit Requirement Changes |
| * [Change 396517](https://gerrit-review.googlesource.com/396517) allow a |
| max_count = 50 for label predicates for SRs. |
| * [Issue 325070428](https://crbug.com/gerrit/325070428) Fixed PostReview to not |
| execute the submit rules twice when the SUBMIT_REQUIREMENTS or SUBMITTABLE |
| options were requested |
| |
| ### Schema and index changes |
| |
| 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. |
| |
| ### Online index schema upgrade from 3.9 |
| 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. |
| |
| ### Offline upgrade |
| - Download the new gerrit.war |
| - Stop Gerrit |
| - 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](https://gerrit-documentation.storage.googleapis.com/Documentation/3.9.0/pgm-reindex.html) |
| command for other options. |
| |
| ### Downgrade |
| Downgrade to any Gerrit v3.9 release is possible, but requires the following |
| manual steps: |
| |
| 1. Shutdown all migrated Gerrit servers |
| 2. Update the gerrit.war and plugins to the previous v3.7/v3.8 version |
| 3. Run offline change reindexing using the previous gerrit.war version |
| |
| ```sh |
| java -jar gerrit.war init -d site_path --batch |
| java -jar gerrit.war reindex -d site_path |
| ``` |
| |
| 4. Startup Gerrit server |
| |
| ### Native packaging |
| Updated almalinux to 9.3. |
| |
| ### Breaking Changes |
| |
| * [Change 409738](https://gerrit-review.googlesource.com/409738): |
| Added validation for label copy conditions |
| |
| * [Change 407417](https://gerrit-review.googlesource.com/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](https://gerrit-review.googlesource.com/404717): |
| Deprecate review command without project argument |
| |
| * [Issue 325070428](https://crbug.com/gerrit/325070428) 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](https://gerrit-review.googlesource.com/400821): |
| `AutoMerger#lookupFromGitOrMergeInMemory`: Remove mergeStrategy parameter |
| |
| This only impacts plugins. |
| |
| * [Change 401198](https://gerrit-review.googlesource.com/401198) DiffOperations: |
| Remove unused diffOptions parameter from load methods |
| |
| Potentially breaking change as it impacts plugins that use the DiffOperations |
| interface. |
| |
| * [Deprecated robot-comments](#deprecated-robot-comments) |
| |
| * [Change 401977](https://gerrit-review.googlesource.com/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](https://gerrit-review.googlesource.com/396859): |
| Disable dropdown items for downlading files >50 MB |
| |
| The 50MB limit is hardcoded and cannot be changed via configuration. |
| |
| * [Change 400622](https://gerrit-review.googlesource.com/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: |
| |
| ```java |
| class MySshModule extends PluginCommandModule { |
| |
| @Inject |
| MySshModule(@PluginName String pluginName) { |
| super(pluginName); |
| } |
| } |
| ``` |
| |
| ### Other changes |
| |
| * [Change 409729](https://gerrit-review.googlesource.com/409729): |
| Added REST endpoint to get the commit message of a change |
| |
| * [Change 391494](https://gerrit-review.googlesource.com/391494): |
| Committer and author identities can be updated in change edit mode via REST |
| |
| * [Change 394795](https://gerrit-review.googlesource.com/394795): |
| Remove ActionType, ChangeActions and RevisionActions enums forwarded as |
| properties from ChangeActionsPluginApi implementation |
| |
| * [Issue 240676565](https://crbug.com/gerrit/240676565): |
| Reviewer updates for reviewers by email are returned in change details |
| |
| * [Issue 326096919](https://crbug.com/gerrit/326096919): |
| Fixed internal server error when posting a review with a ReviewerInput |
| that didn't set the `reviewer` field |
| |
| * [Change 412617](https://gerrit-review.googlesource.com/412617): |
| Fix bug that allows inserting a broken pack |
| |
| * [Change 413077](https://gerrit-review.googlesource.com/413077): |
| Plugins can use `VersionedConfigFile` to read/write a config file stored in git |
| |
| * [Change 399657](https://gerrit-review.googlesource.com/399657): |
| Fix `WorkQueue` bug to ensure reliable execution of scheduled tasks |
| |
| * [Change 392460](https://gerrit-review.googlesource.com/392460): |
| Added commit sha and change number to "commit already exists (in change)" |
| Push Rejected response. |
| |
| * [Change 399237](https://gerrit-review.googlesource.com/399237): |
| Improved WorkQueue task thread names |
| |
| * [Change 412438](https://gerrit-review.googlesource.com/412438): |
| Fix behavior of rules.enable config to disable prolog |
| |
| * [Change 419157](https://gerrit-review.googlesource.com/419157) Solves a |
| latency regression related to CallerFinder |
| |
| ## Other Changes related to Multi-Site |
| |
| * [Change 399618](https://gerrit-review.googlesource.com/399618): |
| Populate `project-created` event with `instanceId` |
| |
| * [Change 398918](https://gerrit-review.googlesource.com/398918): |
| Don't fire `project-created` events not produced locally |
| |
| * [Change 417000](https://gerrit-review.googlesource.com/417000): |
| Allow to reindex changes without notifying listeners |
| |
| * [Change 413257](https://gerrit-review.googlesource.com/413257): |
| Allow listing tags in descending order |
| |
| ## Plugin changes |
| - codemirror-editor updated to: d4f9247d3efb6a0e461af701986235511d05b7e3 |
| - commit-message-length-validator updated to: c38e0a9d36767092b20558b28eff7f546c6d754c |
| - delete-project updated to: ea78b4b817151f47f6e3aca7bf1e90f14518caa1 |
| - download-commands updated to: 978e803c87416eb9e96236446b15b167017c0385 |
| - gitiles updated to: 4e8bd706e87eb11e3cfe2bfa9bbcb29020f39482 |
| - hooks updated to: f975f914312b258f84957d19f96014c3edd12644 |
| - plugin-manager updated to: cdd2d2d69666a70a16ac02bacf8e7fbbf4ca9979 |
| - replication updated to: 56b8ffbab5bf619c0b6b5d44f0255fd41b9e1c89 |
| - reviewnotes updated to: 18c867b6a957b3ddeb7a9e9789819fc60bdcd99a |
| - singleusergroup updated to: 4bee62cbbc21979b841843dd5faaf79470a35966 |
| - webhooks updated to: 2e5ec3b3bcf5e7ba50edba9eca3c15c8057ad6c2 |
| |
| ## JGit changes |
| Bump JGit version to c0b415f. You can retrieve the full list of changes |
| with: |
| |
| ```shell |
| git log --no-merges --abbrev-commit --format=oneline bf70c9f4c2e35548bc6d7853284b2c4d5e1d29ef...c0b415fb028b4c1f29b6df749323bbb11599495d |
| ``` |
| |
| Notable changes are: |
| * 81d64c913 Cache refreshed loose ref dirs in SnapshottingRefDirectory |
| * 72fa0a53e TreeRevFilter: correct changedPathFilter usage for multi-paths inclusion |
| * 9e841dd4a PathFilterGroup: implement getPathsBestEffort() |
| * c1eba8abe DfsPackFile: get commitGraph.readChangePaths from repo config |
| * 21f7fdff7 Introduce core.trustLooseRefStat config |
| * 5c94dcc56 DfsObjDatabase: Let object database instantiate DfsPackFiles |
| * 049749558 DfsPackFile: Abstract the bitmap loading to support other backends |
| * 3e624306d Allow to discover bitmap on disk created after the packfile |
| * 15363e4c3 PackWriterBitmapPreparer: Do not generate bitmaps for excessive branch tips. |
| * c64664925 CherryPick: add ability to customise cherry-picked commit message |
| * ba5adc4ce Add tests for handling pack files removal during fetch |
| * ee4443091 PackWriterBitmapPreparer: Set limit on excessive branch count |
| * 788487316 BasePackFetchConnection: Skip object/ref lookups if local repo is empty |
| * faa50c683 LooseObjects: Use File#exists when possible |
| * b2abab271 DfsReader: give subclasses visiblity over the pack bitmap index |
| * e25bf9573 PackBitmapIndex/StoredBitmap: Expose size and counts |
| * 52c18ae15 PackWriter/Statistics: Remove the bitmapt hit stats |
| * ab132937f FooterLine: Protect from ill-formed message |
| * 340cc787a Improve footer parsing to allow multiline footers. |
| * aab75dba7 BitmapIndex: Add interface to track bitmaps found (or not) |
| * 4f18c5095 Optimize RefDirectory.getRefsByPrefix(String...) |
| * b761a0fc3 Use try-with-resource to ensure UploadPack is closed |
| * 3937300f3 Optimise Git protocol v2 `ref-prefix` scanning |
| * 5f563e386 UploadPack: use want-refs as advertised set in fetch v2 |
| * 093bde518 BasePackFetchConnection: Avoid full clone with useNegotiationTip |
| * 8ca649c16 Generate SBOMs using cyclonedx maven plugin |
| * f91afe5f5 DfsPackFile: Do not attempt to read stream if pack doesn't have it |
| * 9323b430b PackObjectSizeIndexLoader: Log wrong bytes on exception |
| * 0f078da4e FileBasedConfig: in-process synchronization for load() and save() |
| * cb46ee354 FileBasedConfig: ensure correct snapshot if no file |
| * f93ccb7fd RebaseCommand: return correct status on stash apply conflicts |
| * 42917767f UploadPack: Delay freeing refs in sendPack() |
| |
| ## Security Fixes |
| * [Issue 321784734](https://gerrit-review.googlesource.com/q/bug: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. |
| |
| ## Documentation changes |
| * [Issue 312899496](https://gerrit-review.googlesource.com/q/bug:312899496) |
| Reworked the project config documentation page |
| * [Issue 312890385](https://gerrit-review.googlesource.com/q/bug:312890385) |
| Improved the submit requirements documentation |
| * [Change 395681](https://gerrit-review.googlesource.com/395681) Update |
| instructions about filing security issues |
| * [Change 395997](https://gerrit-review.googlesource.com/395997) Update |
| documentation for the ChangeInfo. |
| * [Change 398418](https://gerrit-review.googlesource.com/398418) Document Byte |
| Buddy issue with running mock tests |
| * [Change 399697](https://gerrit-review.googlesource.com/399697) |
| submit-requirements.txt: Document how to restore SRs via REST |
| * [Issue 313411537](https://gerrit-review.googlesource.com/q/bug:313411537) |
| Improve docs around submit requirements and access rights |
| * [Change 400398](https://gerrit-review.googlesource.com/400398) SR |
| documentation: Mention that label function should be set to NoBlock |
| * [Issue 320820903](https://gerrit-review.googlesource.com/q/bug:320820903) |
| Update docs on Project ownership. |
| * [Change 410725](https://gerrit-review.googlesource.com/410725) Document |
| behaviour of RetryScheduler |
| |
| ## Other dependency changes |
| |
| * [Change 389854](https://gerrit-review.googlesource.com/389854): |
| Update protobuf version to 21.7 |
| |
| * [Change 408697](https://gerrit-review.googlesource.com/408697): |
| update Soy library |
| |
| * [Change 387360](https://gerrit-review.googlesource.com/387360): |
| Update Bazel version to 7.0.0 |
| |
| * [Change 391534](https://gerrit-review.googlesource.com/391534): |
| Bazel: Add support for JDK 21 |
| |
| * [Issue 319778767,](https://crbug.com/gerrit/319778767): |
| Update commons-compress to 1.25.0 |
| |
| * [Change 399557](https://gerrit-review.googlesource.com/399557): |
| Update reload4j to 1.2.25 |
| |
| * [Issue 317782004](https://crbug.com/gerrit/317782004): |
| Update httpcore to 4.4.16 |
| |
| * [Issue 317790747](https://crbug.com/gerrit/317790747): |
| Update auto-value to 1.10.4 |
| |
| * [Issue 317782000](https://crbug.com/gerrit/317782000): |
| Update httpclient to 4.5.14 |
| |
| * [Change 400697](https://gerrit-review.googlesource.com/400697): |
| Upgrade yarn deps (January 2024) |
| |
| * [Change 412497](https://gerrit-review.googlesource.com/412497): |
| Update Truth to 1.4.2. |
| |
| ## Frontend changes |
| * [Issue 315957653](https://crbug.com/gerrit/315957653): |
| account-chip hover-card shows correct email for author and committer |
| |
| * [Change 397457](https://gerrit-review.googlesource.com/397457): |
| Add syntax highlight support for cjs, cts, and mts file |
| |
| * [Change 400824](https://gerrit-review.googlesource.com/400824): |
| Fix scrolling to diff rows covered by the header UI |
| |
| * [Change 402837](https://gerrit-review.googlesource.com/402837): |
| Revert CLs should still say Ready To Submit UI supports updating commit |
| message using a registered secondary email |
| |
| * [Change 407157](https://gerrit-review.googlesource.com/407157): |
| Add plugin endpoint for account links |
| |
| * [Change 407660](https://gerrit-review.googlesource.com/407660): |
| Turn Reply button into Sign in button when logged out |
| |
| * [Change 407820](https://gerrit-review.googlesource.com/407820): |
| Improve reviewer autocomplete on restricted refs/branches |
| |
| * [Change 407823](https://gerrit-review.googlesource.com/407823): |
| Show checks findings on file list |
| |
| * [Change 407825](https://gerrit-review.googlesource.com/407825): |
| Prevent pencil wrapping by itself in change metadata |
| |
| * [Issue 40015337](https://crbug.com/gerrit/40015337): |
| Fix browser BACK button when going to plugin pages |
| |
| * [Change 416260](https://gerrit-review.googlesource.com/416260): |
| Diff processor was simplified. It does not split up into multiple async |
| chunks of work anymore. |
| |
| * [Change 396859](https://gerrit-review.googlesource.com/396859): |
| Disable dropdown items for downlading files >50 MB |
| |
| * [Change 401384](https://gerrit-review.googlesource.com/401384): |
| Stop considering combo key after first hit |
| |
| * [Change 403277](https://gerrit-review.googlesource.com/403277): |
| Only show the _Show Blame_ button if blame is enabled. |
| |
| * [Change 416001](https://gerrit-review.googlesource.com/416001): |
| Add a `replysent` plugin event |
| |
| * [Change 411358](https://gerrit-review.googlesource.com/411358): |
| Fix revision actions constantly showing as "loading" when not signed in |
| |
| * [Issue 40004507](https://crbug.com/gerrit/40004507): |
| Added support for filtering branches/tags in plugins |
| |
| * [Issue 330574510](https://crbug.com/gerrit/330574510): |
| Fix issue with `gr-file-list-header` not working correctly after writing a comment |
| |
| * [Change 394446](https://gerrit-review.googlesource.com/394446): |
| fix tabbing for non-emojis starting with colon |
| |
| * [Change 395461](https://gerrit-review.googlesource.com/395461): |
| Fix emoji selector for all keys |
| |
| * [Change 399797](https://gerrit-review.googlesource.com/399797): |
| Enable highlighting for Qt code components |
| |