Bitbucket Data Center aims to maintain API compatibility between minor releases (e.g. between 7.0 and 7.1). Methods and classes marked as deprecated will be removed in the next major release. For example, methods marked as deprecated in Bitbucket Data Center 8.1 or 8.2 will be removed in Bitbucket Data Center 9.0.
Bitbucket 9.4 adds a new type of branch permission to restrict creation of new branches.
NO_CREATES
in enum com.atlassian.bitbucket.repository.ref.restriction.RefRestrictionType
POST /rest/branch-permissions/latest/projects/{projectKey}/restrictions
POST /rest/branch-permissions/latest/projects/{projectKey}/repos/{repositorySlug}/restrictions
GET /rest/branch-permissions/latest/projects/{projectKey}/restrictions
GET /rest/branch-permissions/latest/projects/{projectKey}/restrictions/{id}
GET /rest/branch-permissions/latest/projects/{projectKey}/repos/{repositorySlug}/restrictions
GET /rest/branch-permissions/latest/projects/{projectKey}/repos/{repositorySlug}/restrictions/{id}
By default, 9.4 requires the user's password when a user updates their own email. When the
ENFORCE_PASSWORD_USER_EMAIL_UPDATE
standard feature is enabled, then updating a user's email via UserService
or
the /rest/api/latest/users
REST API will require the user's current password, and the update will be rejected if the
correct password is not provided.
ENFORCE_PASSWORD_USER_EMAIL_UPDATE
in StandardFeature
enumUserService#updateUser(String displayName, String emailAddress)
for removal in 10.0UserService#updateUser(String displayName, String emailAddress, String password)
NavBuilder.UserAccount#email
password
field to PUT /rest/api/latest/users
Bitbucket Data Center 9.3 has implemented two-step verification (2SV), which includes new REST API for authentication and a new login screen. For plugins that interact with the pre-existing login screen, it is worth noting that compatibility may break and changes will be required.
Some key REST API additions worth calling out:
POST /tsv/latest/authenticate
authenticates as the given userPOST /tsv/latest/authenticate/totp-code
authenticates as the given user using a TOTP codePOST /tsv/latest/authenticate/recovery-code
authenticates as the given user using a recovery codePOST /tsv/latest/status
retrieves the status of two-step verification for the authenticated userPOST /tsv/latest/elevate-permissions/totp
elevates permissions for the authenticated user using a TOTP codePOST /tsv/latest/elevate-permissions/recovery-code
elevates permissions for the authenticated user using a recovery codePOST /tsv/latest/elevate-permissions/password
elevates permissions for the authenticated user using a passwordGET /authconfig/latest/login-options
returns a list of available login options, which contains details about the metadata required for the login pageAll new REST API related to 2SV and the new login screen can be found under 'Authentication'.
Bitbucket Data Center 9.3 includes new SPI to allow plugins to implement a file store that can be used to store Git LFS objects, and in future possibly other files. It permits Bitbucket to generate pre-signed URLs for file uploads and downloads to/from what is typically going to be an external file store such as AWS S3 (which Bitbucket provides an implementation for).
Plugins intending the implement a file store must implement the com.atlassian.bitbucket.filestore.PluginFileStore
interface.
For the file store implementation to be picked up they have to be defined as a com.atlassian.bitbucket.filestore.PluginFileStoreModuleDescriptor
module in the plugin's atlassian-plugin.xml
file. See the module description for <file-store>
for more information.
com.atlassian.bitbucket.comment.LineNumberRange
getMultilineDestinationRange
and getMultilineSourceRange
in com.atlassian.bitbucket.comment.CommentThreadDiffAnchor
Added multilineSpan
fields for comments that span multiple lines in the following endpoints:
GET /rest/project/{projectKey}/repos/{repositorySlug}/commits/{commitHash}/comments
GET /rest/project/{projectKey}/repos/{repositorySlug}/commits/{commitHash}/comments/{commentId}
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
Although the bitbucket-parent
Maven POM file is not considered stable API, an upgrade to the version of the Mockito
mocking framework is worth noting. Plugins that either use bitbucket-parent
as their parent POM or import it for
the purposes of "dependencyManagement" may see changes to test code as the specific Mockito version dependency may
be inherited from bitbucket-parent
.
Note: The Mockito framework is a test dependency only and its upgrade will not impact a plugin's compatibility with Bitbucket Data Center.
The upgrade from Mockito 4.x to 5.x involves a number of breaking changes. Plugin developers are encouraged to update unit tests where Mockito is used, and can find more information in the Mockito 5 release notes.
Plugin developers who wish to depend on the bitbucket-parent
artifact at 9.3 or later, but still wish
to continue using Mockito 4.x, can override the dependency in the POM for their own plugin.
isMultilineAnchor
, getMultilineStartLine
and getMultilineStartLineType
in com.atlassian.bitbucket.comment.CommentThreadDiffAnchor
Added multilineMarker
fields for comments that span multiple lines in the following endpoints:
GET /rest/project/{projectKey}/repos/{repositorySlug}/commits/{commitHash}/comments
GET /rest/project/{projectKey}/repos/{repositorySlug}/commits/{commitHash}/comments/{commentId}
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
GET /rest/mirroring/latest/supportInfo/out-of-sync-repos/content
GET /rest/mirroring/latest/supportInfo/projects/{projectKey}/repos/{repositorySlug}/repo-lock-owner
GET /rest/mirroring/latest/supportInfo/repo-lock-owners
GET /rest/api/latest/admin/cluster
New REST endpoints to get diff stats summary
GET /rest/project/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/diff-stats-summary
GET /rest/project/{projectKey}/repos/{repositorySlug}/commits/{commitId}/diff-stats-summary
GET /rest/project/{projectKey}/repos/{repositorySlug}/compare/diff-stats-summary
POST /rest/mirroring/latest/zdu/start
POST /rest/mirroring/latest/zdu/end
contentUpdatedDate
and metadataUpdatedDate
fields for content and metadata hashes respectively, in the following endpoints:
GET /rest/mirroring/latest/repo-hashes
GET /rest/mirroring/latest/repo-hashes/content
GET /rest/mirroring/latest/repo-hashes/metadata
Bitbucket 9 requires Java 17. Support for running on Java 8 and 11 has been removed.
Similarly, apps developed for Bitbucket 9 will need to use a Java 17 JDK.
Bitbucket 9.0 includes an upgrade to Atlassian Data Center Platform 7.0. This upgrade puts us in a better position to respond to security changes with reduced disruption and breaking changes for your apps.
As part of this work, we have upgraded numerous Atlassian and third-party components to benefit from the latest security patches and bug fixes.
The Prepare your Data Center app for Platform 7 page contains an extensive list of the changes in Platform 7 and guides on how to migrate your app to Platform 7.
We have removed Interfaces, classes, and methods in the Bitbucket Java API that were marked as deprecated in Bitbucket 8.x.
Apps that use any of these interfaces generally won’t build with Bitbucket 9.0.
Precompiled apps that used any of the removed interfaces will fail to install or run in Bitbucket 9.0, typically with
java.lang.NoSuchMethodError
or java.lang.ClassNotFoundExceptions
.
Platform 7 and Bitbucket 9.0 have removed the ability for your apps to load many third-party libraries, as well as a few Atlassian-specific libraries, from the Bitbucket application. This group of libraries are called "gray APIs", as they were never intended to become part of the product’s API.
You will need to start bundling your own copies of these libraries with your apps if you wish to continue using them.
This change will allow us to improve Bitbucket more frequently without breaking your app or requiring you to do significant testing and rework when things change.
The following packages are no longer available to apps from Bitbucket. Apps that still wish to use these classes can bundle the classes within their app:
1 2assets ch.qos.logback.classic.db.names ch.qos.logback.classic.jmx com.atlassian.analytics.client com.atlassian.analytics.client.api com.atlassian.analytics.client.api.browser com.atlassian.analytics.client.api.mobile com.atlassian.annotations.tenancy com.atlassian.applinks.application com.atlassian.applinks.application.bamboo com.atlassian.applinks.application.bitbucket com.atlassian.applinks.application.confluence com.atlassian.applinks.application.crowd com.atlassian.applinks.application.fecru com.atlassian.applinks.application.generic com.atlassian.applinks.application.jira com.atlassian.applinks.application.refapp com.atlassian.applinks.application.subversion com.atlassian.applinks.core com.atlassian.applinks.core.auth com.atlassian.applinks.core.common com.atlassian.applinks.core.concurrent com.atlassian.applinks.core.event com.atlassian.applinks.core.link com.atlassian.applinks.core.manifest com.atlassian.applinks.core.oauth2 com.atlassian.applinks.core.plugin com.atlassian.applinks.core.plugin.condition com.atlassian.applinks.core.property com.atlassian.applinks.core.refapp com.atlassian.applinks.core.rest com.atlassian.applinks.core.rest.auth com.atlassian.applinks.core.rest.client com.atlassian.applinks.core.rest.context com.atlassian.applinks.core.rest.exceptionmapper com.atlassian.applinks.core.rest.model com.atlassian.applinks.core.rest.model.adapter com.atlassian.applinks.core.rest.permission com.atlassian.applinks.core.rest.ui com.atlassian.applinks.core.rest.util com.atlassian.applinks.core.upgrade com.atlassian.applinks.core.util com.atlassian.applinks.core.v1.rest com.atlassian.applinks.core.v2.rest com.atlassian.applinks.core.webfragment com.atlassian.applinks.internal.application com.atlassian.applinks.internal.common com.atlassian.applinks.internal.common.application com.atlassian.applinks.internal.common.applink com.atlassian.applinks.internal.common.auth.oauth com.atlassian.applinks.internal.common.auth.oauth.util com.atlassian.applinks.internal.common.auth.trusted com.atlassian.applinks.internal.common.cache com.atlassian.applinks.internal.common.capabilities com.atlassian.applinks.internal.common.docs com.atlassian.applinks.internal.common.event com.atlassian.applinks.internal.common.exception com.atlassian.applinks.internal.common.i18n com.atlassian.applinks.internal.common.json com.atlassian.applinks.internal.common.lang com.atlassian.applinks.internal.common.net com.atlassian.applinks.internal.common.permission com.atlassian.applinks.internal.common.rest.interceptor com.atlassian.applinks.internal.common.rest.model.applink com.atlassian.applinks.internal.common.rest.model.oauth com.atlassian.applinks.internal.common.rest.model.status com.atlassian.applinks.internal.common.rest.util com.atlassian.applinks.internal.common.status.oauth com.atlassian.applinks.internal.common.web com.atlassian.applinks.internal.common.web.condition com.atlassian.applinks.internal.common.web.data com.atlassian.applinks.internal.common.web.soy com.atlassian.applinks.internal.rest com.atlassian.applinks.internal.rest.applink com.atlassian.applinks.internal.rest.applink.data com.atlassian.applinks.internal.rest.capabilities com.atlassian.applinks.internal.rest.client com.atlassian.applinks.internal.rest.feature com.atlassian.applinks.internal.rest.interceptor com.atlassian.applinks.internal.rest.migration com.atlassian.applinks.internal.rest.model com.atlassian.applinks.internal.rest.model.applink com.atlassian.applinks.internal.rest.model.auth.compatibility com.atlassian.applinks.internal.rest.model.capabilities com.atlassian.applinks.internal.rest.model.migration com.atlassian.applinks.internal.rest.model.status com.atlassian.applinks.internal.rest.status com.atlassian.applinks.internal.status com.atlassian.applinks.internal.status.error com.atlassian.applinks.internal.status.oauth com.atlassian.applinks.internal.status.oauth.remote com.atlassian.applinks.internal.status.remote com.atlassian.applinks.internal.status.support com.atlassian.applinks.ui com.atlassian.applinks.ui.admin com.atlassian.applinks.ui.admin.applinkwizard com.atlassian.applinks.ui.admin.confluence com.atlassian.applinks.ui.auth com.atlassian.applinks.ui.confluence com.atlassian.applinks.ui.validators com.atlassian.applinks.ui.velocity com.atlassian.audit.core com.atlassian.audit.core.ecosystem com.atlassian.audit.core.impl.broker com.atlassian.audit.core.impl.service com.atlassian.audit.core.spi com.atlassian.audit.core.spi.service com.atlassian.audit.spi.entity com.atlassian.audit.spi.feature com.atlassian.audit.spi.lookup com.atlassian.audit.spi.migration com.atlassian.audit.spi.permission com.atlassian.bamboo com.atlassian.bitbucket.access.tokens com.atlassian.bitbucket.branch.automerge com.atlassian.bitbucket.dmz.admin.banner com.atlassian.bitbucket.dmz.annotation com.atlassian.bitbucket.dmz.auditing com.atlassian.bitbucket.dmz.autodecline com.atlassian.bitbucket.dmz.build com.atlassian.bitbucket.dmz.build.operations com.atlassian.bitbucket.dmz.build.server com.atlassian.bitbucket.dmz.build.status com.atlassian.bitbucket.dmz.build.status.dao com.atlassian.bitbucket.dmz.build.status.legacy com.atlassian.bitbucket.dmz.cluster com.atlassian.bitbucket.dmz.cluster.exception com.atlassian.bitbucket.dmz.codeowners com.atlassian.bitbucket.dmz.comment com.atlassian.bitbucket.dmz.commit com.atlassian.bitbucket.dmz.concurrent com.atlassian.bitbucket.dmz.deployment com.atlassian.bitbucket.dmz.deployments com.atlassian.bitbucket.dmz.deployments.event com.atlassian.bitbucket.dmz.discovery com.atlassian.bitbucket.dmz.emoticon com.atlassian.bitbucket.dmz.features com.atlassian.bitbucket.dmz.git.lfs com.atlassian.bitbucket.dmz.hook.script com.atlassian.bitbucket.dmz.idx com.atlassian.bitbucket.dmz.markup.renderer com.atlassian.bitbucket.dmz.mdc com.atlassian.bitbucket.dmz.mesh com.atlassian.bitbucket.dmz.migration com.atlassian.bitbucket.dmz.mirror com.atlassian.bitbucket.dmz.mirror.event com.atlassian.bitbucket.dmz.mirror.hash com.atlassian.bitbucket.dmz.monitoring com.atlassian.bitbucket.dmz.notification com.atlassian.bitbucket.dmz.notification.commit com.atlassian.bitbucket.dmz.notification.pull com.atlassian.bitbucket.dmz.notification.pull.custom com.atlassian.bitbucket.dmz.notification.repository com.atlassian.bitbucket.dmz.permission com.atlassian.bitbucket.dmz.policy com.atlassian.bitbucket.dmz.process com.atlassian.bitbucket.dmz.pull com.atlassian.bitbucket.dmz.pull.automerge com.atlassian.bitbucket.dmz.pull.template com.atlassian.bitbucket.dmz.ratelimit com.atlassian.bitbucket.dmz.repository com.atlassian.bitbucket.dmz.repositorymanagement com.atlassian.bitbucket.dmz.request com.atlassian.bitbucket.dmz.resilience com.atlassian.bitbucket.dmz.secretscanning com.atlassian.bitbucket.dmz.secretscanning.event com.atlassian.bitbucket.dmz.secretscanning.scan com.atlassian.bitbucket.dmz.secretscanning.validation com.atlassian.bitbucket.dmz.server com.atlassian.bitbucket.dmz.settingsrestriction com.atlassian.bitbucket.dmz.signature.verification com.atlassian.bitbucket.dmz.ssh com.atlassian.bitbucket.dmz.suggestion com.atlassian.bitbucket.dmz.systemsigning com.atlassian.bitbucket.dmz.throttle com.atlassian.bitbucket.dmz.upgrade.async com.atlassian.bitbucket.dmz.upm com.atlassian.bitbucket.dmz.user com.atlassian.bitbucket.dmz.web com.atlassian.bitbucket.dmz.x509 com.atlassian.bitbucket.dmz.x509.event com.atlassian.bitbucket.dmz.xsrf com.atlassian.bitbucket.mirroring.upstream com.atlassian.bitbucket.rest com.atlassian.bitbucket.rest.activity com.atlassian.bitbucket.rest.annotation com.atlassian.bitbucket.rest.attachment com.atlassian.bitbucket.rest.auth com.atlassian.bitbucket.rest.autodecline com.atlassian.bitbucket.rest.avatar com.atlassian.bitbucket.rest.build com.atlassian.bitbucket.rest.cluster com.atlassian.bitbucket.rest.comment com.atlassian.bitbucket.rest.commit com.atlassian.bitbucket.rest.content com.atlassian.bitbucket.rest.dashboard com.atlassian.bitbucket.rest.deployment com.atlassian.bitbucket.rest.enrich com.atlassian.bitbucket.rest.exception com.atlassian.bitbucket.rest.fragment com.atlassian.bitbucket.rest.hook.repository com.atlassian.bitbucket.rest.hook.script com.atlassian.bitbucket.rest.job com.atlassian.bitbucket.rest.label com.atlassian.bitbucket.rest.license com.atlassian.bitbucket.rest.log com.atlassian.bitbucket.rest.mail com.atlassian.bitbucket.rest.markup com.atlassian.bitbucket.rest.mesh com.atlassian.bitbucket.rest.migration com.atlassian.bitbucket.rest.permission com.atlassian.bitbucket.rest.project com.atlassian.bitbucket.rest.property com.atlassian.bitbucket.rest.pull com.atlassian.bitbucket.rest.pull.automerge com.atlassian.bitbucket.rest.pull.reviewer com.atlassian.bitbucket.rest.ratelimit com.atlassian.bitbucket.rest.repository com.atlassian.bitbucket.rest.scm com.atlassian.bitbucket.rest.scope com.atlassian.bitbucket.rest.secretscanning com.atlassian.bitbucket.rest.server com.atlassian.bitbucket.rest.settingsrestriction com.atlassian.bitbucket.rest.suggestion com.atlassian.bitbucket.rest.user com.atlassian.bitbucket.rest.util com.atlassian.bitbucket.rest.validation com.atlassian.bitbucket.rest.x509 com.atlassian.bitbucket.scm.cache.internal com.atlassian.bitbucket.scm.cache.internal.event com.atlassian.bitbucket.scm.cache.internal.jmx com.atlassian.bitbucket.scm.cache.internal.mesh com.atlassian.bitbucket.server.swagger.annotations com.atlassian.bitbucket.ssh.util com.atlassian.botocss com.atlassian.business.insights.api com.atlassian.business.insights.api.cluster com.atlassian.business.insights.api.config com.atlassian.business.insights.api.customfields com.atlassian.business.insights.api.customfields.model com.atlassian.business.insights.api.dataset com.atlassian.business.insights.api.exceptions com.atlassian.business.insights.api.extract com.atlassian.business.insights.api.filter com.atlassian.business.insights.api.pagination com.atlassian.business.insights.api.schema com.atlassian.business.insights.api.user com.atlassian.business.insights.api.writer com.atlassian.ccev com.atlassian.chaperone.obr com.atlassian.clover com.atlassian.clover.ant com.atlassian.clover.ant.groovy com.atlassian.clover.ant.taskdefs com.atlassian.clover.ant.tasks com.atlassian.clover.ant.tasks.testng com.atlassian.clover.ant.types com.atlassian.clover.api com.atlassian.clover.api.ci com.atlassian.clover.api.command com.atlassian.clover.api.instrumentation com.atlassian.clover.api.optimization com.atlassian.clover.api.registry com.atlassian.clover.cfg com.atlassian.clover.cfg.instr com.atlassian.clover.cfg.instr.java com.atlassian.clover.cmdline com.atlassian.clover.context com.atlassian.clover.instr com.atlassian.clover.instr.java com.atlassian.clover.instr.tests com.atlassian.clover.instr.tests.naming com.atlassian.clover.io.tags com.atlassian.clover.lang com.atlassian.clover.model com.atlassian.clover.optimization com.atlassian.clover.recorder com.atlassian.clover.recorder.junit com.atlassian.clover.recorder.pertest com.atlassian.clover.recorder.spock com.atlassian.clover.registry com.atlassian.clover.registry.entities com.atlassian.clover.registry.format com.atlassian.clover.registry.metrics com.atlassian.clover.registry.util com.atlassian.clover.remote com.atlassian.clover.reporters com.atlassian.clover.reporters.console com.atlassian.clover.reporters.filters com.atlassian.clover.reporters.html com.atlassian.clover.reporters.html.source com.atlassian.clover.reporters.html.source.groovy com.atlassian.clover.reporters.html.source.java com.atlassian.clover.reporters.json com.atlassian.clover.reporters.pdf com.atlassian.clover.reporters.util com.atlassian.clover.reporters.xml com.atlassian.clover.services com.atlassian.clover.spec.instr.test com.atlassian.clover.spi.lang com.atlassian.clover.spi.reporters.html.source com.atlassian.clover.util com.atlassian.clover.util.collections com.atlassian.clover.util.format com.atlassian.clover.util.trie com.atlassian.clover.versions com.atlassian.collectors com.atlassian.config.spring com.atlassian.config.xml com.atlassian.confluence.page com.atlassian.crowd.azure com.atlassian.crowd.cache com.atlassian.crowd.common.analytics.events com.atlassian.crowd.common.analytics.statistics.collectors com.atlassian.crowd.common.diff com.atlassian.crowd.common.features com.atlassian.crowd.common.properties com.atlassian.crowd.common.util com.atlassian.crowd.console.value.directory com.atlassian.crowd.crypto com.atlassian.crowd.darkfeature com.atlassian.crowd.directory.authentication com.atlassian.crowd.directory.authentication.impl com.atlassian.crowd.directory.cache com.atlassian.crowd.directory.cache.exception com.atlassian.crowd.directory.cache.model com.atlassian.crowd.directory.hybrid com.atlassian.crowd.directory.ldap com.atlassian.crowd.directory.ldap.cache com.atlassian.crowd.directory.ldap.connectionpool com.atlassian.crowd.directory.ldap.connectionpool.data com.atlassian.crowd.directory.ldap.connectionpool.mapper com.atlassian.crowd.directory.ldap.control com.atlassian.crowd.directory.ldap.control.ldap com.atlassian.crowd.directory.ldap.credential com.atlassian.crowd.directory.ldap.mapper com.atlassian.crowd.directory.ldap.mapper.attribute com.atlassian.crowd.directory.ldap.mapper.attribute.group com.atlassian.crowd.directory.ldap.mapper.attribute.user com.atlassian.crowd.directory.ldap.mapper.entity com.atlassian.crowd.directory.ldap.monitoring com.atlassian.crowd.directory.ldap.name com.atlassian.crowd.directory.ldap.util com.atlassian.crowd.directory.ldap.validator com.atlassian.crowd.directory.query com.atlassian.crowd.directory.rest com.atlassian.crowd.directory.rest.delta com.atlassian.crowd.directory.rest.endpoint com.atlassian.crowd.directory.rest.entity com.atlassian.crowd.directory.rest.entity.delta com.atlassian.crowd.directory.rest.entity.group com.atlassian.crowd.directory.rest.entity.membership com.atlassian.crowd.directory.rest.entity.user com.atlassian.crowd.directory.rest.entity.user.password com.atlassian.crowd.directory.rest.entity.user.rename com.atlassian.crowd.directory.rest.mapper com.atlassian.crowd.directory.rest.resolver com.atlassian.crowd.directory.rest.util com.atlassian.crowd.directory.rfc4519 com.atlassian.crowd.directory.ssl com.atlassian.crowd.directory.synchronisation com.atlassian.crowd.directory.synchronisation.cache com.atlassian.crowd.directory.synchronisation.utils com.atlassian.crowd.emailchange com.atlassian.crowd.embedded.admin.authorisation com.atlassian.crowd.embedded.directory com.atlassian.crowd.embedded.event com.atlassian.crowd.embedded.spi com.atlassian.crowd.embedded.validator com.atlassian.crowd.embedded.validator.impl com.atlassian.crowd.embedded.validator.rule com.atlassian.crowd.feature com.atlassian.crowd.function com.atlassian.crowd.hibernate.hsql com.atlassian.crowd.integration com.atlassian.crowd.integration.directory com.atlassian.crowd.integration.http com.atlassian.crowd.integration.http.filter com.atlassian.crowd.integration.http.util com.atlassian.crowd.integration.rest.entity com.atlassian.crowd.integration.rest.service com.atlassian.crowd.integration.rest.service.factory com.atlassian.crowd.integration.rest.util com.atlassian.crowd.license com.atlassian.crowd.licensing com.atlassian.crowd.lock com.atlassian.crowd.lookandfeel com.atlassian.crowd.manager.application.canonicality com.atlassian.crowd.manager.application.filtering com.atlassian.crowd.manager.application.search com.atlassian.crowd.manager.audit.mapper com.atlassian.crowd.manager.authentication com.atlassian.crowd.manager.cache com.atlassian.crowd.manager.cluster.message com.atlassian.crowd.manager.directory.monitor.poller com.atlassian.crowd.manager.directory.nestedgroups com.atlassian.crowd.manager.emailscan com.atlassian.crowd.manager.license com.atlassian.crowd.manager.login com.atlassian.crowd.manager.login.exception com.atlassian.crowd.manager.mail com.atlassian.crowd.manager.proxy com.atlassian.crowd.manager.recovery com.atlassian.crowd.manager.rememberme com.atlassian.crowd.manager.tombstone com.atlassian.crowd.manager.validation com.atlassian.crowd.mapper com.atlassian.crowd.model.alias com.atlassian.crowd.model.audit com.atlassian.crowd.model.cluster com.atlassian.crowd.model.config com.atlassian.crowd.model.licensing com.atlassian.crowd.model.page com.atlassian.crowd.model.property com.atlassian.crowd.model.scheduling com.atlassian.crowd.model.sso.idp com.atlassian.crowd.model.tombstone com.atlassian.crowd.password.saltgenerator com.atlassian.crowd.plugin.descriptors com.atlassian.crowd.search.hibernate com.atlassian.crowd.search.hibernate.audit com.atlassian.crowd.search.ldap com.atlassian.crowd.search.ldap.filter com.atlassian.crowd.search.ldap.test com.atlassian.crowd.service com.atlassian.crowd.service.client com.atlassian.crowd.service.cluster com.atlassian.crowd.service.factory com.atlassian.crowd.service.license com.atlassian.crowd.service.support com.atlassian.crowd.service.token com.atlassian.crowd.util.cache com.atlassian.crowd.web com.atlassian.crucible com.atlassian.db.config.password com.atlassian.diagnostics com.atlassian.diagnostics.detail com.atlassian.diagnostics.ipd.internal.spi com.atlassian.diagnostics.util com.atlassian.editlive com.atlassian.event com.atlassian.event.config com.atlassian.event.internal com.atlassian.event.legacy com.atlassian.event.remote.internal.auth com.atlassian.event.remote.internal.http com.atlassian.event.remote.internal.json com.atlassian.event.spi com.atlassian.event.spring com.atlassian.extras.api.bamboo com.atlassian.extras.api.clover com.atlassian.extras.api.confluence com.atlassian.extras.api.crowd com.atlassian.extras.api.crucible com.atlassian.extras.api.fisheye com.atlassian.extras.api.greenhopper com.atlassian.extras.api.jira com.atlassian.extras.api.plugin com.atlassian.extras.api.stash com.atlassian.extras.common com.atlassian.extras.common.log com.atlassian.extras.common.org.springframework.util com.atlassian.extras.common.util com.atlassian.extras.core com.atlassian.extras.core.bamboo com.atlassian.extras.core.bitbucket com.atlassian.extras.core.clover com.atlassian.extras.core.confluence com.atlassian.extras.core.crowd com.atlassian.extras.core.crucible com.atlassian.extras.core.fisheye com.atlassian.extras.core.greenhopper com.atlassian.extras.core.jira com.atlassian.extras.core.plugins com.atlassian.extras.core.stash com.atlassian.extras.core.transformer com.atlassian.extras.decoder.api com.atlassian.extras.decoder.v1 com.atlassian.extras.decoder.v1.confluence com.atlassian.extras.decoder.v2 com.atlassian.extras.keymanager com.atlassian.extras.legacy.util com.atlassian.failurecache com.atlassian.failurecache.executor com.atlassian.failurecache.failures com.atlassian.failurecache.updates com.atlassian.failurecache.util.date com.atlassian.fisheye com.atlassian.fugue com.atlassian.fugue.retry com.atlassian.greenhopper com.atlassian.healthcheck.core com.atlassian.healthcheck.spi com.atlassian.hibernate.extras com.atlassian.hibernate.extras.batching com.atlassian.hibernate.extras.event com.atlassian.hibernate.extras.hql com.atlassian.hibernate.extras.type com.atlassian.html.encode com.atlassian.httpclient.apache.httpcomponents com.atlassian.ip com.atlassian.jira com.atlassian.johnson.spring.event com.atlassian.johnson.spring.lifecycle com.atlassian.johnson.spring.web com.atlassian.johnson.spring.web.context com.atlassian.johnson.spring.web.context.support com.atlassian.johnson.spring.web.filter com.atlassian.johnson.spring.web.servlet com.atlassian.johnson.spring.web.servlet.support com.atlassian.jwt com.atlassian.jwt.applinks com.atlassian.jwt.applinks.exception com.atlassian.jwt.core com.atlassian.jwt.core.http com.atlassian.jwt.core.http.auth com.atlassian.jwt.core.keys com.atlassian.jwt.core.reader com.atlassian.jwt.core.writer com.atlassian.jwt.exception com.atlassian.jwt.httpclient com.atlassian.jwt.internal com.atlassian.jwt.internal.applinks com.atlassian.jwt.internal.sal com.atlassian.jwt.internal.security com.atlassian.jwt.internal.servlet com.atlassian.jwt.internal.writer com.atlassian.jwt.reader com.atlassian.jwt.writer com.atlassian.labs.restbrowser.plugin com.atlassian.labs.restbrowser.provider com.atlassian.labs.restbrowser.rest.model com.atlassian.labs.restbrowser.rest.services com.atlassian.labs.restbrowser.servlet com.atlassian.labs.restbrowser.util com.atlassian.lesscss.spi com.atlassian.license com.atlassian.license.applications.bamboo com.atlassian.license.applications.clover com.atlassian.license.applications.confluence com.atlassian.license.applications.crowd com.atlassian.license.applications.crucible com.atlassian.license.applications.editliveplugin com.atlassian.license.applications.fisheye com.atlassian.license.applications.greenhopper com.atlassian.license.applications.jira com.atlassian.license.applications.perforceplugin com.atlassian.license.applications.sharepoint com.atlassian.license.applications.vssplugin com.atlassian.license.decoder com.atlassian.license.util com.atlassian.linkaggregation com.atlassian.mail.server.impl com.atlassian.mail.server.impl.util com.atlassian.marketplace.client com.atlassian.marketplace.client.api com.atlassian.marketplace.client.encoding com.atlassian.marketplace.client.http com.atlassian.marketplace.client.impl com.atlassian.marketplace.client.model com.atlassian.marketplace.client.util com.atlassian.net com.atlassian.plugin.cache com.atlassian.plugin.cache.filecache com.atlassian.plugin.cache.filecache.impl com.atlassian.plugin.connect.api com.atlassian.plugin.connect.api.auth com.atlassian.plugin.connect.api.auth.scope com.atlassian.plugin.connect.api.descriptor com.atlassian.plugin.connect.api.lifecycle com.atlassian.plugin.connect.api.property com.atlassian.plugin.connect.api.request com.atlassian.plugin.connect.api.util com.atlassian.plugin.connect.api.web com.atlassian.plugin.connect.api.web.condition com.atlassian.plugin.connect.api.web.context com.atlassian.plugin.connect.api.web.iframe com.atlassian.plugin.connect.api.web.redirect com.atlassian.plugin.connect.bitbucket com.atlassian.plugin.connect.bitbucket.auth com.atlassian.plugin.connect.bitbucket.lifecycle com.atlassian.plugin.connect.bitbucket.usermanagement com.atlassian.plugin.connect.bitbucket.web com.atlassian.plugin.connect.bitbucket.web.condition com.atlassian.plugin.connect.bitbucket.web.context com.atlassian.plugin.connect.modules.beans com.atlassian.plugin.connect.modules.beans.builder com.atlassian.plugin.connect.modules.beans.builder.nested.dialog com.atlassian.plugin.connect.modules.beans.nested com.atlassian.plugin.connect.modules.beans.nested.dialog com.atlassian.plugin.connect.modules.bitbucket.beans com.atlassian.plugin.connect.modules.bitbucket.schema com.atlassian.plugin.connect.modules.gson com.atlassian.plugin.connect.modules.schema com.atlassian.plugin.connect.modules.util com.atlassian.plugin.connect.plugin com.atlassian.plugin.connect.plugin.api com.atlassian.plugin.connect.plugin.auth com.atlassian.plugin.connect.plugin.auth.applinks com.atlassian.plugin.connect.plugin.auth.jwt com.atlassian.plugin.connect.plugin.auth.oauth2 com.atlassian.plugin.connect.plugin.auth.scope com.atlassian.plugin.connect.plugin.auth.scope.whitelist com.atlassian.plugin.connect.plugin.auth.user com.atlassian.plugin.connect.plugin.descriptor com.atlassian.plugin.connect.plugin.descriptor.event com.atlassian.plugin.connect.plugin.lifecycle com.atlassian.plugin.connect.plugin.lifecycle.event com.atlassian.plugin.connect.plugin.lifecycle.upm com.atlassian.plugin.connect.plugin.property com.atlassian.plugin.connect.plugin.request com.atlassian.plugin.connect.plugin.request.url com.atlassian.plugin.connect.plugin.rest com.atlassian.plugin.connect.plugin.rest.addons com.atlassian.plugin.connect.plugin.rest.data com.atlassian.plugin.connect.plugin.rest.license com.atlassian.plugin.connect.plugin.rest.oauth2 com.atlassian.plugin.connect.plugin.util com.atlassian.plugin.connect.plugin.web com.atlassian.plugin.connect.plugin.web.blacklist com.atlassian.plugin.connect.plugin.web.condition com.atlassian.plugin.connect.plugin.web.context com.atlassian.plugin.connect.plugin.web.context.condition com.atlassian.plugin.connect.plugin.web.dialog com.atlassian.plugin.connect.plugin.web.iframe com.atlassian.plugin.connect.plugin.web.item com.atlassian.plugin.connect.plugin.web.jsapi com.atlassian.plugin.connect.plugin.web.page com.atlassian.plugin.connect.plugin.web.panel com.atlassian.plugin.connect.plugin.web.redirect com.atlassian.plugin.connect.plugin.webhook com.atlassian.plugin.connect.spi com.atlassian.plugin.connect.spi.auth.applinks com.atlassian.plugin.connect.spi.auth.user com.atlassian.plugin.connect.spi.lifecycle com.atlassian.plugin.connect.spi.module com.atlassian.plugin.connect.spi.web.condition com.atlassian.plugin.connect.spi.web.context com.atlassian.plugin.connect.spi.web.item com.atlassian.plugin.connect.spi.web.panel com.atlassian.plugin.event.impl com.atlassian.plugin.impl com.atlassian.plugin.main com.atlassian.plugin.osgi.container.impl com.atlassian.plugin.osgi.factory.transform.stage com.atlassian.plugin.osgi.hook.dmz com.atlassian.plugin.osgi.hook.dmz.packages com.atlassian.plugin.osgi.hostcomponents.impl com.atlassian.plugin.schema.spi com.atlassian.plugin.web.baseconditions com.atlassian.plugin.web.conditions com.atlassian.plugin.web.descriptors com.atlassian.plugin.web.impl com.atlassian.plugin.web.model com.atlassian.plugin.web.renderer com.atlassian.plugin.webresource com.atlassian.plugin.webresource.analytics com.atlassian.plugin.webresource.analytics.events com.atlassian.plugin.webresource.assembler com.atlassian.plugin.webresource.assembler.html com.atlassian.plugin.webresource.bigpipe com.atlassian.plugin.webresource.cdn com.atlassian.plugin.webresource.cdn.mapper com.atlassian.plugin.webresource.condition com.atlassian.plugin.webresource.data com.atlassian.plugin.webresource.event com.atlassian.plugin.webresource.filter.rewrite com.atlassian.plugin.webresource.graph com.atlassian.plugin.webresource.impl com.atlassian.plugin.webresource.impl.annotators com.atlassian.plugin.webresource.impl.config com.atlassian.plugin.webresource.impl.discovery com.atlassian.plugin.webresource.impl.helpers com.atlassian.plugin.webresource.impl.helpers.data com.atlassian.plugin.webresource.impl.helpers.url com.atlassian.plugin.webresource.impl.http com.atlassian.plugin.webresource.impl.snapshot com.atlassian.plugin.webresource.impl.snapshot.resource com.atlassian.plugin.webresource.impl.snapshot.resource.strategy.contentprovider com.atlassian.plugin.webresource.impl.snapshot.resource.strategy.contenttype com.atlassian.plugin.webresource.impl.snapshot.resource.strategy.path com.atlassian.plugin.webresource.impl.snapshot.resource.strategy.stream com.atlassian.plugin.webresource.impl.support com.atlassian.plugin.webresource.impl.support.factory com.atlassian.plugin.webresource.impl.support.http com.atlassian.plugin.webresource.legacy com.atlassian.plugin.webresource.models com.atlassian.plugin.webresource.prebake com.atlassian.plugin.webresource.servlet com.atlassian.plugin.webresource.transformer com.atlassian.plugin.webresource.transformer.instance com.atlassian.plugin.webresource.url com.atlassian.plugin.webresource.util com.atlassian.plugins.authentication.api.util com.atlassian.plugins.client.resource com.atlassian.plugins.license.entity com.atlassian.plugins.license.exception com.atlassian.plugins.license.model com.atlassian.plugins.license.service com.atlassian.plugins.rest.common com.atlassian.plugins.rest.common.error.jersey com.atlassian.plugins.rest.common.error.jersey.constants com.atlassian.plugins.rest.common.expand com.atlassian.plugins.rest.common.expand.entity com.atlassian.plugins.rest.common.expand.interceptor com.atlassian.plugins.rest.common.expand.parameter com.atlassian.plugins.rest.common.expand.resolver com.atlassian.plugins.rest.common.feature com.atlassian.plugins.rest.common.feature.jersey com.atlassian.plugins.rest.common.filter com.atlassian.plugins.rest.common.interceptor com.atlassian.plugins.rest.common.json com.atlassian.plugins.rest.common.multipart com.atlassian.plugins.rest.common.multipart.fileupload com.atlassian.plugins.rest.common.multipart.jersey com.atlassian.plugins.rest.common.sal.websudo com.atlassian.plugins.rest.common.security com.atlassian.plugins.rest.common.security.descriptor com.atlassian.plugins.rest.common.security.jersey com.atlassian.plugins.rest.common.template com.atlassian.plugins.rest.common.transaction com.atlassian.plugins.rest.common.util com.atlassian.plugins.rest.common.validation com.atlassian.plugins.rest.common.version com.atlassian.plugins.rest.module com.atlassian.plugins.rest.module.servlet com.atlassian.plugins.shortcuts.api com.atlassian.rest.annotation com.atlassian.sal.core.auth com.atlassian.sal.core.component com.atlassian.sal.core.csrf com.atlassian.sal.core.executor com.atlassian.sal.core.features com.atlassian.sal.core.lifecycle com.atlassian.sal.core.message com.atlassian.sal.core.net com.atlassian.sal.core.permission com.atlassian.sal.core.pluginsettings com.atlassian.sal.core.rdbms com.atlassian.sal.core.scheduling com.atlassian.sal.core.search com.atlassian.sal.core.search.parameter com.atlassian.sal.core.search.query com.atlassian.sal.core.transaction com.atlassian.sal.core.upgrade com.atlassian.sal.core.usersettings com.atlassian.sal.core.util com.atlassian.sal.core.websudo com.atlassian.sal.core.xsrf com.atlassian.sal.spi com.atlassian.scheduler.caesium.cron com.atlassian.scheduler.caesium.cron.parser com.atlassian.scheduler.caesium.cron.rule com.atlassian.scheduler.caesium.cron.rule.field com.atlassian.scheduler.caesium.impl com.atlassian.scheduler.caesium.migration com.atlassian.scheduler.caesium.spi com.atlassian.secrets com.atlassian.secrets.store.algorithm com.atlassian.secrets.store.algorithm.paramters com.atlassian.secrets.store.algorithm.serialization com.atlassian.secrets.store.aws com.atlassian.secrets.store.base64 com.atlassian.secrets.store.vault com.atlassian.secrets.store.vault.auth com.atlassian.secrets.store.vault.auth.kubernetes com.atlassian.secrets.store.vault.auth.token com.atlassian.secrets.tomcat.cipher com.atlassian.secrets.tomcat.protocol com.atlassian.secrets.tomcat.utils com.atlassian.security.java8.serialfilter com.atlassian.security.xml.libs com.atlassian.stash.internal.markup com.atlassian.stash.plugin.velocity com.atlassian.tenancy.api com.atlassian.tenancy.api.event com.atlassian.tenancy.api.helper com.atlassian.theme.internal com.atlassian.theme.internal.api com.atlassian.theme.internal.api.request com.atlassian.theme.internal.api.user com.atlassian.theme.internal.request com.atlassian.troubleshooting.api com.atlassian.troubleshooting.api.healthcheck com.atlassian.troubleshooting.api.healthcheck.exception com.atlassian.troubleshooting.api.supportzip com.atlassian.uri com.atlassian.util.concurrent com.atlassian.util.concurrent.atomic com.atlassian.util.contentcache.internal com.atlassian.util.contentcache.internal.util com.atlassian.util.integration com.atlassian.util.profiling com.atlassian.util.profiling.filters com.atlassian.util.profiling.micrometer com.atlassian.util.profiling.micrometer.analytics com.atlassian.util.profiling.micrometer.analytics.events com.atlassian.util.profiling.micrometer.util com.atlassian.util.profiling.object com.atlassian.util.profiling.strategy com.atlassian.util.profiling.strategy.impl com.atlassian.webhooks.external com.atlassian.webhooks.migration com.atlassian.webresource.api.prebake com.atlassian.zdu.internal.api com.atlassian.zdu.rest.dto com.atlassion.jwt com.fasterxml.jackson.dataformat.yaml com.fasterxml.jackson.dataformat.yaml.snakeyaml.error com.fasterxml.jackson.dataformat.yaml.util com.fasterxml.jackson.datatype.jdk8 com.fasterxml.jackson.datatype.jsr310 com.fasterxml.jackson.datatype.jsr310.deser com.fasterxml.jackson.datatype.jsr310.deser.key com.fasterxml.jackson.datatype.jsr310.ser com.fasterxml.jackson.datatype.jsr310.ser.key com.fasterxml.jackson.datatype.jsr310.util com.fasterxml.jackson.jaxrs.annotation com.fasterxml.jackson.jaxrs.base com.fasterxml.jackson.jaxrs.base.nocontent com.fasterxml.jackson.jaxrs.cfg com.fasterxml.jackson.jaxrs.json com.fasterxml.jackson.jaxrs.json.annotation com.fasterxml.jackson.jaxrs.util com.fasterxml.jackson.module.jaxb com.fasterxml.jackson.module.jaxb.deser com.fasterxml.jackson.module.jaxb.ser com.fasterxml.jackson.module.paramnames com.github.fge com.github.fge.jackson com.github.fge.jackson.jsonpointer com.github.fge.jsonschema com.github.fge.jsonschema.cfg com.github.fge.jsonschema.core com.github.fge.jsonschema.core.exceptions com.github.fge.jsonschema.core.keyword.syntax com.github.fge.jsonschema.core.keyword.syntax.checkers com.github.fge.jsonschema.core.keyword.syntax.checkers.common com.github.fge.jsonschema.core.keyword.syntax.checkers.draftv3 com.github.fge.jsonschema.core.keyword.syntax.checkers.draftv4 com.github.fge.jsonschema.core.keyword.syntax.checkers.helpers com.github.fge.jsonschema.core.keyword.syntax.checkers.hyperschema com.github.fge.jsonschema.core.keyword.syntax.dictionaries com.github.fge.jsonschema.core.load com.github.fge.jsonschema.core.load.configuration com.github.fge.jsonschema.core.load.download com.github.fge.jsonschema.core.load.uri com.github.fge.jsonschema.core.messages com.github.fge.jsonschema.core.processing com.github.fge.jsonschema.core.ref com.github.fge.jsonschema.core.report com.github.fge.jsonschema.core.tree com.github.fge.jsonschema.core.tree.key com.github.fge.jsonschema.core.util com.github.fge.jsonschema.core.util.equivalence com.github.fge.jsonschema.examples com.github.fge.jsonschema.examples.split com.github.fge.jsonschema.exceptions com.github.fge.jsonschema.format com.github.fge.jsonschema.format.common com.github.fge.jsonschema.format.draftv3 com.github.fge.jsonschema.format.extra com.github.fge.jsonschema.format.helpers com.github.fge.jsonschema.keyword.digest com.github.fge.jsonschema.keyword.digest.common com.github.fge.jsonschema.keyword.digest.draftv3 com.github.fge.jsonschema.keyword.digest.draftv4 com.github.fge.jsonschema.keyword.digest.helpers com.github.fge.jsonschema.keyword.validator com.github.fge.jsonschema.keyword.validator.common com.github.fge.jsonschema.keyword.validator.draftv3 com.github.fge.jsonschema.keyword.validator.draftv4 com.github.fge.jsonschema.keyword.validator.helpers com.github.fge.jsonschema.library com.github.fge.jsonschema.library.digest com.github.fge.jsonschema.library.format com.github.fge.jsonschema.library.validator com.github.fge.jsonschema.main com.github.fge.jsonschema.main.cli com.github.fge.jsonschema.messages com.github.fge.jsonschema.processors.build com.github.fge.jsonschema.processors.data com.github.fge.jsonschema.processors.digest com.github.fge.jsonschema.processors.format com.github.fge.jsonschema.processors.syntax com.github.fge.jsonschema.processors.validation com.github.fge.jsonschema.validator com.github.fge.msgsimple com.github.fge.msgsimple.bundle com.github.fge.msgsimple.load com.github.fge.msgsimple.locale com.github.fge.msgsimple.provider com.github.fge.msgsimple.source com.github.fge.uritemplate com.github.fge.uritemplate.expression com.github.fge.uritemplate.parse com.github.fge.uritemplate.render com.github.fge.uritemplate.vars com.github.fge.uritemplate.vars.specs com.github.fge.uritemplate.vars.values com.google.common.annotations com.google.common.base com.google.common.base.internal com.google.common.cache com.google.common.collect com.google.common.escape com.google.common.eventbus com.google.common.graph com.google.common.hash com.google.common.html com.google.common.io com.google.common.math com.google.common.net com.google.common.primitives com.google.common.reflect com.google.common.util.concurrent com.google.common.util.concurrent.internal com.google.common.xml com.google.gson com.google.gson.annotations com.google.gson.internal com.google.gson.internal.bind com.google.gson.internal.bind.util com.google.gson.internal.reflect com.google.gson.internal.sql com.google.gson.reflect com.google.gson.stream com.google.protobuf com.opensymphony.module.sitemesh.util com.opensymphony.sitemesh com.opensymphony.sitemesh.compatability com.opensymphony.sitemesh.webapp com.opensymphony.sitemesh.webapp.decorator com.rometools.rome.feed com.rometools.rome.feed.atom com.rometools.rome.io com.sun.jersey.api com.sun.jersey.api.client com.sun.jersey.api.client.async com.sun.jersey.api.client.config com.sun.jersey.api.client.filter com.sun.jersey.api.container com.sun.jersey.api.container.filter com.sun.jersey.api.container.httpserver com.sun.jersey.api.core com.sun.jersey.api.core.servlet com.sun.jersey.api.json com.sun.jersey.api.model com.sun.jersey.api.provider.jaxb com.sun.jersey.api.representation com.sun.jersey.api.uri com.sun.jersey.api.view com.sun.jersey.api.wadl.config com.sun.jersey.client.impl com.sun.jersey.client.impl.async com.sun.jersey.client.proxy com.sun.jersey.client.urlconnection com.sun.jersey.core.header com.sun.jersey.core.header.reader com.sun.jersey.core.impl.provider.entity com.sun.jersey.core.impl.provider.header com.sun.jersey.core.impl.provider.xml com.sun.jersey.core.osgi com.sun.jersey.core.provider com.sun.jersey.core.provider.jaxb com.sun.jersey.core.reflection com.sun.jersey.core.spi.component com.sun.jersey.core.spi.component.ioc com.sun.jersey.core.spi.factory com.sun.jersey.core.spi.scanning com.sun.jersey.core.spi.scanning.uri com.sun.jersey.core.util com.sun.jersey.impl com.sun.jersey.json.impl com.sun.jersey.json.impl.provider.entity com.sun.jersey.json.impl.reader com.sun.jersey.json.impl.writer com.sun.jersey.localization com.sun.jersey.server.impl com.sun.jersey.server.impl.application com.sun.jersey.server.impl.cdi com.sun.jersey.server.impl.component com.sun.jersey.server.impl.container com.sun.jersey.server.impl.container.filter com.sun.jersey.server.impl.container.httpserver com.sun.jersey.server.impl.container.servlet com.sun.jersey.server.impl.ejb com.sun.jersey.server.impl.inject com.sun.jersey.server.impl.managedbeans com.sun.jersey.server.impl.model com.sun.jersey.server.impl.model.method com.sun.jersey.server.impl.model.method.dispatch com.sun.jersey.server.impl.model.parameter com.sun.jersey.server.impl.model.parameter.multivalued com.sun.jersey.server.impl.modelapi.annotation com.sun.jersey.server.impl.modelapi.validation com.sun.jersey.server.impl.monitoring com.sun.jersey.server.impl.provider com.sun.jersey.server.impl.resource com.sun.jersey.server.impl.template com.sun.jersey.server.impl.uri com.sun.jersey.server.impl.uri.rules com.sun.jersey.server.impl.uri.rules.automata com.sun.jersey.server.impl.wadl com.sun.jersey.server.probes com.sun.jersey.server.spi.component com.sun.jersey.server.wadl com.sun.jersey.server.wadl.generators com.sun.jersey.server.wadl.generators.resourcedoc com.sun.jersey.server.wadl.generators.resourcedoc.model com.sun.jersey.server.wadl.generators.resourcedoc.xhtml com.sun.jersey.spi com.sun.jersey.spi.container com.sun.jersey.spi.container.servlet com.sun.jersey.spi.dispatch com.sun.jersey.spi.inject com.sun.jersey.spi.monitoring com.sun.jersey.spi.resource com.sun.jersey.spi.scanning com.sun.jersey.spi.scanning.servlet com.sun.jersey.spi.service com.sun.jersey.spi.template com.sun.jersey.spi.uri.rules i18n io.grpc io.grpc.protobuf io.grpc.stub io.swagger.v3.oas.annotations io.swagger.v3.oas.annotations.callbacks io.swagger.v3.oas.annotations.enums io.swagger.v3.oas.annotations.extensions io.swagger.v3.oas.annotations.headers io.swagger.v3.oas.annotations.info io.swagger.v3.oas.annotations.links io.swagger.v3.oas.annotations.media io.swagger.v3.oas.annotations.parameters io.swagger.v3.oas.annotations.responses io.swagger.v3.oas.annotations.security io.swagger.v3.oas.annotations.servers io.swagger.v3.oas.annotations.tags java.rmi.activation java.security.acl javax.activity javax.cache javax.cache.annotation javax.cache.configuration javax.cache.event javax.cache.expiry javax.cache.integration javax.cache.management javax.cache.processor javax.cache.spi javax.el javax.jws javax.jws.soap javax.persistence javax.persistence.criteria javax.persistence.metamodel javax.persistence.spi javax.rmi javax.rmi.CORBA javax.security.auth.message javax.security.auth.message.callback javax.security.auth.message.config javax.security.auth.message.module javax.transaction javax.xml.soap javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax.xml.ws.spi.http javax.xml.ws.wsaddressing net.jcip.annotations net.minidev.json net.minidev.json.annotate net.minidev.json.parser net.minidev.json.reader net.minidev.json.writer net.oauth net.oauth.signature net.oauth.signature.pem net.sf.cglib.asm net.sf.cglib.beans net.sf.cglib.core net.sf.cglib.core.internal net.sf.cglib.proxy net.sf.cglib.reflect net.sf.cglib.transform net.sf.cglib.transform.impl net.sf.cglib.util org.apache.commons.collections4 org.apache.commons.collections4.bag org.apache.commons.collections4.bidimap org.apache.commons.collections4.collection org.apache.commons.collections4.comparators org.apache.commons.collections4.functors org.apache.commons.collections4.iterators org.apache.commons.collections4.keyvalue org.apache.commons.collections4.list org.apache.commons.collections4.map org.apache.commons.collections4.multimap org.apache.commons.collections4.multiset org.apache.commons.collections4.properties org.apache.commons.collections4.queue org.apache.commons.collections4.sequence org.apache.commons.collections4.set org.apache.commons.collections4.splitmap org.apache.commons.collections4.trie org.apache.commons.collections4.trie.analyzer org.apache.commons.compress org.apache.commons.compress.archivers org.apache.commons.compress.archivers.ar org.apache.commons.compress.archivers.arj org.apache.commons.compress.archivers.cpio org.apache.commons.compress.archivers.dump org.apache.commons.compress.archivers.examples org.apache.commons.compress.archivers.jar org.apache.commons.compress.archivers.sevenz org.apache.commons.compress.archivers.tar org.apache.commons.compress.archivers.zip org.apache.commons.compress.changes org.apache.commons.compress.compressors org.apache.commons.compress.compressors.brotli org.apache.commons.compress.compressors.bzip2 org.apache.commons.compress.compressors.deflate org.apache.commons.compress.compressors.deflate64 org.apache.commons.compress.compressors.gzip org.apache.commons.compress.compressors.lz4 org.apache.commons.compress.compressors.lz77support org.apache.commons.compress.compressors.lzma org.apache.commons.compress.compressors.lzw org.apache.commons.compress.compressors.pack200 org.apache.commons.compress.compressors.snappy org.apache.commons.compress.compressors.xz org.apache.commons.compress.compressors.z org.apache.commons.compress.compressors.zstandard org.apache.commons.compress.harmony org.apache.commons.compress.harmony.archive.internal.nls org.apache.commons.compress.harmony.pack200 org.apache.commons.compress.harmony.unpack200 org.apache.commons.compress.harmony.unpack200.bytecode org.apache.commons.compress.harmony.unpack200.bytecode.forms org.apache.commons.compress.java.util.jar org.apache.commons.compress.parallel org.apache.commons.compress.utils org.apache.commons.digester org.apache.commons.digester.annotations org.apache.commons.digester.annotations.handlers org.apache.commons.digester.annotations.internal org.apache.commons.digester.annotations.providers org.apache.commons.digester.annotations.reflect org.apache.commons.digester.annotations.rules org.apache.commons.digester.annotations.spi org.apache.commons.digester.annotations.utils org.apache.commons.digester.parser org.apache.commons.digester.plugins org.apache.commons.digester.plugins.strategies org.apache.commons.digester.substitution org.apache.commons.digester.xmlrules org.apache.commons.lang org.apache.commons.lang.builder org.apache.commons.lang.enum org.apache.commons.lang.enums org.apache.commons.lang.exception org.apache.commons.lang.math org.apache.commons.lang.mutable org.apache.commons.lang.reflect org.apache.commons.lang.text org.apache.commons.lang.time org.apache.commons.pool org.apache.commons.pool.impl org.apache.commons.pool2 org.apache.commons.pool2.impl org.apache.commons.pool2.proxy org.apache.commons.validator org.apache.commons.validator.javascript org.apache.commons.validator.resources org.apache.commons.validator.routines org.apache.commons.validator.routines.checkdigit org.apache.commons.validator.util org.apache.felix.webconsole org.apache.http.impl.nio org.apache.http.impl.nio.bootstrap org.apache.http.impl.nio.client org.apache.http.impl.nio.codecs org.apache.http.impl.nio.conn org.apache.http.impl.nio.pool org.apache.http.impl.nio.reactor org.apache.http.impl.nio.ssl org.apache.http.nio org.apache.http.nio.client org.apache.http.nio.client.methods org.apache.http.nio.client.util org.apache.http.nio.conn org.apache.http.nio.conn.scheme org.apache.http.nio.conn.ssl org.apache.http.nio.entity org.apache.http.nio.params org.apache.http.nio.pool org.apache.http.nio.protocol org.apache.http.nio.reactor org.apache.http.nio.reactor.ssl org.apache.http.nio.util org.apache.log4j.helpers org.apache.log4j.spi org.apache.log4j.xml org.apache.logging.log4j.internal org.apache.logging.log4j.simple org.apache.logging.log4j.spi org.apache.logging.log4j.status org.apache.xml.serialize org.apache.xmlcommons org.codehaus.jackson org.codehaus.jackson.annotate org.codehaus.jackson.format org.codehaus.jackson.impl org.codehaus.jackson.io org.codehaus.jackson.jaxrs org.codehaus.jackson.map org.codehaus.jackson.map.annotate org.codehaus.jackson.map.deser org.codehaus.jackson.map.deser.impl org.codehaus.jackson.map.deser.std org.codehaus.jackson.map.exc org.codehaus.jackson.map.ext org.codehaus.jackson.map.introspect org.codehaus.jackson.map.jsontype org.codehaus.jackson.map.jsontype.impl org.codehaus.jackson.map.module org.codehaus.jackson.map.ser org.codehaus.jackson.map.ser.impl org.codehaus.jackson.map.ser.std org.codehaus.jackson.map.type org.codehaus.jackson.map.util org.codehaus.jackson.node org.codehaus.jackson.schema org.codehaus.jackson.sym org.codehaus.jackson.type org.codehaus.jackson.util org.codehaus.jackson.xc org.dom4j org.dom4j.bean org.dom4j.datatype org.dom4j.dom org.dom4j.dtd org.dom4j.io org.dom4j.jaxb org.dom4j.rule org.dom4j.rule.pattern org.dom4j.swing org.dom4j.tree org.dom4j.util org.dom4j.xpath org.dom4j.xpp org.hibernate.validator org.hibernate.validator.cfg org.hibernate.validator.cfg.context org.hibernate.validator.cfg.defs org.hibernate.validator.cfg.defs.br org.hibernate.validator.cfg.defs.pl org.hibernate.validator.cfg.defs.ru org.hibernate.validator.constraints org.hibernate.validator.constraints.br org.hibernate.validator.constraints.pl org.hibernate.validator.constraints.ru org.hibernate.validator.constraints.time org.hibernate.validator.constraintvalidation org.hibernate.validator.constraintvalidators org.hibernate.validator.engine org.hibernate.validator.group org.hibernate.validator.internal org.hibernate.validator.internal.cfg.context org.hibernate.validator.internal.constraintvalidators org.hibernate.validator.internal.constraintvalidators.bv org.hibernate.validator.internal.constraintvalidators.bv.money org.hibernate.validator.internal.constraintvalidators.bv.notempty org.hibernate.validator.internal.constraintvalidators.bv.number org.hibernate.validator.internal.constraintvalidators.bv.number.bound org.hibernate.validator.internal.constraintvalidators.bv.number.bound.decimal org.hibernate.validator.internal.constraintvalidators.bv.number.sign org.hibernate.validator.internal.constraintvalidators.bv.size org.hibernate.validator.internal.constraintvalidators.bv.time org.hibernate.validator.internal.constraintvalidators.bv.time.future org.hibernate.validator.internal.constraintvalidators.bv.time.futureorpresent org.hibernate.validator.internal.constraintvalidators.bv.time.past org.hibernate.validator.internal.constraintvalidators.bv.time.pastorpresent org.hibernate.validator.internal.constraintvalidators.hv org.hibernate.validator.internal.constraintvalidators.hv.br org.hibernate.validator.internal.constraintvalidators.hv.pl org.hibernate.validator.internal.constraintvalidators.hv.ru org.hibernate.validator.internal.constraintvalidators.hv.time org.hibernate.validator.internal.engine org.hibernate.validator.internal.engine.constraintdefinition org.hibernate.validator.internal.engine.constraintvalidation org.hibernate.validator.internal.engine.groups org.hibernate.validator.internal.engine.messageinterpolation org.hibernate.validator.internal.engine.messageinterpolation.el org.hibernate.validator.internal.engine.messageinterpolation.parser org.hibernate.validator.internal.engine.messageinterpolation.util org.hibernate.validator.internal.engine.path org.hibernate.validator.internal.engine.resolver org.hibernate.validator.internal.engine.scripting org.hibernate.validator.internal.engine.validationcontext org.hibernate.validator.internal.engine.valuecontext org.hibernate.validator.internal.engine.valueextraction org.hibernate.validator.internal.metadata org.hibernate.validator.internal.metadata.aggregated org.hibernate.validator.internal.metadata.aggregated.rule org.hibernate.validator.internal.metadata.core org.hibernate.validator.internal.metadata.descriptor org.hibernate.validator.internal.metadata.facets org.hibernate.validator.internal.metadata.location org.hibernate.validator.internal.metadata.provider org.hibernate.validator.internal.metadata.raw org.hibernate.validator.internal.properties org.hibernate.validator.internal.properties.javabean org.hibernate.validator.internal.util org.hibernate.validator.internal.util.annotation org.hibernate.validator.internal.util.classhierarchy org.hibernate.validator.internal.util.logging org.hibernate.validator.internal.util.logging.formatter org.hibernate.validator.internal.util.privilegedactions org.hibernate.validator.internal.util.stereotypes org.hibernate.validator.internal.xml org.hibernate.validator.internal.xml.config org.hibernate.validator.internal.xml.mapping org.hibernate.validator.messageinterpolation org.hibernate.validator.metadata org.hibernate.validator.parameternameprovider org.hibernate.validator.path org.hibernate.validator.resourceloading org.hibernate.validator.spi.cfg org.hibernate.validator.spi.group org.hibernate.validator.spi.messageinterpolation org.hibernate.validator.spi.nodenameprovider org.hibernate.validator.spi.properties org.hibernate.validator.spi.resourceloading org.hibernate.validator.spi.scripting org.jboss.logging org.jdom org.jdom.adapters org.jdom.filter org.jdom.input org.jdom.output org.jdom.transform org.jdom.xpath org.jdom2 org.jdom2.adapters org.jdom2.filter org.jdom2.input org.jdom2.input.sax org.jdom2.input.stax org.jdom2.internal org.jdom2.located org.jdom2.output org.jdom2.output.support org.jdom2.transform org.jdom2.util org.jdom2.xpath org.jdom2.xpath.jaxen org.jdom2.xpath.util org.joda.time org.joda.time.base org.joda.time.chrono org.joda.time.convert org.joda.time.field org.joda.time.format org.joda.time.tz org.joda.time.tz.data org.joda.time.tz.data.Africa org.joda.time.tz.data.America org.joda.time.tz.data.America.Argentina org.joda.time.tz.data.America.Indiana org.joda.time.tz.data.America.Kentucky org.joda.time.tz.data.America.North_Dakota org.joda.time.tz.data.Antarctica org.joda.time.tz.data.Arctic org.joda.time.tz.data.Asia org.joda.time.tz.data.Atlantic org.joda.time.tz.data.Australia org.joda.time.tz.data.Etc org.joda.time.tz.data.Europe org.joda.time.tz.data.Indian org.joda.time.tz.data.Pacific org.omg.CORBA org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage org.omg.CORBA.TypeCodePackage org.omg.CORBA.portable org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable org.omg.CosNaming org.omg.CosNaming.NamingContextExtPackage org.omg.CosNaming.NamingContextPackage org.omg.Dynamic org.omg.DynamicAny org.omg.DynamicAny.DynAnyFactoryPackage org.omg.DynamicAny.DynAnyPackage org.omg.IOP org.omg.IOP.CodecFactoryPackage org.omg.IOP.CodecPackage org.omg.Messaging org.omg.PortableInterceptor org.omg.PortableInterceptor.ORBInitInfoPackage org.omg.PortableServer org.omg.PortableServer.CurrentPackage org.omg.PortableServer.POAManagerPackage org.omg.PortableServer.POAPackage org.omg.PortableServer.ServantLocatorPackage org.omg.PortableServer.portable org.omg.SendingContext org.omg.stub.java.rmi org.omg.stub.javax.management.remote.rmi org.osgi.service.obr org.osgi.util org.slf4j.bridge org.slf4j.impl org.springframework.osgi.context
RefRestrictionService.match
return type changeChanged the return type of RefRestrictionService.match
to Map<RefChange, List<RefRestriction>>
to avoid the use of a Guava Multimap
.
Bitbucket 9.0 and Platform 7 have changed to use the jakarta
versions of many javax
dependencies. In all cases,
this involves no changes the packages/classes within. If your addon import
s Bitbucket's dependencies, it will no
longer be able to use the javax
version of a dependency. For example, javax.servlet:javax.servlet-api
has been
replaced with jakarta.servlet:jakarta.servlet-api
.
Platform 7 and Bitbucket 9.0 have rearchitected the Java APIs used to implement REST resources, which we’re calling REST v2.
Note that this isn't a change to Bitbucket's REST API, which remains largely unchanged. These changes will only impact app developers. The underlying libraries, Jackson and Jersey, have been upgraded to the latest versions. REST v2 also makes use of JAX-RS 2.
As part of this change, the following projects have been replaced with REST v2 versions:
bitbucket-rest-api
has been replaced by bitbucket-rest-v2-api
.bitbucket-rest-spi
has been replaced by bitbucket-rest-v2-spi
.bitbucket-rest-model
has been removed with most classes moved to bitbucket-rest-v2-api
.The REST v2 upgrade guide contains advice and examples on how to upgrade your app to use REST v2. There is further, Bitbucket-specific advice on Bitbucket REST v2 migration for app developers page.
Bitbucket 9.0 introduces a new feature to ensure an administrator's identity prior to them performing administrator
actions. Secure Administrator Sessions, also called Web Sudo, creates an extra layer of protection by prompting admins
to re-enter their passwords to access administrative functions. By default, web sudo is enabled but it can be disabled
setting the feature.websudo
property in the Bitbucket home. Additionally, administrator actions can be restricted to
users from specific IP addresses by setting websudo.allowlist.patterns
in the Bitbucket home.
Apps can opt into web sudo by adding the
@com.atlassian.sal.api.websudo.WebSudoRequired
annotation to REST APIs that require admin access. Similarly,
servlets that require admin access should import
com.atlassian.sal.api.websudo.WebSudoManager
and call the method enforceWebSudoProtection
prior to allowing the user
access to administrator actions.
For further information see: Adding WebSudo support to your app.
Bitbucket 9.0 introduces changes to the way authentication and authorization are checked in endpoints defined by servlets, and with similar changes for servlet filters, since it is possible to build an endpoint in a servlet filter.
Historically Bitbucket implements authentication and authorization checks in the service layer, and it still does. However as of Bitbucket 9.0 additional tools are provided to allow coarse grained authorization checks to be performed in the presentation later.
The following annotations are available:
@SystemAdminOnly
- User requires SYS_ADMIN permission.@AdminOnly
- User requires ADMIN permission.@LicensedOnly
- User must be authenticated.@AnonymousSiteAccess
- If public access feature is enabled, then this is equivalent to @UnrestrictedAccess
, if
disabled then this is equivalent to @LicensedOnly
.@UnrestrictedAccess
- Anonymous access allowed.These annotations exist in the com.atlassian.annotations.security
Java package, and are provided by the following
Maven dependency:
1 2<dependency> <groupId>com.atlassian.annotations</groupId> <artifactId>atlassian-annotations</artifactId> <scope>provided</scope> </dependency>
By default, if no annotation is present then @LicensedOnly
is assumed. This means, for servlets, a request by an
unauthenticated user will fail with status 401. And for servlet filters, the filter will not be called for requests
without authentication.
If one of the above security annotations are added ensure com.atlassian.annotations.security
is OSGi imported by the
app. If an app fails to import the package then the annotation scanner will silently fail to see the annotation
and the default authentication/authorization requirement (i.e. @LicensedOnly
) will be applied.
For further information see: Prepare your Data Center app to comply with secure endpoint defaults
GET /rest/mirroring/latest/progress
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers/{upstreamId}/progress
GET /rest/mirroring/latest/farmNodes
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers/{upstreamId}/farmNodes
GET /rest/mirroring/latest/upstreamServer
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers
and /rest/mirroring/latest/upstreamServers/{upstreamId}
GET /rest/mirroring/latest/mirrorRepos/{externalRepositoryId}
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers/{upstreamId}/repos/{upstreamRepoId}
GET /rest/mirroring/latest/syncSettings
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers/{upstreamId}/settings
PUT /rest/mirroring/latest/syncSettings
as a replacement for now deprecated PUT /rest/mirroring/latest/upstreamServers/{upstreamId}/settings
GET /rest/mirroring/latest/syncSettings/mode
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers/{upstreamId}/settings/mode
PUT /rest/mirroring/latest/syncSettings/mode
as a replacement for now deprecated PUT /rest/mirroring/latest/upstreamServers/{upstreamId}/settings/mode
GET /rest/mirroring/latest/syncSettings/projects
as a replacement for now deprecated GET /rest/mirroring/latest/upstreamServers/{upstreamId}/settings/projects
POST /rest/mirroring/latest/syncSettings/projects
as a replacement for now deprecated POST /rest/mirroring/latest/upstreamServers/{upstreamId}/settings/projects
POST /rest/mirroring/latest/syncSettings/projects/{projectId}
as a replacement for now deprecated POST /rest/mirroring/latest/upstreamServers/{upstreamId}/settings/projects/{projectId}
DELETE /rest/mirroring/latest/syncSettings/projects/{projectId}
as a replacement for now deprecated DELETE /rest/mirroring/latest/upstreamServers/{upstreamId}/settings/projects/{projectId}
GET /rest/mirroring/latest/supportInfo/projects/{projectKey}/repos/{repoSlug}/repoSyncStatus
PUT /rest/mirroring/latest/mirrorServers/{mirrorId}
The request and response body don't contain the following fields and passing them in the request doesn't do anything:
addonDescriptorUri
- This was only present in the request body and is no more applicable as the mirrors are not
installed as add-on on upstream.productType
- This always used to be "Bitbucket".POST /rest/mirroring/latest/requests
The request and response body don't contain the following fields and passing them in the request doesn't do anything:
addonDescriptorUri
- This is no more applicable as the mirrors are not installed as add-on on upstream.productType
- This always used to be "Bitbucket".GET /rest/mirroring/latest/requests
The response body doesn't contain the following fields anymore:
addonDescriptorUri
- This is no more applicable as the mirrors are not installed as add-on on upstream.productType
- This always used to be "Bitbucket".GET /rest/mirroring/latest/requests/{mirroringRequestId}
The response body doesn't contain the following fields anymore:
addonDescriptorUri
- This is no more applicable as the mirrors are not installed as add-on on upstream.productType
- This always used to be "Bitbucket".GET /rest/mirroring/latest/mirrorServers
The response body doesn't contain the following field anymore:
productType
- This always used to be "Bitbucket".GET /rest/mirroring/latest/mirrorServers/{mirrorId}
The response body doesn't contain the following field anymore:
productType
- This always used to be "Bitbucket".GET /mirroring/latest/repos/{repoId}/mirrors
now supports additional optional boolean query parameter preAuthorized
.
This parameter is false
if not provided and setting it to true
will return the URLs which are pointing to upstream
and don't contain JWT. Starting Bitbucket 10.0, this will be the default behavior and the preAuthorized
query
parameter will be removed.POST /rest/mirroring/latest/authenticate
The field requiredPermissionsOnly
is removed from the request body and passing it won't do anything. For non-SSH
credentials, the response will contain only the highest global permission along with the highest repository
permission (if repository ID is also provided in the request).GET /rest/mirroring/latest/mirrorServers/{mirrorId}/token
as the upstream no longer provides a JWT to
authenticate with mirrors due to a security vulnerability. Prior to 9.0.0
, this end-point was used on the Mirrors
setting admin screen for generating a JWT to authorize with mirrors.GET /rest/mirroring/latest/mirrorServers/{mirrorId}/webPanels/config
as this is no more applicable due to UI
changes on Mirror settings page.Tasks are now managed using Comments with BLOCKER
severity. The following deprecated REST endpoints have been removed:
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/tasks
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/blocker-comments
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/tasks/count
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/blocker-comments?count=true
POST /rest/api/latest/tasks
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments
,
passing the attribute severity
set to BLOCKER
.GET /rest/api/latest/tasks/{taskId}
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
PUT /rest/api/latest/tasks/{taskId}
PUT /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
,
to resolve a task, pass the attribute state
set to RESOLVED
.DELETE /rest/api/latest/tasks/{taskId}
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
The following mirroring REST endpoints have been removed:
This operation is now automatically triggered by a background task.
POST /rest/mirroring/latest/upstreamServers/{upstreamId}/repos/{upstreamRepoId}/synchronization
POST /rest/mirroring/latest/upstreamServers/{upstreamId}/synchronization
Starting from 4.6.0
, mirrors no longer specify a disabled lifecycle callback in their addon descriptor.
Prior to 4.6.0
, this was the callback method that was called when the mirroring atlassian-connect add-on has been
disabled in the upstream server identified by upstreamId.
POST rest/mirroring/latest/upstreamServers/{upstreamId}/addon/disabled
Starting from 4.6.0
, mirrors no longer specify an enabled lifecycle callback in their addon descriptor.
Prior to 4.6.0
, this was the callback method that was called when the mirroring atlassian-connect add-on has been
enabled in the upstream server identified by upstreamId.
POST /rest/mirroring/latest/upstreamServers/{upstreamId}/addon/enabled
Web Fragments on the source view page have been converted to Client Side Extensions (CSEs). Apps that want to extend the source view page should move the React-based CSE framework. You can read more about using CSEs here. We also have an example app that uses CSEs.
The following plugin points have been migrated to CSEs:
bitbucket.file-content.source.toolbar.primary
bitbucket.file-content.source.toolbar.secondary
bitbucket.file-content.diff.toolbar.primary
bitbucket.file-content.diff.toolbar.secondary
bitbucket.file-content.diff-view.options
bitbucket.branch.layout.actions.dropdown
(source view only)Client Side Extensions documentation
jQuery has been updated to version 3.6.0 and jQuery Migrate to version 3.4.1. If your app uses jQuery, we recommend upgrading to version 3.6.0 for best performance and compatibility going forward.
Important things to note about the frontend API changes:
Added optional draft
parameter for the following endpoint to filter pull requests by draft status
GET /rest/api/latest/projects/{{projectKey}}/repos/{{repositorySlug}}/pull-requests
isDraft
in PullRequest
visit
in PullRequestActivityVisitor
for PullRequestDraftStatusUpdatedActivity
isDraft
in PullRequestCreateRequest
draft
in PullRequestCreateRequest
PullRequestDraftStatusUpdatedActivity
isDraft
in PullRequestImportRequest
draft
in PullRequestImportRequest
DRAFT_STATUS
in PullRequestOrder
enumisDraft
in PullRequestSearchRequest
draft
in PullRequestSearchRequest
PullRequestUpdatedEvent
which takes previousDraft
as a parameterPullRequestUpdatedEvent
isDraft
in PullRequestUpdatedEvent
isPreviousDraft
in PullRequestUpdatedEvent
isDraft
in PullRequestUpdateRequest
draft
in PullRequestUpdateRequest
isDraft
in RestPullRequest
hasDraft
in RestPullRequest
RestPullRequestDraftStatusUpdatedActivity
Update and retrieve the configuration for signed system commits
POST /rest/api/latest/system-signing/configuration
GET /rest/api/latest/system-signing/configuration
Updated order
query parameter for the following endpoint to accept a list of dimensions to order by
GET /rest/api/latest/dashboard/pull-requests
getOrders
in PullRequestSearchRequest
which returns a list to order search results ingetOrder
in PullRequestSearchRequest
orders
in PullRequestSearchRequest
Returns the best common ancestor between two commits
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/merge-base?otherCommitId={otherCommitId}
Return the best common ancestor between the latest commits of the source and target branches of the pull request
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/merge-base?otherCommitId={otherCommitId}
getMergeBase
in PullRequestService
Create, update, delete and get auto-merge settings at project level
PUT /rest/api/latest/projects/{projectKey}/settings/auto-merge
DELETE /rest/api/latest/projects/{projectKey}/settings/auto-merge
GET /rest/api/latest/projects/{projectKey}/settings/auto-merge
Create, update, delete and get auto-merge settings at repository level
PUT /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/settings/auto-merge
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/settings/auto-merge
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/settings/auto-merge
Request the system to try merging a pull request when auto-merge is already requested for it
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/auto-merge
Cancel a request for auto-merging the pull request
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/auto-merge
Getting details of an auto-merge request for the pull request
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/auto-merge
Added autoMerge
field in the request body for the following endpoint to submit auto-merge request for the pull request
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/merge
Added autoMerge
field in the response body for the following endpoint when the action
field is equal to MERGED
. The new field indicates if the merged activity denotes an auto-merge action by the system or a manual merge by the user
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities
AUTO_MERGE_CANCELLED
and AUTO_MERGE_REQUESTED
in PullRequestAction
enum.PULL_REQUEST_AUTO_MERGE
in StandardFeature
enum.SimplePullRequestMergeHookRequest.Builder
class that accepts additional parameter abortOnFirstVeto
.PullRequestMergedEvent
.isAutoMerge
in PullRequestMergedEvent
.isAutoMerge
in PullRequestMergedActivity
.isAutoMerge
in RestPullRequestMergedActivity
.AutoMergeCancelledReason
.PullRequestAutoMergeCancelledActivity
.visit
method in PullRequestActivityVisitor
which takes a parameter of type PullRequestAutoMergeCancelledActivity
.PullRequestAutoMergeCancelledEvent
PullRequestAutoMergeRequestedEvent
AutoMergeNotRequestedException
AutoMergeSettingNotEnabledException
AutoMergeRequest
AutoMergeService
.AutoMergeSettings
.AutoMergeProcessingResult
.AutoMergeSettingsCreateRequest
.AutoMergeSettingsService
.rest-model
module:
RestAutoMergeProcessingResult
RestAutoMergeProjectSettingsRequest
RestAutoMergeRequest
RestAutoMergeRestrictedSettings
RestAutoMergeSettings
RestAutoMergeSettingsRequest
isAutoMerge
in RestPullRequestMergeRequest
in rest-model
module.getContext
method in PullRequestMergeRequest
and context
method in PullRequestMergeRequest.Builder
.getContext
method in PullRequestMergeCommandParameters
and context
method in PullRequestMergeCommandParameters.Builder
.getContext
in MergeRequest
SPI.getContext
in RestPullRequestMergeRequest
in rest-model
module.git-api
module:
GitEmptyRebaseBeforeMergeException
GitEmptySquashException
GitMergeStrategyException
GitRebaseBeforeMergeConflictedException
GitUnsupportedMergeStrategyException
REVERT
in the ScmFeature
enum.revert
in ScmExtendedCommandFactory
.revert
in PluginExtendedCommandFactory
SPI to allow SCMs to provide their own implementation
for reverting commits.RevertCommandParameters
to describe a request to revert the commit.com.atlassian.bitbucket.ssh.util.KeyUtils
provided by the module ssh-api
, for removal in 9.0. Use third-party
alternatives for operations on SSH public keys.@EncodedPublicKey
and the associated com.atlassian.bitbucket.ssh.validation.PublicKeyValidator
for removal
in 9.0. Use alternate ways of validating encoded SSH public keys.isDisabled
method in FeatureManager
.Get active user directories, you can specify an optional query param to include inactive directories
GET /rest/api/latest/admin/user-directories?includeInactive=<includeInactive>
Commit message templates are an extension on the existing Merge Strategies
If no value is provided for the template when posting to existing resources no change is made to the template. Sending an empty object for the template will remove the template.
New Java API exists to create and remove templates, but not to get rendered templates.
Create a new restriction in the given project
POST /rest/api/latest/projects/{projectKey}/settings-restriction
Delete a restriction in the given project with the provided namespace, feature key and optional component key
DELETE /rest/api/latest/projects/{projectKey}/settings-restriction?namespace=<namespace>&featureKey=<featureKey>&componentKey=<componentKey>
Gets a restriction in the given project with the provided namespace, feature key and optional component key if one is present
GET /rest/api/latest/projects/{projectKey}/settings-restriction?namespace=<namespace>&featureKey=<featureKey>&componentKey=<componentKey>
Gets all restriction in the given project with the provided namespace and feature key if any are present
GET /rest/api/latest/projects/{projectKey}/settings-restriction/all?namespace=<namespace>&featureKey=<featureKey>
Starting 8.10, automatic branch merging feature is known as cascading merge. Following classes are deprecated for removal in 9.0:
AutomaticMergeEvent
is replaced by a new class CascadingMergeEvent
AutomaticMergeStoppedEvent
is replaced by a new class CascadingMergeStoppedEvent
AutomaticMergeStopReason
is replaced by a new class CascadingMergeStopReason
AutomaticMergeSucceededEvent
is replaced by a new class CascadingMergeSucceededEvent
Added threadResolved
body parameter to the following endpoints:
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
PUT /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
DELETE /rest/api/latest/admin/git/mesh/nodes/{id}
Prior to 8.8, webhooks only existed at the repository level. In 8.8, we've added support for project level webhooks.
New REST endpoints:
Create a webhook in the given project
POST /rest/api/latest/projects/{projectKey}/webhooks
Find webhooks in the given project
GET /rest/api/latest/projects/{projectKey}/webhooks
Get a webhook in the given project
GET /rest/api/latest/projects/{projectKey}/webhooks/{webhookId}
Delete a webhook in the given project
DELETE /rest/api/latest/projects/{projectKey}/webhooks/{webhookId}
Update an existing webhook in the given project
PUT /rest/api/latest/projects/{projectKey}/webhooks/{webhookId}
Get the latest invocations for a specific webhook in the given project
GET /rest/api/latest/projects/{projectKey}/webhooks/{webhookId}/latest
Get the statistics for a specific webhook in the given project
GET /rest/api/latest/projects/{projectKey}/webhooks/{webhookId}/statistics
Get the statistics summary for a specific webhook in the given project
GET /rest/api/latest/projects/{projectKey}/webhooks/{webhookId}/statistics/summary
Test connectivity to a specific endpoint
POST /rest/api/latest/projects/{projectKey}/webhooks/test?url=<url>&?sslVerificationRequired=<true|false>
Search webhooks in the given repository and parent project by scope.
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/webhooks/search?scopeType=<scopeType>
RestSshKey
class updated to contain created date, expiry days and last authenticated fields
Global settings that enforce the maximum expiry of SSH keys and restrictions on SSH key types
GET /rest/ssh/latest/admin
PUT /rest/ssh/latest/admin
Get supported SSH key algorithms and lengths
GET /rest/ssh/latest/admin/supported-key-types
Get SSH key by ID
GET /rest/ssh/latest/keys/{id}
Inspect the contents of a mirror farm's ref changes queue
GET /rest/mirroring/latest/supportInfo/refChangesQueue
Gets the number of items within the ref changes queue
GET /rest/mirroring/latest/supportInfo/refChangesQueue/count
Gets the sync status of repositories on the mirror node
GET /rest/mirroring/latest/supportInfo/repoSyncStatus
Search direct and implied permissions of users and groups
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/permissions/search
GET /rest/api/latest/projects/{projectKey}/permissions/search
Project level allow list rules
GET /rest/api/latest/projects/{projectKey}/secret-scanning/allowlist
POST /rest/api/latest/projects/{projectKey}/secret-scanning/allowlist
GET /rest/api/latest/projects/{projectKey}/secret-scanning/allowlist/{id}
DELETE /rest/api/latest/projects/{projectKey}/secret-scanning/allowlist/{id}
PUT /rest/api/latest/projects/{projectKey}/secret-scanning/allowlist/{id}
Repository level allow list rules
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/allowlist
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/allowlist
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/allowlist/{id}
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/allowlist/{id}
PUT /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/allowlist/{id}
Project level rules
GET /rest/api/latest/projects/{projectKey}/secret-scanning/rules
POST /rest/api/latest/projects/{projectKey}/secret-scanning/rules
GET /rest/api/latest/projects/{projectKey}/secret-scanning/rules/{id}
DELETE /rest/api/latest/projects/{projectKey}/secret-scanning/rules/{id}
PUT /rest/api/latest/projects/{projectKey}/secret-scanning/rules/{id}
Repository level rules
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/rules
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/rules
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/rules/{id}
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/rules/{id}
PUT /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/secret-scanning/rules/{id}
Revoke all permissions for the specified project/repository for the given groups and users
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/permissions
DELETE /rest/api/latest/projects/{projectKey}/permissions
Global level rules
GET /rest/api/latest/secret-scanning/rules
POST /rest/api/latest/secret-scanning/rules
GET /rest/api/latest/secret-scanning/rules/{id}
DELETE /rest/api/latest/secret-scanning/rules/{id}
PUT /rest/api/latest/secret-scanning/rules/{id}
REPO_CREATE
has been added as a project permission to give users more autonomy to create repositories and maintain
them. Users can now create, import and fork repositories into a project they are assigned REPO_CREATE
in. When a user
creates, imports or forks a repository they will automatically be added as an admin to that repository. The user will
also have REPO_WRITE
access to the project.
Microsoft Windows has always been an inferior platform for hosting Bitbucket Server when compared to Linux. Disk I/O and process forking performance is poor on Windows and this impacts Bitbucket’s performance. As a result, we have never supported Data Center licenses or licenses with more than 500 users on Windows.
Bitbucket 8.0 will not support hosting on the Windows operating system. For app developers running Windows, we recommend running Bitbucket from within Windows Subsystem for Linux or in a virtual machine.
Interfaces, classes, and methods in the Bitbucket Data Center Java API that were previously marked as deprecated have been removed.
Plugins that use any of these interfaces (which would have generated deprecation warnings when built against Bitbucket Server 7.x) generally won’t build with Bitbucket Data Center 8.x
Precompiled plugins that used any of the removed interfaces will fail to install or run in Bitbucket Data Center 8.x,
typically with java.lang.NoSuchMethodError
or java.lang.ClassNotFoundExceptions
.
ScmCommandBuilder
changes and the GitWorkTree
API
Bitbucket 8.0 includes changes to support Bitbucket Mesh, which uses replication to provide scaling and high
availability. Bitbucket needs to have strict control over updates to repositories to ensure all replicas are updated in
sync. Several commands that could earlier be invoked using ScmCommandBuilder
can no longer be used directly starting in
8.0. The following is a comprehensive list of such commands:
1 2"add", "apply", "bisect", "checkout", "checkout-index", "citoool", "clean", "clone", "commit", "commit-tree", "config", "credential", "credential-cache", "credential-store", "daemon", "fast-import", "filter-branch", "gc", "gui", "imap-send", "init", "init-db", "instaweb", "ls-files", "merge-file", "merge-index", "merge-one-file", "merge-tree", "prune", "read-tree", "reflog", "reset", "restore", "rm", "stash", "send-email", "show-index", "sparse-checkout", "status", "submodule", "switch", "web--browse", "update-index", "worktree", "write-tree"
Some commands in the above list will be restricted in Bitbucket 8.0 to prevent changes that could break the replication
mechanism. Other commands only make sense in non-bare repositories and will only be supported in the context of a
GitWorkTree
. The GitWorkTree
API was introduced in Bitbucket 7.14 and there is an introduction to the API in the
Bitbucket 7.14 API changelog.
Removed API and REST resources related to Task
s
In Bitbucket 7.2, Task
s were replaced with “blocker comments” in order to support top-level tasks and tasks with rich
text. Details on affected classes and migration guidance can be found in the Bitbucket 7.2 API changelog.
Change in return type of RepositoryDeletedEvent.getForkIds
and RepositoryDeletionRequestedEvent.getForkIds
Both these classes returned an Iterable<Integer>
and have been changed to return Set<Integer>
for ease of use.
Replaced Bitbucket auditing API with cross-product auditing API
Bitbucket 7.0 introduced a new cross-product audit log
that captured more events and more information about each event. It also introduced a new API for auditing events
(and a new REST API for retrieving auditing events from the database) and deprecated the Bitbucket’s old auditing API
(mostly contained within the com.atlassian.bitbucket.audit package
).
Bitbucket 8.0 removes the old audit API which includes classes in com.atlassian.bitbucket.audit
and a number of other
classes that converted between the old system and the new system. NOTE: Bitbucket 8.0 also removes the
old legacy REST API
for getting audit events by project or repository.
Details on the cross-product auditing log and a short introduction to the new API can be found in this post to the Atlassian developer community.
Removed API details
The following classes and interfaces have been removed in Bitbucket Server 8.0. Please see the linked Javadoc for Bitbucket Server 7.21 for informing regarding deprecation and possible alternative classes and interfaces.
AvatarDeletedException
BuildStatus
BuildStatusService
BuildStatusSetEvent
BuildStatusSetRequest
BuildSummary
RestDetailedRepository
RestDetailedRepositoryPage
TaskEvent
and subclasses (TaskCreatedEvent
, TaskDeletedEvent
, TaskUpdatedEvent
)In addition, deprecated methods in existing classes and interfaces across the whole Bitbucket Data Center API have been removed:
NavBuilder
methods related to the Jira commit checker and the old way of building attachments.Consult the Bitbucket Server 7.21 Java API Reference for details on the removed methods, and their alternatives in Bitbucket Server 8.x.
In Bitbucket 7.0, we redesigned the pull request experience to bring a slew of new features and better performance.
Bitbucket 8.0 introduces the same experience to other areas in Bitbucket where we show code diffs: the commit diff page, the create pull request page and the branch compare page. As a result, plugin points on these pages will no longer render. Frontend plugin points on these pages will need to change, similar to what was required for the original pull request update.
CI tools can now create build statuses with UNKNOWN
and CANCELLED
state.
Consumers of build statuses should also update their integrations to handle these possible states on a build status.
There is currently a bug in the Web Resource Manager that means some plugin internationalization may not work as expected. The workaround to this bug is documented in this post in our developer forums.
SearchInformationService#getElasticsearchVersion()
has been deprecated and will be removed in Bitbucket Server 8.0.
SearchInformationService#getDistribution()
and SearchInformationService#getVersion()
should be used instead.
RepositoryBuildStatusDeletedEvent
which is raised when the build status is removed.lastUpdated
in RepositoryBuildStatusSetRequest
to fix the problem of showing stale build status.
A CI tool can set this field while sending build-status using
builds REST endpoint.New REST endpoints:
GET /rest/access-tokens/1.0/projects/{projectKey}
and GET /rest/access-tokens/1.0/projects/{projectKey}/repos/{repositorySlug}
get HTTP tokens for the provided project or repository
PUT /rest/access-tokens/1.0/projects/{projectKey}
and PUT /rest/access-tokens/1.0/projects/{projectKey}/repos/{repositorySlug}
create an HTTP token for the provided project or repository
GET, DELETE, POST /rest/access-tokens/1.0/projects/{projectKey}/{tokenId}
and GET, DELETE, POST /rest/access-tokens/1.0/projects/{projectKey}/repos/{repositorySlug}
get, delete or modify the provided token
New REST endpoints:
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/deployments?key=<key>&environmentKey=<environmentKey>&deploymentSequenceNumber=<deploymentSequenceNumber>
get the deployment matching the specified repositorySlug
, key
, environmentKey
and deploymentSequenceNumber
.
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/deployments?key=<key>&environmentKey=<environmentKey>&deploymentSequenceNumber=<deploymentSequenceNumber>
delete the deployment matching the specified repositorySlug
, key
, environmentKey
and deploymentSequenceNumber
.
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/deployments
create or update a deployment.
New Java and REST API methods have been added to configure Branch deletion on merge
for Project and Repository.
DeleteAfterMergeConfigurationService.deleteConfiguration(scope)
, DeleteAfterMergeConfigurationService.getConfiguration(scope)
and DeleteAfterMergeConfigurationService.setConfiguration(DeleteAfterMergeConfigurationRequest)
introduce the ability
to configure Branch deletion on merge
feature.
New REST endpoints:
PROJECT
GET /rest/branch-utils/latest/projects/{key}/delete-after-merge
get if the feature is enabled for a Project.
POST /rest/branch-utils/latest/projects/{key}/delete-after-merge
enable or disable the feature for a Project.
REPOSITORY
GET /rest/branch-utils/latest/projects/{key}/repos/{slug}/delete-after-merge
get if the configuration is enabled for a Repository.
POST /rest/branch-utils/latest/projects/{key}/repos/{slug}/delete-after-merge
enable or disable the configuration for a Repository.
DELETE /rest/branch-utils/latest/projects/{key}/repos/{slug}/delete-after-merge
delete the configuration for a Repository.
Bitbucket 7.14 uses a different mechanism for repository size calculation to make it more efficient. Following changes are done in the Bitbucket API/SPI:
repositorySize
is added to ScmCommandFactory
.ScmService#getSize
is deprecated and will be removed in 8.0. This method is replaced by
ScmCommandFactory#repositorySize
.RepositorySize
that represents the size of a repository.RepositorySizeCommandParameters
that represents the additional command parameters provided to the
ScmCommandFactory#repositorySize
method.repositorySize
is added to PluginCommandFactory
SPI with a default implementation that returns aSimpleCommand
returning repository size as null
. The default implementation will be removed in 8.0.Scm#getSize
is deprecated and will be removed in 8.0. This method is replaced by
PluginCommandFactory#repositorySize
.repositorySize
is added to GitCommandFactory
to return a GitCommand
for calculating the repository
size.GitCountObjectsBuilder
for building git count-objects
command.countObjects
is added to GitScmCommandBuilder
for creating an instance of GitCountObjectsBuilder
.RepositoryService#getSize
uses the new command returned by ScmCommandFactory#repositorySize
. A cached value is
returned which may not be updated immediately after the content changes. Also, this method uses different
configuration for timeout and returns 0 when the underlying command times out.Bitbucket 7.14 introduces a new API for dealing with worktree paths in repositories. A worktree is a temporary location on disk associated with a change operation and is deleted when the operation completes or when the expiry time defined for the worktree has been reached. These are different from Git worktrees which allow managing multiple generally long-lived additional working copies for a single repository.
Historically, apps that wanted to create new (merge) commits could use the free-form API exposed by ScmCommandBuilder
to
manually set up a worktree using git clone --no-checkout
. That will no longer be possible from 8.0 because Bitbucket Server
is moving to a model where Git repositories can be moved to external nodes.
As a result, it will no longer be possible to run free-form git commands to (efficiently) set up local worktrees. To
address this, Bitbucket 7.14 introduces a new GitWorkTree
API to allow apps to set up and work with worktrees in a way that
will work with repositories hosted on external nodes. The newly introduced GitWorkTreeBuilder
can be used to create
a GitWorkTree
for a given Repository
, perform operations in the context of the GitWorkTree
, and optionally publish
the changes back to the Repository
.
App developers are strongly encouraged to investigate whether their existing apps can be built with the new API as soon as possible and provide feedback. The initial API in Bitbucket Server 7.14 should cover many use cases, but it may have gaps that would be blockers for some apps. If app developers wait until Bitbucket Server 8.0 forces them to adopt the new API, they may find it’s not possible.
In addition, since Bitbucket Mesh will use replication to provide scaling and high availability, Bitbucket needs
to have strict control over updates to repositories to ensure all replicas are updated in sync. Several commands that
could earlier be invoked using ScmCommandBuilder
can no longer be used directly starting 8.0. Following is a
comprehensive list of such commands:
1 2"add", "apply", "bisect", "checkout", "checkout-index", "citoool", "clean", "clone", "commit", "commit-tree", "config", "credential", "credential-cache", "credential-store", "daemon", "fast-import", "filter-branch", "gc", "gui", "imap-send", "init", "init-db", "instaweb", "ls-files", "merge-file", "merge-index", "merge-one-file", "merge-tree", "prune", "read-tree", "reflog", "reset", "restore", "rm", "stash", "send-email", "show-index", "sparse-checkout", "status", "submodule", "switch", "web--browse", "update-index", "worktree", "write-tree"
Some of the commands in the above list will be restricted in Bitbucket 8.0 to prevent changes that could break the
replication mechanism. Other commands only make sense in non-bare repositories and will only be supported in the
context of a GitWorkTree
.
The basic workflow for creating a set of changes in a repository using the new GitWorkTree
API looks like the following:
Create a new GitWorkTreeBuilder
for the repository using GitWorkTreeBuilderFactory#builder(Repository)
.
Create a new temporary GitWorkTree
using the GitWorkTreeBuilder
. This worktree is automatically deleted after the
operation completes.
Specify the commit the worktree should check out using GitWorkTreeBuilder#commit(String)
.
Use GitWorkTreeBuilder#execute(GitWorkTreeCallback)
to execute the desired change operation in the context of the
temporary GitWorkTree
.
Add or edit files using GitWorkTree#write(String, Charset, IoConsumer)
, or use GitWorkTree#builder()
to manipulate
the index directly (though Git operations such as rm
and mv
) and/or to create new commits.
Use GitWorkTree#publish(PublishGitWorkTreeParameters)
to publish the HEAD
commit of the worktree to the repository,
using PublishGitWorkTreeParameters.Builder#branch(String, String)
to specify the target branch to update. A single
branch can be updated at a time, but it is possible to call GitWorkTree#publish(PublishGitWorkTreeParameters)
more than once to update different branches in the lifetime of a single GitWorkTree
.
For a more complete example, refer to this page.
In Bitbucket 7.14, the following new REST end-points are added for build-status:
GET /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/builds
DELETE /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/builds
The following REST end-points are deprecated:
GET /rest/api/1.0/build-status/latest/commits/{commitId}
POST /rest/api/1.0/build-status/latest/commits/{commitId}
In Bitbucket 7.13, Bitbucket Data Center introduces a way to create reviewer groups to add to pull requests. Reviewer groups can be created on a project and repository context by users with admin permissions.
New REST endpoints:
PROJECT
GET /rest/api/latest/projects/{key}/settings/reviewer-groups/
get all the reviewer groups of a Project.
GET /rest/api/latest/projects/{key}/settings/reviewer-groups/{id}
get a specific reviewer group given the specified ID.
POST /rest/api/latest/projects/{key}/settings/reviewer-groups/
create a reviewer group.
PUT /rest/api/latest/projects/{key}/settings/reviewer-groups/{id}
update the name and users of a reviewer group given a specified ID.
DELETE /rest/api/latest/projects/{key}/settings/reviewer-groups/{id}
delete the reviewer group given a specified ID.
REPOSITORY
GET /rest/api/latest/projects/{key}/repos/{slug}/settings/reviewer-groups/
get all the reviewer groups of a Repository.
GET /rest/api/latest/projects/{key}/repos/{slug}/settings/reviewer-groups/{id}
get a specific reviewer group given a specified ID.
GET /rest/api/latest/projects/{key}/repos/{slug}/settings/reviewer-groups/{id}/users
retrieve the users of a reviewer group. This does not return all the users of the group, only the users who have REPO_READ
permission for the specified repository.
POST /rest/api/latest/projects/{key}/repos/{slug}/settings/reviewer-groups/
create a reviewer group.
PUT /rest/api/latest/projects/{key}/repos/{slug}/settings/reviewer-groups/{id}
update the name and users of a reviewer group with a specified ID.
DELETE /rest/api/latest/projects/{key}/repos/{slug}/settings/reviewer-groups/{id}
delete the reviewer group given a specified ID.
The new ReviewerGroupService
introduces this ability to create, edit and delete reviewer groups.
Starting with Bitbucket 7.9, Bitbucket Data Center can be upgraded without downtime through a rolling upgrade. The administrative actions required to orchestrate a rolling upgrade (such as enable upgrade mode or approve upgrade) can be triggered via the Bitbucket REST API. For more details see the Rolling Upgrades REST API documentation.
In Bitbucket 7.9 we have updated the Bitbucket API, ClusterNode
, to expose getBuildVersion
. When called, the semantic
Bitbucket version running on the queried node is returned. Additionally, when calling the /rest/api/1.0/admin/cluster
REST endpoint, each node
result will include its version.
The enum type,ApplicationState
, was updated as part of Bitbucket 7.9 to include the value UNKNOWN
. This new enum
value is used to indicate that the application is in an indeterminate state.
A new SPI ShutdownHook
allows components to respond to system shutdown as soon as it is initiated. When the Bitbucket
JVM is terminated gracefully (and not killed immediately), components are shutdown in different phases over a period of
time. Components implementing ShutdownHook
are the first ones to be notified by invoking
ShutdownHook.startShutdown
, which give them opportunity to prepare for shutdown e.g. drain tasks, flush data,
"finalize" the state before shutdown. ShutdownHook
receives Duration
as parameter in ShutdownHook.startShutdown
,
which is the longest system will wait for it to finish its processing before shutdown process continues without it and
eventually terminates it.
A new SPI com.atlassian.bitbucket.build.server.PluginBuildServerProvider
allows plugins to act as a proxy between
Bitbucket Server and a CI tool. Implement this class, and register it in the plugin's atlassian-plugin.xml
file using:
1 2<build-server-provider key="my-ci-tool-provider" class="com.my.plugin.MyBuildServerProvider"/>
This will allow Bitbucket Server to call on the plugin when a build status is created using
com.atlassian.bitbucket.build.server.PluginBuildServerProvider.getBuildServer
in order to record the build status as being associated with that plugin.
Build statuses that have a build server will be able to:
com.atlassian.bitbucket.build.server.BuildStatusEnricher
com.atlassian.bitbucket.build.server.operations.PluginBuildServerClient.getAuthorizationUrl
com.atlassian.bitbucket.build.server.operations.PluginBuildServerClient.getOperations
and
com.atlassian.bitbucket.build.server.operations.PluginBuildServerClient.performAction
Starting in Bitbucket 7.7 responding to comments became more interesting and fun. We have added the ability to add emoji to any comment. Any "like" that is already present on a comment will be migrated and represented as a "thumbsup" emoji instead now.
CommentReactionService.addReaction
, CommentReactionService.removeReaction
, and CommentReactionService.getReaction
introduce this ability to add a reaction, remove a reaction, and check whether a user has reacted to a comment with a
specific reaction respectively.
New REST endpoints:
PUT /rest/api/latest/projects/{key}/repos/{slug}/pull-requests/{id}/comments/{comment_id}/reactions/{emoticon}
can be used to add a specific emoji to a specific comment. The request header should have
Content-Type: application/json
.
DELETE /rest/api/latest/projects/{key}/repos/{slug}/pull-requests/{id}/comments/{comment_id}/reactions/{emoticon}
can be used to remove a specific emoji to a specific comment.
NOTE: CommentLikeService
has been marked as deprecated as of Bitbucket Server 7.7 and is due to be removed in
Bitbucket Server 8.0. It has been replaced by the new CommentReactionService
. App developers who rely on the
CommentLikeService
are strongly encouraged to update their code to use the new CommentReactionService
directly as
soon as possible to add reactions, remove reactions and get reactions.
In Bitbucket Server 7.7 there is a new pull request review workflow that allows an authenticated user with permission to interact with a pull request to add draft comments only visible to that authenticated user. Once the authenticated user is finished with their pull request review they can batch publish their draft comments so that other users can see the comments.
New events that are included in this change are:
PullRequestReviewCommentAddedEvent
- which is raised when a draft comment is added to a pull request.PullRequestReviewCommentRepliedEvent
- which is raised when a draft reply comment is added to a pull request.PullRequestReviewDiscardedEvent
- which is raised when a pull request review with draft comments is discarded.PullRequestReviewFinishedEvent
- which is raised when a pull request review with draft comments is completed.The CommentState
enum has also been modified to include PENDING
.
PullRequestService.discardReview
, PullRequestService.finishReview
, and PullRequestService.getReviewThreads
are new
methods that discard a pull request review for the authenticated user, complete and finish a pull request review
for the authenticated user, and get all the comment threads with draft comments for a pull request respectively.
CommentDao.deleteBatch
has been added which deletes a batch of comments.
CommentThreadDao.searchPending
has been added to get all the CommentThread
s that have at least one draft comment.
There are three restrictions though on this method where the Commentable
supplied matches the comment, the author ID
matches, and the comment state is PENDING
.
The new REST endpoints:
DELETE /rest/api/latest/projects/{key}/repos/{slug}/pull-requests/{id}/review
can be used to delete/discard a pull request review for the authenticated user.
GET /rest/api/latest/projects/{key}/repos/{slug}/pull-requests/{id}/review
can be used to get all the comment threads which have draft comments for a pull request review for the authenticated user.
PUT /rest/api/latest/projects/{key}/repos/{slug}/pull-requests/{id}/review
can be used to finish a pull request review and publish all the draft comments for the authenticated user so that other users can see the comments.
In Bitbucket Server 7.6 we updated the Client-side Extensions to the latest
version 1.2.0. This version introduces the PageExtensions
extension type that can be used to create custom pages in Bitbucket product by plugin developers.
Refer to the creating page guide and the Client-side Extensions changelog for more information about the changes.
Starting in Bitbucket Server 7.4, hosting requests (think git clone
, git fetch
, git push
, etc.) made via HTTP now use
ServletRequest.startAsync
to perform request processing using a separate ExecutorService
, rather than one of Tomcat's container threads. This frees
up container threads to serve REST and UI requests instead, to ensure heavy hosting load doesn't impact UI responsiveness.
It also allows use of Servlet 3.1's ReadListener
and WriteListener
to perform non-blocking I/O while handling requests,
which allows Bitbucket Server to significantly reduce the number of threads used when running git http-backend
.
If your app registers any Servlet Filter
s, or provides any HttpScmRequest
s, this new async functionality may impact
your app.
Apps can register their own Servlet Filter
s to be included in the FilterChain
by using the <servlet-filter/>
module
descriptor. In Bitbucket Server 7.4, Filter
s registered this way are assumed to support async, and must explicitly opt
out by adding <async-supported>false</async-supported>
like this:
1 2<servlet-filter name="My Filter" key="my-filter" class="com.atlassian.example.web.MyFilter" location="before-login"> <async-supported>false</async-supported> <!-- If you want your filter applied to the ASYNC dispatcher, you must specify that explicitly in your dispatcher list here. e.g. ASYNC,FORWARD,REQUEST. Including the ASYNC dispatcher on a filter that doesn't support async makes no sense. --> <dispatcher>REQUEST</dispatcher> <url-pattern>*</url-pattern> </servlet-filter>
Explicitly disabling async support on your filter will prevent Bitbucket Server from using Servlet 3.1 non-blocking I/O for
HTTP hosting, because ReadListener
and WriteListener
can only be used on async requests. This will negatively impact
scalability, as performing hosting operations using blocking I/O requires extra threads and imposes more overhead. Setting
<async-supported>false</async-supported>
is intended to be a workaround to allow app-provided Filter
s to block async
handling while they're updated to handle async requests.
Many Filter
s will work correctly for async requests without any changes:
1 2public class MyFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //If your filter applies logic here, it will generally work async without changes. //If your filter wraps the ServletRequest or ServletResponse, those wrappers may be //used on another thread if the request is processed asynchronously. Generally that //shouldn't matter, but it's something to be aware of. chain.doFilter(request, response); //If your filter applies logic here, it will likely require updates to work correctly. } //Other methods omitted for brevity. }
For Filter
implementations that have code after chain.doFilter
, for async requests the request will not be completed
when that code is reached. Such Filter
s need to be updated to check request.isAsyncStarted()
:
1 2@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); if (request.isAsyncStarted()) { //The request is running asynchronously. Register an AsyncListener to be notified when //the request completes. If the request has already completed (which, due to threading, //may be possible), the container will immediately call onComplete on the listener when //it's registered with the AsyncContext here. //You have to check isAsyncStarted() before calling getAsyncContext() or it may throw //an exception if the request is not async. request.getAsyncContext().addListener(new AsyncListener() { @Override public void onComplete(AsyncEvent event) { //At this point the async request has completed, so run any "after" logic. //You can get the "most wrapped" ServletRequest and ServletResponse from the //AsyncContext like this: AsyncContext context = event.getAsyncContext(); runAfter(context.getRequest(), context.getResponse()); //Or you can use the ones provided to doFilter, which were provided when the //AsyncListener is registered, if you passed them to addListener. If you use //addListener(AsyncListener) the "supplied" request/response will be null. //runAfter(event.getSuppliedRequest(), event.getSuppliedResponse()); } //There are other methods on the interface, but onComplete is generally what filters //that had processing after chain.doFilter care about. Note that onComplete will be //called even if onError or onTimeout are called; it will be called after them. }, request, response); //<- These will be the "supplied" request/response on AsyncEvent. } else { //The request was processed synchronously, so it's already complete. runAfter(request, response); } } private void runAfter(ServletRequest request, ServletResponse response) { //This is the logic that would have been after chain.doFilter }
HttpScmRequestHandler
s and HttpScmRequest
sA new isAsyncSupported()
property has been added to HttpScmRequest
. The default is false
, so, unlike Filter
s, app-provided
HttpScmRequest
implementations will not automatically start running async. After doing local testing, app developers can override
the default to indicate their HttpScmRequest
s support async.
Even if an HttpScmRequest
returns true
for isAsyncSupported()
, it cannot assume it will be run that way. If any app-provided
Filter
s block async, or if a system administrator has globally disabled async handling, HttpScmRequest
implementations will be
called synchronously. HttpScmRequest
s can check isAsyncStarted()
on the HttpServletRequest
to determine whether the request is
running synchronously or asynchronously.
HttpScmRequest
s do not need to use non-blocking handling for async requests. There's no requirement that they check
isAsyncStarted()
and have special handling for async. In general, existing blocking handling will work as-is whether a
request is run synchronously or asynchronously. The check simply allows HttpScmRequest
s the opportunity to use async
features like ReadListener
and WriteListener
if they choose.
1 2public class MyHttpScmRequestHandler implements HttpScmRequestHandler { @Nonnull @Override public Optional<HttpScmRequest> create(@Nonnull HttpServletRequest request, @Nonnull HttpServletResponse response) { //Don't check request.isAsyncStarted() here. The system doesn't start async processing until //it has verified an HttpScmRequest can be created, so it won't be async yet. return Optional.of(new MyHttpScmRequest(request, response)); } //Other methods omitted for brevity. } public class MyHttpScmRequest implements HttpScmRequest { private final HttpServletRequest request; private final HttpServletResponse response; public MyHttpScmRequest(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; } @Override public void handleRequest() throws IOException { //Inside handleRequest() it's safe to check isAsyncStarted(). If the request is going to be //processed asynchronously, it will have happened by now. if (request.isAsyncStarted()) { //The request is running asynchronously. That means non-blocking features like ReadListener //and WriteListener are available. } else { //Even though this implementation _supports_ async, either we're deployed in Bitbucket Server //7.3 or older, or something else has blocked the request from running asynchronously. } } //This override can be _present_ even if the app still supports Bitbucket Server 7.3 and older; older //versions simply will not check it, and will always process requests synchronously. //Note that, if you want to compile your app against an older version of the HttpScmRequest SPI to //ensure compatibility with pre-7.4 versions, you can still add this method to allow 7.4+ to run your //HttpScmRequest asynchronously; just omit the @Override so it will compile. @Override public boolean isAsyncSupported() { return true; } //Other methods omitted for brevity. }
In Bitbucket Server 7.4 there is a new REST endpoint that supports receiving significantly more build information from a build server. This new information is presented in various places on the product, for the 7.4 release this is most prominent as a builds tab. To receive rich build-status the CI tool needs to POST Build Status via the new REST endpoint to Bitbucket Server.
New REST endpoint:
POST /rest/api/latest/projects/{projectKey}/repos/{repositorySlug}/commits/{commitId}/builds
We recommend using this new endpoint as it provides a better experience for users with additional test summary and duration displayed in the UI.
System admins can now configure the permission level needed to delete a repository by setting a repository delete policy.
The permissions for setting a repository delete policy are SYS_ADMIN
, ADMIN
, PROJECT_ADMIN
and REPO_ADMIN
.
New REST endpoints:
PUT /rest/policies/latest/admin/repos/delete
GET /rest/policies/latest/admin/repos/delete
Changed REST endpoint:
POST /rest/api/1.0/admin/license
Returns a 400 status if the license is being changed from Server to DC, and there are Add-ons installed which will need license upgrades to DC licenses. If a parameter confirmWarning=true
is supplied the license will be applied anyway and a 200 status returned.Internationalization has been introduced into auditing. This has resulted in a number of changes in the Bitbucket API:
AuditCategory
are now i18n property keys instead of hard-coded English values@Auditable
annotation now has an action
field which can be used to explicitly specify an action (instead of
having it be the class name), and this the specified action can be an i18n property keycategory
field of @Auditable
can now be an i18n property key (the system will attempt to translate the
provided key, and will fallback to using it as a hard-coded English value if no property exists with that key); note
that all of the constants provided in AuditCategory
are valid i18n keysAdditionally, the auditing model has been extended to allow setting i18n keys in place of hard-coded English values:
AuditEvent.Builder
constructors which take hard-coded action and category fields have been deprecated
(AuditEvent.Builder(type)
can be used instead)AuditEvent.Builder
, actionI18nKey(..)
/categoryI18nKey(..)
replacing the now deprecated
action(..)
/category(..)
AuditType.fromI18nKe