Download: 3.4.8 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0

Documentation: 3.4.8 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0

Release highlights

Important notes

JCraft JSch client library is disabled per default

Deprecated JCraft JSch client library is replaced with MINA SSHD client library per default. There is still option to switch to using JCraft JSch client library. Support for JCraft JSch will be removed in the next gerrit release.

Default support for Java 11

The java language level is now set to Java 11 by default for Gerrit.

  • Issue 13494; Generate a Java 11 Eclipse project by default

  • Update dev-{eclipse,intellij} development for Java 11.

Gerrit source code is still compatible with Java 8.

Schema changes

This release doesn’t contain schema changes.

The changes index version has been increased to version 61, new change search operators were added: mergedafter and mergedbefore.

To run off-line reindexing of the changes (optional):

  java -jar gerrit.war reindex --index changes -d site_path

By default the changes index is automatically rebuilt upon the Gerrit startup after the upgrade.

Zero-downtime upgrade

Gerrit supports zero-downtime upgrade from Gerrit v3.3 when configured using a high-availability configuration, when the Git repositories are stored in a shared filesystem such as NFS or similar.

For upgrading with zero-downtime, you should enable the rolling upgrade migration in gerrit.config on both Gerrit servers by setting the gerrit.experimentalRollingUpgrade to true.

During the zero-downtime upgrade, Gerrit end-users would not notice any outage or service disruption. They will be able to perform any read/write Gerrit operation on the GUI or using the Git protocol.

The zero-downtime upgrade consists of the following steps:

  1. Have Gerrit servers upgraded to v3.3 in high-availability configuration, healthy and able to handle the incoming traffic properly.
  2. Set gerrit.experimentalRollingUpgrade to true in gerrit.config on both Gerrit servers.
  3. Set the first Gerrit server unhealthy.
  4. Shutdown the first Gerrit server, upgrade to v3.4 and start Gerrit again.
  5. Verify that the first Gerrit server is working properly and then make it healthy again.
  6. Wait for the first Gerrit server to start serving traffic normally.
  7. Repeat steps 3. to 6. for the second Gerrit server.
  8. Remove gerrit.experimentalRollingUpgrade from gerrit.config on both Gerrit servers.


Downgrade to any Gerrit v3.3.x release is possible, but requires the following manual steps:

  1. Shutdown a migrated Gerrit v3.4.x server
  2. Run Gerrit v3.3.x init
  3. Startup Gerrit v3.3.x server

Breaking changes

is:mergeable predicate is disabled per default.

Computing is:mergeable has a O(N^2) runtime computation complexity depending on the number of open changes on a branch and on the size of the changes. Hence skip this computation per default to avoid the associated runtime effort.

Most Gerrit installation already disabled this feature and thus wouldn’t need to change anything. Otherwise, to restore the previous behaviour this option: change.mergeabilityComputationBehavior should be changed to API_REF_UPDATED_AND_CHANGE_REINDEX.

HTML plugin support is removed

HTML plugins should be migrated to JavaScript plugins. This also implies Polymer 2 plugins wouldn’t work any more. See also this announcement for more details.

These unused JavaScript Plugin API methods were removed:

  • plugin.annotationApi().setLayer(), plugin.annotationApi().enableToggleCheckbox()
  • plugin.changeMetadata().*
  • plugin.changeReply().send()
  • plugin.eventHelper().on(), plugin.eventHelper().captureClick(), plugin.eventHelper().captureTap()
  • plugin.project().*
  • plugin.settings().*
  • plugin.styles().*
  • plugin.theme().*
  • plugin.get(),, plugin.put(), plugin.delete(): Replaced by their counterparts in plugin.restApi().

ChangeAttributeFactory is removed

As noted in the v3.3 release notes, ChangeAttributeFactory has been removed.

Native packaging

New features

Checks UI

Gerrit now has a native UI for displaying run/result info from builds, tests, analyzers, etc. The data for this new Checks UI must be provided by JavaScript plugins using the Checks API. Checks information will be summarized by chips below the commit message. Detailed information is shown on a dedicated Checks tab next to the Files and Comments tabs.

Unresolved Comments ported to latest patchset

Unresolved comments that were left on older patchsets will now also be shown on newer patchsets. The backend provides two new endpoints ported_comments/ and ported_drafts/ for the UI to retrieve the data and for showing the comments in the correct position.

Comment Chips and Context

Comment state (resolved, unresolved, draft) is summarized by chips below the commit message. The Comments Tab and the Change Log will not just show the comment thread, but also the snippet of code (where the comment was made) as context.


  • Accounts
  • Changes
  • Groups
  • Projects

End-to-end tests

Plugin changes

Gerrit UI changes

  • Limit overview image interactions to primary mouse button

  • Fix: cannot select names in hovercards in the reply dialog

  • Fix thick border on votes in reply dialog

  • Add a simple hovercard for check runs

  • Add hover states to summary chips

  • Align relation chain section with the change info section and button

  • Show ‘show all’ button only when commit message has 17 or more lines

  • Show hovercard actions in submit requirement account chips

  • Update UX for selecting and filter checks

  • Show hovercard actions in change log

  • Fix condition check of show_file_comment_button

  • Do not try to open reply dialog when change is not loaded

  • Fix Show all button on related changes for wide screen

  • Explicitly refit overlay for cherry pick dialog

  • Align text and radio button in cherry pick dialog

  • PolyGerrit: Simplify some regular expressions

  • Redesign Show all button in related changes

  • Add View Diff button to comment context

  • Fix show more button

  • Comments tab - radio buttons

  • Issue 14057; Add check for undefined commentThread property in submit dialog

  • Do not render confirm submit dialog until it is opened

  • Show unresolved comments in the confirm submit dialog

  • Show View Diff button for merge change messages

  • trigger range highlight on long range comment chip hover

  • Issue 13905; Fix attention icon in reply dialog

  • Enable prev/next button on first/last file to go to change page

  • A11y - when dialog opened make rest of page unfocusable

  • Add feedback button to top bar

  • Fix the “View Diff” button padding

  • Disable cherry pick button if branch is not specified

  • Add tooltip when Send Reply button is disabled

  • Do not show quick approve button on merged changes

  • Use RestApiService instead of Polymer element

  • Move chunks - UX improvements

  • Show quick-approve button even when change is already approved

  • A11y - Shortcuts tables in dialog

  • A11y - return focus when closing dialog

  • Provide clearer above / below mapping for context expansion buttons

  • Ensure changes with outdated patchsets have a disabled submit button

  • Add Publish button to editor

  • Update Save button to Save & Close file in edit view

  • A11y - Fix reading whole diff preferences dialog

  • Replace polymer readonly attribute with ts readonly

  • Issue 13511; Fix repositioning the reply dialog when the attention section expands

  • Issue 13506; Change the tooltip of the ‘MODIFY’ button to be fancier

  • Fix ‘Send’ button being enabled even without the user making any changes

  • Add more functionalities to hovercard

  • Change when and how attention can be modified in the reply dialog

  • Use a selection chip also in the attention summary of the reply dialog

  • Issue 13427; Do not show attention related hovercard actions to guest users

Documentation changes

  • Documentation: SHA-1 iso. SHA1

  • Issue 14295; Tidy up cross-repository-changes documentation

  • Add user privacy documentation

  • Document how to get pretty-printed JSON for REST calls

  • Fix image url in documentation page

  • Documentation: avoid * in ref expressions.

  • Document a 24h waiting period for features/API extension

  • Update the documentation of ReviewInput.tag

  • Document when cherry pick fields in ChangeInfo are set

  • Fix documentation of config_web_links field in ProjectAccessInfo

  • Add documentation for change.maxFiles and change.maxPatchSets

  • Add user documentation for ported comments

  • DeleteTags: document corner case behavior

  • CreateTag: document why we don’t check for visibility

  • CommitsCollection: document parseBody() call

  • Tidy up dev-plugins documentation table of files

  • Add more details of what a plugin’s documentation contains

  • Fix documentation for MoveAPI keepAllVotes option

  • Issue 11621; Document that a CVE should be filed for security issues

  • Document that external-ids paths variably nested

  • Documentation: clarify how the default branch is set

  • Document log4j config override

  • Document how to generate the html documentation

  • Replace obsolete ACCOUNT_GROUPS table in documentation

  • Document how vacant non-Google ESC seats get refilled

JGit changes

  • Update JGit to c82818e0e

This update includes this change, which (when configured) will make repacking with Gerrit less racy by ensuring a pruned object is still available for some amount of time after repacking finishes.

  • Update jgit to 9bfb0f3a4

  • Update jgit to 4560bdf7e

  • InitJgitConfig: Git protocol v2 is enabled per default

  • Add passing the ‘compression-level’ argument to the JGit ArchiveCommand

  • Update JGit to 59420886e98bfcb574511cea191ccb3953004610

  • Update JGit to 415788df2

  • Issue 13544; Upgrade JGit to 5cd485e5

Elasticsearch changes

  • Move elasticsearch back to WORKSPACE

  • Elasticsearch: Add support for configuring REST client timeouts

Other dependency changes

  • Issue 14075; Bazel: Specify exact dependencies for licenses rules

  • Upgrade Flexmark to 0.50.42

  • Upgrade jackson-core to 2.12.0

  • Upgrade protobuf version to 3.14.0

  • Upgrade jetty version to 9.4.36.v20210114

  • Upgrade rules_nodejs version to 3.2.3

  • Upgrade MINA SSHD version to 2.6.0

  • Trim dependencies in httpd/auth/restapi/BUILD

Other core changes

  • Issue 13140; Issue 14330; OpenID: Remove support for Yahoo! OpenID provider

  • ChangeInfo: change _number from int to Integer

  • PatchScriptFactory: Access Metrics constants in static way

  • MissingMetaObjectException: Add default serialVersionUID

  • Flush file diff cache after change Ic1eeccfeb6b18f6

  • Support panning magnified image by dragging

  • Add comments on boolean arg for calls of ProjectLevelConfig#getWithInheritance

  • Re-render diff when useNewImageDiffUi is changed

  • Include the boy scout rule in Gerrit contribution guide

  • Add the meta_diff endpoint to the Change API

  • Indicate soft hyphen in diff

  • Use MINA sshd library for key generation and export

  • Issue 12599; Git transport: Switch to using Apache MINA ssh client per default

  • Issue 12599; Git transport: Add option to switch to using MINA ssh client

  • Update file status colors

  • Make rows in change log with same height (36px)

  • Fix file size for executable files in new diff cache

  • Ensure image diff data URLs are accepted by goog.html.SafeUrl

  • Issue 14301; Fix change reload not loading because js error in checks service

  • Issue 14300; Revert “Revert “Convert gr-app_test to typescript””

  • Convert SectionSortCache to use get/loader instead of getIfPresent/put

  • Add comments chips to tab navigation

  • Issue 14300; Revert “Convert gr-app_test to typescript”

  • Expose auto-value-gson in plugin API

  • Improve vote chips in dark theme

  • Let image diff builder know when to use new UI

  • Add border outline for +1, -1

  • Glossary terms regarding Events

  • Improve alert message for syntax highlighting turned off

  • Show both ‘Expand All’ and ‘Collapse All’ if some files are expanded

  • Add the missing green-400 color

  • Add basic overlay / blink image viewer

  • Fix regression - enable insensitive search for repo search

  • Introduce a glossary section

  • Move all soy templates files to unique namespaces

  • Add commitSha to the Checks API fetch() interface

  • Load multiple groups more efficiently

  • Persist group cache by uuid

  • Preload comments with context

  • Add simple attempt support to Checks UI

  • Update the header of the Checks tab

  • Specify background color for dark theme for ported comments

  • Move InternalGroup to the entities package

  • Add an internalId to check runs and results

  • Fix expanded result rows to not react on click to expand/collapse

  • Issue 12639; Bump guice version to 5.0.1

  • Compute AutoMerge commits synchronously when processing merge commits

  • Reduce tooltip delay from 500 to 200 ms

  • Add comment context to draft comments

  • Add 6 colors for check result tags

  • Update colors

  • SubmitRecords: Accept empty records from the change index

  • ChangeData: Disallow computing submit rules when serving query results

  • Fix computation of ChangeData#merge

  • Describe Timing reporting constants

  • Adapt old path in FileInfoJsonNewImpl to old diff cache representation

  • Fix NPE in FileInfoJsonComparingImpl when base = null

  • Add ChangeInfo to the ChangeData that the Checks API send to plugins

  • Introduce reporting constants - Timing

  • Navigate to previous unreviewed file when pressing “p”

  • Add timeout to DiffOperations

  • Switch GetDiff to use the new diff cache

  • Add spacing between party poppers and text in the comment tab

  • Add more spacing between related changes sections

  • Stop container jump on show all/less in Other Labels

  • Implement host-level default for ‘HEAD’ when new projects are created.

  • Add user guide for using topics.

  • Fix auto-merge detection in new diff cache

  • Replace tap by click event

  • Ignore new work-in-progress status if it hasn’t changed

  • Add frontend reporting of “usp” URL parameter

  • Add tracking to the global Gerrit object

  • Fix endpoint parameters for check result rows

  • Fix typing of ‘reply’ event

  • Add link that mentions bots to the attention set user guide

  • Introduce reporting constants - Execution

  • Lowercase C in ‘No Comments’

  • GrCursorManager: One-way-bind index

  • Move GrCursorManager element hooks to parents

  • Issue 14214; Fix alert text color

  • Replace this.async() with setTimeout()

  • Dark launch the new diff cache for the list files endpoint

  • Nothing to be forward-compatible with Lit 2

  • Replace at-/de-tached with dis-connectedCallback

  • Introduce reporting constants - Life Cycle

  • Related changes sections use all space if needed

  • Autocomplete for adding topic

  • Update designdoc to current state

  • Show toast when user stars a change

  • Issue 14199; Add attention operator for auto-complete

  • UI improvements for show all bar in commit message

  • Clean up ported comments experiment

  • Fix tracking of plugin-api calls

  • Update logic for clicking checks chips in the summary

  • Adapt old/new paths of the new diff cache to current Get Diff behaviour

  • Add tooltips to check links

  • Do not mark file reviewed when navigating using “n”

  • Read SubmitRecords back from NoteDb if allowClosed is false

  • PatchScriptFactory: Add logging statements for dark launch in mismatch

  • Minor improvements to ported comments message without range

  • Show arrows that indicate collapsed ancestors/descendents

  • Add count of results to section headers of check results

  • Add a ‘usp’ URL parameter that can be used for tracking

  • Hide comment context if screen width is less than 1200 px

  • Minor improvements to comment context

  • Add a request parameter to the Get Diff endpoint to use new diff cache

  • Issue 12983; Allow users to specify default branch when creating a repo

  • Add commit message to ChangeData of Checks API interface

  • Move show file comment to RenderPreferences

  • Convert ranged comment and move chips into hints

  • Implement syntax highlighting for comment context

  • Only show run and results filters in new Checks UI when needed

  • Modify the GetDiff endpoint to use the redesigned diff cache

  • Use Python 3 in

  • Fix reading empty subsections from plugin config

  • Add tracking for all frontend API calls

  • Add regular polling for checks

  • Implement patchset picker for new Checks UI

  • ProjectLevelConfig: Cache parsed config and avoid reparsing

  • Feedback for triggered actions

  • Fix tiny performance nit in ApprovalInferance

  • Enforce size limits for post submit diffs

  • Do not call Diff Cache when not needed

  • New Change Summary - fixing styling issues

  • Use StringBuilder instead of String concatenation to avoid O(n^2) performance.

  • Add separator between date and patchset in change log

  • Add a loading state to the checks model and use it for the summary

  • Fix how the change gets updated in the change-model and -service

  • Issue 14141; Add more data to successful runs in the new Checks UI

  • Update all rows of a change on the dashboard when one is changed

  • Handle checks summary chip clicks by filtering the tab accordingly

  • ReviewJson: Load SubmitRecords from ChangeData to avoid reevaluation in loop

  • Fix caching for SubmitRecords in ChangeData

  • Implement expanding and collapsing of run and result sections

  • Replace all colors with css vars defined in app-theme

  • Fix chip styles in Checks UI for dark theme

  • Introduce components for new image diff UI

  • Fix alignment of runnable chip title

  • Retry the creation of auto-merge commits more persistently

  • Use primary background color var to support dark theme

  • Retry submits more persistently

  • Add ‘parentof’ operator that matches parent changes for a change

  • Allow CCs to change the attention set

  • Avoid using underscores for private properties

  • Implement filtering and lazy loading of checks

  • New change summary - align count nonvisible changes

  • Change the long comment threshold from 5 to 10.

  • Adding sameTopic, mergeConflicts, cherrypicks to new change summary

  • Fix rebase action in new change summary

  • Expose instanceId in GerritInfo

  • Add readonly to restApiService property

  • Properly check the required ‘action’ property

  • Change the Checks fetch API to send a data object

  • Add a plugin endpoint to the expanded check result

  • Add support for top-level actions

  • Do not render more than 5 links in one check result row

  • Fix the gap between commit message and summaries

  • Limit total lines of context shown

  • Highlight the entire line in comment context for line comments

  • Click on comment chip will select same category in comments tab

  • Move render only properties to RenderPreferences

  • Filter out merged changes when submitting a topic

  • Issue 14102; Return empty context if the comment range is outside file boundaries

  • GetChange: provide meta=SHA1 option

  • Change expand diff context shortcut to be a toggle

  • New Change Summary - small fixes

  • Disallow creating projects with Gerrit internal refs as branch input

  • Add context padding to comment context request

  • Add zero state messages for Checks and Comments

  • Reduce the gap between commit message and summaries

  • GetChange: populate ChangeInfo.metaRevId with the NoteDb meta ref SHA1

  • Change cursor to pointer for run selection chips

  • Fix ‘Completed without results.’ font-weight

  • Highlight comment range

  • Vertically align first run section with first result section

  • Show the lines of code around a comment as context

  • Adding Related changes to new change summary

  • Request comment context along with the comments from server

  • Exclude unneeded ref prefixes when getting refs

  • Set commit message min-height to 100px

  • Add resolved text to comment

  • Filter robotComments without Human Reply

  • Change horizontal padding of summary chip from 4px to 8px

  • Add experiment ID for new image diff UI

  • Support experiment features in Gerrit backend

  • Create and move plugin APIs to api/ folder

  • Issue 14080; Split configs for RevisionDiffIT to different subclasses

  • Manually revert RefFilterOptions.returnMostRecentRefChanges

  • Check for old and new file modes in FileDiffCacheImpl

  • Handle single file diffs for non-existent files

  • Fix the alignment of the Change Info section

  • Change SAVE to SEND AS WIP

  • Set min-width for search

  • Add handling for run actions in new Checks UI

  • uploadPackAuditEventLog: Avoid commit timestamp mismatch

  • Find out why the error-manager initiates page reloads

  • Fix bug: don’t lookup in NoteDb when reading cached changes

  • InternalServerWithUserMessageException: Add serialVersionUID

  • Issue 14046; Fix bug: Do not change WIP status when not needed during rebase

  • Fix long range comment selection on Firefox

  • Clarify LOST value of LineNumber

  • Fix the height and background color of comments tab header

  • Fix the metadata reviewers line height

  • Small styling fix of successful check summary

  • Collapsing related changes

  • Issue 13836; Add a css var for coloring change log entries by service users

  • Fix account overflow problems in Change Log

  • Fix bug: also advertise refs/changes/../robot-comments when applicable

  • Fix bug not loading robot comments notes

  • Show all bar when editing commit message

  • Clean up auto reload dashboard experiment

  • Fix CmdLineParser.MyParser to not throw ClassCastException

  • Add option to dismiss new messages toast

  • Issue 13717; Add reviewers to attention set when replying to WIP changes

  • Some small checks summary UI tweaks

  • Fix a tiny bug in FileDiffCache for commit messages

  • Add selection of check run chips

  • Update comment tooltip if shortcuts are disabled

  • Drop outdated comments from

  • Configure maximum allowed value for the number of context padding lines

  • Add the context-padding parameter to the comment context

  • Issue 13571; Suppress keyboard shortcuts if user has disabled them

  • Revise the summary of the new Checks UI

  • Inline entity protobufs directly into cache protobufs

  • Fix FilesInCommitCollection when parent = 0

  • Add to missing declare statements

  • New Change Summary - Submitted together

  • FileEdits: Simplify instance creation

  • Retry more often on submit

  • Show avatars for unresolved comments authors

  • Extract persistent cache base factory

  • Move DiffLayer to the API

  • Move move-link-click event details to API

  • Move LineNumber to API

  • Move ContentLoadNeededEventDetail to the API

  • Make GrDiffGroupRange use LineRange

  • Fix being able to reload the Checks UI

  • Comments summary - unresolved comments + styling

  • Introducing new component for relation chain

  • Use a new custom exception instead of StorageException on submit

  • Left align ‘No changes need your attention’ message’

  • Add a RefFilterOption to always return all most recent ref changes

  • Send all user’s votes instead of only changed votes

  • Add single file diff to the DiffOperations interface

  • Issue 14034; Fix bug of removableReviewers without votes

  • Add extra width to display full names

  • Resolve TODO about removing SPECIAL_PATCH_SET_NUM

  • Comments Summary - initial work

  • Issue 13392; Fix text overflow in account labels

  • Issue 12536; Auto focus on the first input field

  • Issue 14000; Fix being able to flip your own attention flag

  • Fix font-weight in new Checks UI

  • LocalDiskRepositoryManager: Don’t compute base path before it is needed

  • Handle the comment context for merge list

  • Fix comment context for commit messages

  • New change summary - commit message with show all bar

  • Apply same spacing rules for long range chips as in move detection

  • Add message that files were not changed on submit

  • Fix loading of plugin provided coverage layer

  • Allow user to re-vote their same vote

  • ReviewerRecommender: Fix an imprecise comment

  • Add author name to new messages toast

  • Issue 2335; Add repository browser link to repo detail page

  • Adapt getRefs + filter to use the more efficient implementation

  • Use quotes in search query only when neccessary

  • Use the redesigned diff cache in the list files endpoint

  • Fix diff cursor side for chunks on first or last line of file

  • Add undefined check for accessing account id

  • Change linked URL for topic

  • Return the commit message and merge list for auto-merge with > 2 parents

  • Prevent duplicate ranged comment chips on rerender

  • Update message text in ported comments

  • Replace the placeholders in checks tab with something more decent

  • Allow posting the same vote on a new patchset

  • Do not show fake runs by default, but allow them to be toggled

  • Introduce material web components for use

  • Prevent skipping chunks on first or last line of file

  • A11y - announce that change is in edit mode

  • Propagate error’s text received from backend to a plugin

  • Add an option for checks to provide HTML results

  • Issue 12838; Add manual sync of cursor for gr-change-list

  • Move CommentRange to api/

  • Move GetOAuthToken out of the core restapi

  • Return empty comment context if line and range info are not available

  • Add basic support for expanding a checks row

  • Fix issue with rounding in calculation of time duration

  • Reload dashboard when visibility changes

  • Issue 13970; Increase the memory allocation for acceptance tests to 512m

  • Move the Side enum to the API

  • Reload ported comments when patchset picker is changed

  • Issue 13914; Prioritize ‘ADDED’ entries over ‘DELETED’ for file diffs

  • Refine the Checks Results UI

  • A11y - Each page should have only one main

  • Fix getSelection error

  • Reland: Use LoadingCache#getAll in AccountCacheImpl

  • Adapt voting chips to new chip style sizing

  • Handle clicks on new checks chips

  • Refine the UI of the checks chips

  • Add long range comment chip

  • Add ported drafts to comment count string

  • Throw one exception for both unresolvable commits and permission denied

  • Move OAuth and LDAP support out of server target

  • Add lit elements for Runs and Results

  • Only allow involved users to change the attention set

  • Disallow creating branches in Gerrit internal or tag refs namespaces

  • Create Branch: clarify that BranchInput and URL should match for ref

  • Add tracking when user navigates to original comment

  • Propagate the exception cause in CherryPickChange#cherryPick

  • DeleteRef: clarify ‘prefix’ argument

  • Make code compile in Eclipse

  • Rebase: Include conflicting files into the conflict response

  • Allow rebase with conflicts

  • Exempt JimFS from Library-Compliance.

  • tools/ Expand bash aliases and source bash profile

  • Add handling for Commit message and Rebase change messages

  • Add handling for ported comments with side=Parent

  • CheckAccess: print a useful message if no rules apply

  • restapi/project: move CheckAccessReadView into CheckAccess

  • restapi/project: add some comments

  • restapi/accounts: clarify permission related behaviors

  • Introduce the new DiffsOperations interface

  • Replace enable_context with enable-context in docs

  • Set path to null after filling the comment context

  • Allow users to select which changes to cherry pick

  • Create enum for the progress status of cherry picked change

  • Expose the entire commit message instead of only the subject

  • Disallow creating changes on internal Gerrit refs

  • Filter disabled experiments from settings view

  • Add the file diff cache

  • ExternalUser: Allow specifying a PropertyMap

  • Expose email addresses for ExternalUsers

  • Increase visibility of failed retries

  • Avoid passing @Singleton to args4j

  • Move ExternalUser from change.query into server package

  • Add status chip to file dropdown in diff view

  • Issue 13571; Add preference to disable all keyboard shortcuts

  • Update _computeMessageContent to use optional properties

  • Add diff between patchset N vs N - 1 on uploaded messages

  • Use current timestamp for creating group

  • CurrentUser: Expose set of ExternalId.Keys

  • GroupBackend: Accept CurrentUser instead of IdentifiedUser

  • CreateChange: Allow specifying correct project

  • Take empty arrays into account to break down chunks

  • Disallow creating changes on NoteDb refs

  • Fix compile error because of required new actions parameter

  • Fix unquoted properties of HTMLElementEventMap

  • Verify destination change of cherry-pick before trying to update it

  • Fix the z-index of the main header

  • Add top-level actions for Checks API

  • Allow porting comments to contribute to comment count string

  • Update comment route to handle comments created with side=PARENT

  • Only request ported comments when experiment is enabled

  • Add checks service

  • Add a model for router and change

  • Update existing change on cherry-pick with CommitApi

  • Implement mergedafter and mergedbefore change search operator

  • Change the default permissions from READ on refs/* to refs/heads/*

  • Support refs/users/self for the GET branch rest endpoint

  • Fixes for tools/

  • Adopt last updated time predicates to reuse for merged time predicates

  • Add an extension point to extend the change message on post review

  • Port drafts across patchsets

  • New change summary - introduce edit pencil

  • Fix PluginLogFile to not open multiple appenders when run in parallel

  • Port comments across patchsets

  • Fix for text selection in comment

  • Hide quick-approve for your own change or if you have already given max vote

  • Move __editing property to be part of only UIDraft

  • Add missing parameter to getThreadsBy* call

  • Add an option to keep votes when moving the change to another branch.

  • Clean up error reporting

  • Issue 13770; Do not add owner to the attention set when added as reviewer

  • Define a default errFn for REST API calls from plugins

  • Convert commentSide to diffSide in GrCommentThread

  • Move chunks: Add links to line numbers

  • Change all components to use the service for rest-api-interface

  • Add a service for rest-api

  • Set AutocompleteSuggestion property value to be string

  • Expose the mergedOn date of a change in ChangeNotes

  • Ignore no-unused-vars rule on args pattern ^_

  • Do not collapse lines of code with less than 4 lines

  • Get rid of some globals

  • Avoid throwing IllegalArgumentException when failing to parse an enum

  • Extend PatchSetWebLink to include subject and branch name

  • Replace non-standard event.path with event.composedPath

  • Show Submitted Date in change summary

  • Issue 13728; Fix dashboard not showing up for not-logged in user

  • A11y - improve announcing

  • Add a constant for ‘current’

  • Issue 13734; Fix the change message for removing cc

  • Move java_tools javac argument into tools parameter.

  • Fix A11y regression

  • Fix DynamicOptions to support a custom bean

  • Exempt guava from LC review

  • New change summary ui - flag, metadata

  • Do not re-initialise toast displayed time when navigating

  • Add braces to arrow functions returning void

  • Add simple visual distinction for move control text

  • A11y - Fix tabbing out of searchbar

  • Replace comment route in url bar with meaningful url

  • Clean-up ChangeNotesCache.Weigher

  • Add basic scaffolding for the checks tab

  • Add ‘prefer null’ to frontend style guide

  • Wrap isAtStart/End() in GrDiffCursor

  • Move some of the old diff cache entities to a new package

  • Add the git file diff cache

  • Make isAtStart/End() return true when no stops

  • Show all comments upon creation if user had hidden them

  • Show robot id for robot comments in comment card

  • Pass on CursorMoveResult

  • Show reviewer on comment tooltip

  • ChangeInfo: Serve reviewers when LABELS are requested

  • A11y - Improve diff a11y

  • Show alert when syntax highlighting is turned off

  • Improve description of moved chunks

  • Fix empty filter handling in list-view

  • Issue 13689; Bazel: Fix eclipse project generation

  • Fix Shift-A shortcut for hiding the left side of the diff

  • Update stops when a diff starts or stops loading

  • Make show_on… fields boolean

  • ProjectConfig: Write resolved groups to file

  • ChangeNotes: Don’t use ChangeIndex when we can avoid it

  • Issue 13612; Fix bazel run_shell usage for newer versions

  • Issue 13669; Remove –line-height-code in favor of calc() rules

  • Reduce boiler plate for event listening

  • When added as author, be added as CC and not reviewer

  • auth-check: Set content length only if authorization is valid

  • Add new ChecksApi to PluginApi

  • Treat spaces as ordinary characters in diff view

  • Issue 13658; Convert comment counts to comment thread counts around the UI

  • Specify line-height for code in terms of rem

  • Refuse to expand skip groups with WHOLE_FILE

  • Fix showing “Add Patchset Description” for users that are not logged in

  • Support diffing for octopus merges against a specific parent

  • Fix broken link to release notes of 2.2.2 in prolog cookbook

  • Update developer list in Maven pom files

  • Abort cursor movements across a loading diff

  • Issue 7458; Fix iron-dropdown positioning

  • Abort cursor moves via a sentinel, not a callback

  • Don’t unset scroll on non-existant stop

  • ported draft comments: Require authentication

  • Allow multiple plugins to provide coverage data

  • Hide patch file download when the commit has multiple parents

  • Add support to skip chunks

  • Issue 13336; Support accessing other users’ named queries

  • Only request ported drafts if user is logged in

  • Catch errors in getPortedComments request

  • Allow adding and removing invisible users to the attention set

  • Issue 13336; Support to query for user specific named destinations

  • Ensure users are active on the change when adding to attention set

  • Use ChangeData in LabelJson

  • Add latency tracking for porting comments

  • Add hasDrafts property to re-compute attention set

  • Fix headline for user queries for users without name

  • A11y - headlines for Diff Page

  • A11y - headlines for Change Page

  • Flip the defaults of the attention and assignee flags

  • A11y - headlines for Dashboard Page

  • Add the GitModifiedFilesCache and ModifiedFilesCache

  • Add constant for Service Users

  • Linkify branch name in repo detail list

  • Do not navigate to Base vs X if X is Base and file is unchanged

  • Submit emails should always be sent

  • Issue 13522; Fix topic creation in command line to send a topicEditedEvent

  • Improve message if submit fails due to non-fulfilled submit requirements

  • Add fatal to consistency and validation error enums

  • Add keyboard shortcut ‘f’ to open file list in diff view

  • Fix DefaultPermissionBackend#absentUser to work outside the request scope

  • Issue 13543; Fix navigate back to change page with ‘[’ on first diff.

  • Update mixins to avoid compilation issues

  • Required fixes to match internal google rules

  • Ensure that all assignment to window.Gerrit properties are safe

  • Use overridden ChangeEmail#add instead of OutgoingEmail#add

  • Show comment in viewport when navigating to Base vs X

  • Do not skip lines marked as dueToMove

  • Replace parseInt() with Number

  • Fix TseTse errors

  • DefaultPermissionBackend: Reuse current user where possible

  • Add event detail interfaces for dispatchEventThroughTarget

  • Replace “Since” by “Waiting”

  • Fix patchset comparison when adding coverages

  • Compute known groups lazily when writing groups to the trace

  • Fix TseTse errors.

  • Toggle default to show unresolved comments

  • Do not add reviewer to the attention set when they add themselves

  • Fix attention set tip not showing up

  • Add email notification option ATTENTION_SET_ONLY

  • Add more fine logging to SubmitStrategyOp

  • Replace dispatchEvent with dispatchEventThroughTarget

  • Add a header about attention set for all change emails

  • IdentifiedUser.RequestFactory#runAs allow passing properties

  • Allow user preference to receive emails only when in attention set

  • Fix TseTse error

  • Convert patchNum into integer if possible

  • Bold the user name, if they are in the attention set

  • Fix showing the CC section in the attention modify section

  • Change attention set logic to take unresolved state into account

  • Do not add the owner to an otherwise empty attention set

  • Fix “Do not update attention set” message

  • Do not rely on SortedMap / Set semantics for Flogger tags

  • Cache the comment context

  • Add ‘Since’ and ‘Submitted’ columns to dashboard sections

  • Change the sorting of changes in the ‘Your Turn’ dashboard section

  • Highlight the dashboard rows with attention as reviewer

  • Use auto-value-gson

  • Maintain all attention set updates in ChangeNotesState

  • ReceivePackRefCache, locate patch-sets instead of refs

  • Include repo config into CommitReceivedEvent

  • PostWatchedProjects: Throw BRE in case of empty input

  • CheckAccess: Return ACL debug logs

  • download-commands: use unqiue constants for each download command

Bugfix releases


  • Performance Improvements

    • Change 350236 Optimized change visibilty checking when the project is hidden

      Looping over every change when the whole project isn’t readable is a waste of CPU. It’s a bigger waste to fetch all the change data in the first place.

  • Native packaging

    • GerritForge RPM repository updated for arm64 architecture

      GerritForge RPM v1.4 has been released, including the native packages for arm64 architecutre.

    • DockerHub images for arm64 architecture

      DockerHub Gerrit images include images for arm64 architecture.

  • Bug Fixes

    • Issue 16404: Fix disabled caches when reading all keys at once

      When disabling some caches like git_file_diff the fetching of the keys was causing a ClassCastException and the associated Gerrit functionality was broken. This change fixes the bulk loading of all keys and allows to disable any of the Gerrit caches without regressions.

    • Change 350414 Fix index rewriter to rewrite all Or/AndPredicates. AndSource chooses right source more often

  • Known issues

    • Issue 16404: Fix disabled caches when reading all keys at once
  • New features

    • Issue 16322: Limit the number of changes that can be submitted together

      When chaining changes together, the sequence of commits to navigate was previously unbound, causing the potential operations explosion. The explosion could have also been accidental and caused by the push of a change with a non-existent branch, which would have resulted in the full scan of the repository for changes. Introduce a new Gerrit configuration change.maxSubmittableAtOnce with a safe default of 1024, which would allow any use case that would have also worked before this change.

    • Change 347496: Enable project_list cache warmer when cache.project_list.maxAge is set

    • Change 341454: GitwebServlet: Retrieve git path from FileRepository so that it can be used with multi-site and cached-refdb modules

  • Performance Fixes

    • Issue 16379: Remove key locking for disabled caches

      This change also makes the memoryLimit behaviour consistent with the diskLimit set to zero means disabling the implementation of the cache.

    • Change 349895: Add AndCardinalPredicate and OrCardinalPredicate

      Before this change, IndexSource derived cardinality from predicate which implement HasCardinality. Since AndPredicate and OrPredicate does not return cardinality, IndexSource defaults to 10 when query comprises more than one predicate. Due to this behavior, AndSource chooses IndexSource almost always when query contains more than one index predicate. This helps AndSource to choose the right source more often.

    • Change 347956: Introduce possibility to define the cardinality so that AndSource predicate can work more efficiently

      Before this change, cardinality of the IndexSource was always set to

      1. This makes AndSource to choose IndexSource over other sources most of the time. Add a HasCardinality interface which can be used by all the predicates which implement IndexPredicate to set a cardinality. This helps AndSource to choose the right datasource.
    • Change 349355: Cache repository locations in LocalDiskRepositoryManager

      Obtaining the actual location of a repository using base-path and project name can be slow as it involves some guessing to locate the repository. Cache the locations once they are obtained to avoid repeated work, thereby improving performance when opening repositories.

    • Change 347955: Consider cardinality while choosing the data source for AndSource predicate

      Before this change, AndSource considered cost to choose a datasource. Ideally cost should be used to determine which predicate to run #match() against first, so that queries are faster. Cardinality should be used to determine which datasource to be picked so that there are fewer changes to process. Consider cardinality of the datasource to choose the source and use cost when cardinality is same.

  • Bug Fixes

    • Change 350014: Do not set cherryPickOf on RevertSubmission

      The RevertSubmission internally uses CherryPickChange operation. It creates the ‘normal’ revert for the first change in the relation chain, for each subsequent change it creates a revert commit that is then cherry-picked. This cherry-pick is not a cherry-pick of the reverted change. This is a cherry-pick of the revert commit of the original change. This change fixes the bug in the logic that sets cherryPickOf to the original (reverted) change, using the CherryPickChange operation.

    • Change 349894: Don’t always rewrite And/OrPredicate to And/OrSource

      Before this change OrPredicate was always rewritten to OrSource. This is not the right thing to do as OrSource#read() will eventually fail when there is at least one non-datasource child. Since Change 347955, AndSource picks a source which has the lowest cardinality which makes the OrSource#read() failures more visible. Rewrite OrPredicate to OrSource only when all the children in the predicate are DataSources.

    • Change 348715; Clarify that a restart is needed before changes to email templates take effect

    • Issue 16182: Reintroduce the Change-Id footer in change screen

      This change reintroduce the Change-Id footer below the commit message on the Gerrit UI.

    • Issue 10168: Fix HTTP 404 when browsing tags on Gitweb

      The Gitweb links to tags have been broken in v2.14.10 onwards. Gitweb supports the ‘a=tags’ rendering action for annotated tags only, returning 404 for all lightweight tags. Use the generic ‘a=shortlog’ for Gitweb links to tags which would work for both annotated and lightweight ones.

    • Change 347495: Fix for IllegalStateException during the Gerrit start when cache.projects.refreshAfterWrite is set to true and prolog rules are used

    • Issue 15997: Make DelegateRepository#delegate() method public to allow plugins/modules to access it


  • Security Fixes

    • Issue 16054: Fix confidentiality leak by users with create ref permission using the create branch REST-API

      Any user with create ref permission was able to gain access to any SHA1 or refs, including the ones that they would not have permission to see.

  • Breaking changes

    • Issue 15941: Fix SSH queries to not show commit-message unless –commit-message is provided

      This issue has existed for several years and should be considered breaking as users might expect commit message to be included by default in SSH query results. Obtaining the commit message is a costly operation as the commit data has to be loaded. So, showing it even when –commit-message is not provided degrades the performance of SSH queries.

    • Change 344300: Add missing return values in MetricMaker’s newCallbackMetric and newConstantMetric

      When new callback and constant metrics were created the RegistrationHandle was not returned, making impossible to de-register them. The method signature is now aligned, however, all plugins, including the core ones, that were registering callback or constant metrics would need to be rebuilt from source or downloaded from the latest build on Gerrit-CI.

  • New features

    • Change 343096: Introduce index.paginationType=SEARCH_AFTER configuration for speeding up query pagination

    • Change 343798: Introduce index.pageSizeMultiplier configuration to paginate index queries with increasing size

    • Change 344334: Implement no-limit queries with multiple pages, make them usable with Elasticsearch

    • Change 345017: Add public EventTypes.getRegisteredEvents() for accessing all stream event types from plugins

    • Change 340714: Introduce metrics configuration for different data reservoirs

  • Performance Fixes

    • Change 338834: Avoid creating an IdentifiedUser multiple times in a SSH query This improves performance of SSH queries.

    • Change 338574: Cache ProjectControl instances in SSH queries A PerThreadCache is used to cache ProjectControl instances to improve SSH query performance.

    • Change 338474: Allow async receive-commits to have a thread-local cache Improve caching when merging changes through git push

    • Change 338154: Lazy load change notes when submit by push Improves performance of change submit via push

  • Bug Fixes

    • Change 347474: Fix DefaultMemoryCacheFactory to correctly set refreshAfterWrite Setting refreshAfterWrite in gerrit.config now works and does not mistakenly set expireAfterAccess

    • Issue 15997: Make delegate() method public git-repo-metrics plugin now works with multi-site setup

    • Issue 16038: Fix “internal error” when pushing to refs/users/xx/xxxx Push over HTTP to refs/users/* branch now works and doesn’t fail with “error: internal error” / Not Signed In

    • Issue 16001: AsciiDoctor: skip attribute when looking for title Fix documentation search showing :linkattrs: instead of the document title

    • Issue 15134: Apply the match operator to filter projects Next-arrow is now not hidden when searching for repositories in the Repository section

    • Change 337474: Use sane value for QueryProcessor’s effective limit on “–no-limit” Fix errors seen when –no-limit query option is used with ES index backend

    • Change 339754: Fix gerrit review command with branch option

      The gerrit review command was not able to find the commit with branch option; ensure “refs/heads/” prefix is present for branch option.

    • Issue 16106: Fix label operator to work with external groups, which never worked before since its addition in v2.10.

    • Change 331762: Cache permission filtering for All-Projects, allowing a faster ACL evaluation to any refs.

    • Change 343694: Improve performance of queries that check the visibility of changes wrt a non-current user

    • Change 346254: Fix change queries evaluation of AND terms to run match on predicate whose cost is least

      Sort the change queries predicates in AND based on cost and cardinality, which was broken since Change 79391.

      WARNING: queries containing predicates with poorly defined costs or cardinalities could perform worse now.

  • Dependency Updates

    • Update JGit to 035e0e23f251fdb766a6630509bcf342efb8b3ad, including the following fixes and improvements:

      • 011c26ff3 - Fix connection leak for smart http connections
      • d67ac798f - Remove stray files (probes or lock files) created by background threads
      • 035e0e23f - UploadPack: don’t prematurely terminate timer in case of error
      • 66ace4b9a - UploadPack: do not check reachability of visible SHA1s
  • Other Fixes

    • Change 340534: Fix link to change.mergeabilityComputationBehavior in user-search.txt

    • Change 337835: rest-api-projects: Fix documentation for #inherited-boolean-info


  • Bug Fixes

    • Change 335705: Fix bazel build on Mac M1 (aarch64)

    • Change 334762: Use original javax.servlet-api instead of tomcat’s copy

    • Change 334299: Reject invalid queries with status code 400 on POST /accounts/<account-identifier>/watched.projects

    • Issue 14109: Fix NPE with cherry pick REST-API onto an existing change in a different branch

  • Dependency Updates

    • Update rules_nodejs version to 5.1.0.

    • Update JGit to 78c9b9260a5287d09c87b407e396021590714513.

    • Update Apache sshd-mina, sshd-sftp and sshd-osgi to 2.7.0.

    • Update hamcrest to 2.2.


  • Security Fixes

    • Change 333304: Ignore --no-limit query changes option for anonymous users

      Prevent the use of no-limit option with query changes REST API. The option can result in excessive resources usage make Gerrit subject to DoS and DDoS by any remote endpoint without the need to have any Gerrit account or signing in.

  • Breaking changes

    • Issue 15589: Add SHA-1 hash variable to gitweb file links

      This change necessitates a Gitiles plugin update to v3.4.4.

  • Docker Images

    • Change 329639: CentOS 8 AppStream has disappeared: use AlmaLinux 8.5 as replacement for Gerrit image
  • Bug Fixes

    • Issue 14945: Account cache is not caching the access to the account data refs

      Account cache in Gerrit v3.4 does not cache the access to the All-Users.git repository because of the refactoring of the cache key, which requires lookup of the All-Users.git refs. Gerrit allows now the refs in-memory caching using the cached-refs libModule.

    • Issue 14912: Fix lost watch notifications when attention-set-only is configured

    • Issue 15407: MultiBaseLocalDiskRepositoryManager cannot be overloaded by libModules

      Allow the replacement of multi-base git repositories through libModules, which wasn’t possible before. Allow to use multi-base git repositories with the multi-site plugin and the cached-refs libModule

    • Issue 15500: Fix java.util.IllegalFormatArgumentIndexException on Java 17 in MergeUtil#mergeWithConflicts

    • Issue 15590: Fix SLF4J binding to Reload4J

      Use Reload4J-specific binding for SLF4J, fixing the broken MDC since the swap of Log4J with Reload4J done in Change 328081.

    • Change 330359: Fix gerrit ls-members –recursive

      Fix a regression introduced with Change 134334 that caused it to ignore the –recursive flag.

    • Change 327950: PrologRuleEvaluator: Fix endless loop on type error

  • Documentation Fixes

    • Change 331361: Fixup old references to Database in documentation

    • Change 331360: Remove leftover receive.changeUpdateThreads references

    • Change 290603: Fix gerrit ls-groups flag -g in documentation

  • Other Fixes

    • Issue 15667: Fix Zuul build with obsolete Python 3.5.
  • Dependency Updates

    • Update SLF4J version to 1.7.36.

    • Replace Log4J with reload4j version 1.2.19.


  • Security Fixes

    • Issue 15481: Remove support for Elasticsearch versions vulnerable to CVE-2021-44228

      Elasticsearch v7.16.2 includes the fix for the Log4J v2 vulnerability CVE-2021-44228.

      Remove support in Gerrit for all other vulnerable Elasticsearch versions and keep compatibility with v7.16.2 only.

    • Change 325218: Show the bi-directional Unicode chars as red exclamation marks.

      Bidirectional Unicode chars can be used to hack code base, as shown in Trojan Source web-site. Gerrit diff-view finds bidirectional unicode and shows them as red exclamation marks.

  • New Features

    • Change 325217: Soft hyphen are used in localization, show them similarly to tab indicator in diff-view.
  • Reindexing performance improvements

    • Change 325417: Changes off-line reindex: schedule slices immediately

      If a site has one huge repository and several small/medium sized repos, then slice creation for the large repo will effectively block other smaller repos from starting to reindex their changes. Schedule slices without waiting for any other slice creation, providing up to 25% performance improvement for large sites.

  • Bug Fixes

    • Change 325299: Disable cache display stats when initializing new Gerrit sites, as not useful.
  • Replication Plugin Fixes

    • Issue 15315: Document in the replication plugin that remoteNameStyle might result in a names clashes

    • Issue 15318: Document in the replication plugin that remoteNameStyle is for non-Gerrit remote repos

  • Gitiles Plugin Fixes

    • Issue 15307: Fix Bazel build on MacOS

    • Change 273397: Load fonts directly from Gerrit instead of 3rd party domains

      In environments without public Internet access or where tight control of loaded resources is necessary, loading fonts from 3rd party domains might be restricted. Use only the fonts included in the Gerrit war distribution and domain.


  • Breaking changes

    • Change 323855 Change 324115: ProjectCache#evict no longer triggers a reindex.

      During offline project reindexing evict() was triggering a duplicate reindex on the project when we only wanted to evict the project cache entry. This same issue occurred with the HA plugin and could be/been present in other plugins.

      If you have relied on a reindex being done on evict() you need to use evictAndReindex() instead. This behavior is now consistent with other evict() methods in Gerrit.

  • New features

    • Change 324095: Display cache statistics after reindex operation.

      Help analyzing the cache utilization during reindex command and provide insight into sizing them for optimal performance.

    • Change 323786: Allow context-dependent group suggestions in gr-permission.

    • Change 322975: Shows the number of changes that failed reindexing even if less than 10% fail.

    • Issue 14930: Include Command-Status in the httpd_log and the httpd_log.json

      Indicates the overall result of the GIT command over HTTP.

      Refer to the docs for more details.

    • Issue 14895: Support author:self and committer:self in change queries

      It is possible to use self for searching own changes (for both author and committer predicates).

  • Reindexing performance improvements

    • Change 323215 Change 322296: Disable auto flushing during offline Lucene indexing.

    • Change 322835: Use thread count specified on offline reindex command line.

      Honor the “–threads” command line option when provided instead of batchThreads property from gerrit.config.

    • Change 323396: Avoid lucene index deletes during offline reindexing.

    • Change 323297: Avoid scanning for change refs for each project slices when reindexing all changes.

      Avoiding the duplicate work brings down the reindex time from 45 mins to 15 mins for a test-site with 160k changes across 4 repos on NFS.

    • Change 324115: Avoid double indexing work during project reindexing.

  • Bug Fixes

    • Issue 14963: Fix /access REST APIs returning incorrect rule when group is duplicated for same rule.

    • Issue 14097: Fix GC action not shown in project commands with Gerrit in multi-site configuration.

    • Issue 15293: Fix fetch of group suggestions for projects with a / in their name.

    • Issue 15251: Ensure that user without edit permission can’t change plugin configuration.

    • Change 313561: Handle null account-ids when sending e-mails.

    • Change 307602: Fix NPE while accessing draft refs.

    • Change 307482: EqualsLabelPredicate: fix bug that prevents matching owner votes.

    • Change 321875: Ignore patchset level comments when computing unresolved count.

    • Change 322935: Fix buggy Index-Interactive Executor.

      Fix index.threads when set to a negative value which was not using a direct executor as mentioned in docs.

    • Issue 9812 Issue 7338: Merge commit cannot be moved

      If a merge was targetting branch A, but then it was decided to create a new branch for this merge named B, which starts from A - The merge is still valid for B, and the user has no way to move it without amending and creating a new change.

    • Issue 15024: Gerrit event json formatter produces inconsistent payload for different projects

      AllProjectsName and AllUsersName were serialised as: {“name”:”All-Projects”} and {“name”:”All-Users”} while all other projects were serialised as a JSON string. The different JSON payloads were causing issues with the HA configuration using the high-availability plugin.

    • Issue 14968: PluginServletContext does not implement javax.servlet.ServletContext.getVirtualServerName()

      Remove the noise on error_log of c.g.g.h.p.PluginServletContext does not implement j.s.ServletContext.getVirtualServerName(), when running Gerrit on Tomcat 8.5.69.

  • Plugin API fixes

    • Change 314962: Fix DynamicOptions to invoke listeners registered to BeanParseListener.
  • Dependency Updates

    • Update JGit to 60b81c5a9280e44fa48d533a61f915382b2b9ce2.


  • Security Fixes

    • Issue 14732: Commits/IncludedIn exposes branch names without respecting the ACLs on branches

      When calling the REST endpoint for listing all branches that a commit SHA1 is part of, the commit is properly checked for visibility against the ACLs (it is a REST resource) but the branches are not checked.

      The included-in may expose the list of non-visible branches to a user that has visibility of the SHA1.

    • Issue 7282: Hide repository name and description when user has no access

      Gitiles did not respect Gerrit’s permission and would show the repo name and description to any user who could guess the name. The repositories list as well as the content APIs were not affected.

  • New Features

    • Pop up accounts when typing within assignee or attention on the searchbar

    • Add attention operator for auto-complete on the searchbar

  • Bug Fixes

    • Issue 14726: Make “conflicts” cache reentrant for preventing deadlocks with concurrent cache loads of change conflicts computation.

    • Issue 14785: Limit returned changes for a triplet without Change-Id

      Fix a bug where invoking the REST-API /changes/repo~branch~ without mentioning the change-id resulted in the full scan of all changes on a repository/branch causing a high CPU overload and occupying the request threads for a long time.

    • Issue 14776: Prevent removing e-mail associated with OpenID external IDs

      Gerrit prevents the user from removing the email address associated with their OpenId account.

    • Issue 14872: Disable setting cancelLeftPadding if avatars are not set in the config

    • Issue 13745 Issue 14173: Firefox: fix suggested reviewers pop up instantly and not disappearing when out of focus

    • Issue 13955: Safari 14.1 for Mac OS BigSur 11.3.1: Multi-line code comment broken

    • Issue 14495: SSH thread leak with authentication exception

      A show-queue will show tasks in the Batch (or Interactive) queue hanging forever as a consequence of a Git/HTTP thread ended because of an error.

    • Issue 14561: Conflicting changes section not visible even when change.mergeabilityComputationBehavior is enabled

    • Issue 14577: Dedicated mergeable endpoint shouldn’t be called if change.mergeabilityComputationBehavior is set to API_REF_UPDATED_AND_CHANGE_REINDEX

    • Issue 14600: Empty registered field on profile settings screen

    • Issue 14603: Attention-set operations count towards change.maxUpdates limit.

    • Issue 14613: Gerrit is killed before the gracefulStopTimeout

      Avoids killing the in-flight Git/HTTP just after 30 seconds regardless of the httpd.gracefulStopTimeout configuration value.

    • Issue 14628: Project deletion replication events are failing to be serialized

    • Issue 14639: Searching repositories by name is case-sensitive

      Restore the correct project search that was case-insensitive in 2.16.27, 3.1.3 and 3.3.2.

    • Issue 14644: Weak security settings accidentally removed in SSH transport

    • Issue 14645: Username to lowercase conversion fails with duplicates

      Duplicated accounts names associated with the same account id was making the conversion to lowercase fail.

    • Issue 14649: Config setting change.maxUpdates was skipped when the change involved an update to the attention-set without comments

    • Issue 14676: Legacy host key file with RSA algorithm is overridden with ecdsa key during init.

    • Change 312602: Fix Mariadb status matching for AccountPatchReview

      Mariadb connector uses SQLException.getSQLState() which returns the ANSI SQLSTATE value, not the MariaDB/mysql error code. Fix the removal of duplicate key detection when an already reviewed file opened up again returned 500 because of the incorrect handling of SQLSTATE value.

    • Change 312382: Fix deleting edits when change is merged

      Fix the support of deleting a change edit after it has been merged or abandoned.

    • Change 313702: Remove contenteditable=”false” from within dragDropArea which caused issues with uploading

  • Plugins Fixes

    • Change 314364: codemirror-editor: stop propagation for all keys but exempt the save button

      This fixes an issue where if using contenteditable (default on mobile) and you typed “/”, it would get intercepted within the app.

  • Dependency Updates

    • Update CodeMirror to 5.62.2.

      Fix an issue on mobile where typing causes the keyboard line to go out of sync.

    • Update JGit to 06ca6cb3b01cdd618cc80f94bf0bf2fb78ab6e82.

      • JGit bug 573791: Stale file handle raised when loading a collection of notes with a NoteMap over NFS

      • JGit Bug 574178: Fix garbage collection failing to delete pack file

      • Noteworthy improvements for gerrit in this jgit update, improving performance from O(nˆ2) to O(n):

        Change 180697: BatchRefUpdate: Skip saving conflicting ref names and prefixes in memory

        Change 180559: Optimize RefDirectory.isNameConflicting(): this fix reduces number of open file handles jgit needs in all scenarios where lock files are created (e.g. ref updates).

        Change 180432: LockFile: create OutputStream only when needed