Interface Scm
- All Known Implementing Classes:
- AbstractScm
In order for an SCM to be usable by the system, it must implement:
It may also implement the following to enable additional system functionality:- getBulkContentCommandFactory()
- getCompareCommandFactory()
- getExtendedCommandFactory()
- getMirrorCommandFactory()
- getPullRequestCommandFactory()
- getRefCommandFactory()
SCMs which support additional functionality, or have custom factory types, are encouraged to provide a sub- interface extending from this one exposing that functionality. For example:
     //Overrides the builder(Repository) method using a covariant return type to return a builder supporting both
     //type-safe and free-form commands, instead of ScmCommandBuilder
     public interface MyScmCommandBuilderFactory extends PluginCommandBuilderFactory {
         //See the documentation for PluginCommandBuilderFactory
     }
     //Overrides methods using covariant return types to return an enhanced CancelableCommands instead of
     //Commands
     public interface MyScmCommandFactory extends PluginCommandFactory {
         //See the documentation for PluginCommandFactory
     }
     //Overrides methods using covariant return types to return custom versions of the PluginCommandFactory,
     //PluginCommandBuilderFactory and PluginPullRequestCommandFactory interfaces
     public interface MyScm extends Scm {
         //Supports both free-form and type-safe builders
         @Nonnull
         @Override
         MyScmCommandBuilderFactory getCommandBuilderFactory();
         //Uses enhanced CancelableCommands
         @Nonnull
         @Override
         MyScmCommandFactory getCommandFactory();
         @Nonnull
         @Override
         MyScmPullRequestCommandFactory getPullRequestCommandFactory();
     }
 getCommandBuilderFactory() and getPullRequestCommandFactory() have had their
 annotations changed to @Nonnull, indicating that MyScm definitely supports both
 builders and pull requests. This allows other plugin developers to know the features supported by the custom SCM
 so they can leverage them fully.
 
 SCM plugins are encouraged to define a separate component for their Scm implementations, but they
 are required to define an scm entry or the SCM will not be detected by the system. The following
 example illustrates both directives:
 
     <!-- Note: These should be in the SCM provider's atlassian-plugin.xml -->
     <component key="myScm" class="com.example.DefaultMyScm" public="true">
         <interface>com.example.MyScm</interface>
     </component>
     <scm key="scm" class="bean:myScm"/>
 public="true" allows other plugins to import the component. This approach allows other plugin developers
 to import the SCM directly and leverage its enhanced functionality with a component-import directive:
 
     <!-- Note: This should be in the SCM consumer's atlassian-plugin.xml -->
     <component-import key="myScm" interface="com.example.MyScm"/>
 
 For SCMs which define a component for their Scm, it is strongly encouraged that they reference
 that component for their scm directive, as shown above. This ensures a single instance of the Scm is
 constructed for use by other plugins and by the system.
 
 Note: Implementors are strongly encouraged to extend from AbstractScm. This interface
 will change, over time, and any class implementing it directly will be broken by such changes. Extending
 from the abstract class will help prevent such breakages.
 
 Note: Implementations of this interface are required to be thread-safe. Implementations of related interfaces
 such as PluginCommandBuilderFactory, PluginCommandFactory and PluginPullRequestCommandFactory
 are not required to be thread-safe if distinct instances are returned for each call.
 
 Warning: If a component directive is defined but the scm directive does not reference it and
 instead defines class="com.example.MyScm", two instances will be created. The one created with the
 component directive may be imported by plugins (assuming it is public; otherwise, it may never be
 used anywhere!) and the one created with the scm directive will be used by the system.
- See Also:
- 
Method SummaryModifier and TypeMethodDescriptiondefault PluginBulkContentCommandFactoryRetrieves aPluginBulkContentCommandFactory, used to createcommandstailored for getting content from a repository in bulk.default PluginCommandBuilderFactoryRetrieves aPluginCommandBuilderFactory, used to createcommand buildersfor custom SCM commands.Retrieves aPluginCommandFactory, used to createcommandsfor performing standard SCM operations such as retrieving commits and viewing diffs.default PluginCompareCommandFactoryRetrieves aPluginCompareCommandFactory, used to createcommandstailored for comparing refs.default com.atlassian.bitbucket.repository.MinimalRefgetDefaultBranch(com.atlassian.bitbucket.repository.Repository repository) Retrieves the configured default branch for the specified repository.default PluginExtendedCommandFactoryRetrieves anoptional command factory, which enables additional system features for SCMs which implement its commands.Set<com.atlassian.bitbucket.scm.ScmFeature> Retrieves thefeaturesthat are supported by this SCM.getId()Retrieves a unique identifier for the SCM that is provided by the plugin.Retrieves aPluginIntegrityCheckCommandFactory, used to createcommandsthat perform integrity checks on SCMs.default PluginMergeStrategiesRetrieves a set ofmerge strategiessupported by the SCM.default PluginMirrorCommandFactoryRetrieves aPluginMirrorCommandFactory, used to createcommandstailored for mirroring repositories.getName()Retrieves a well-known name for the SCM that is provided by the plugin.default PluginPullRequestCommandFactoryRetrieves aPluginPullRequestCommandFactory, used to createcommandstailored for use supporting pull requests.default PluginRefCommandFactoryRetrieves aPluginRefCommandFactory, used to createcommandstailored for creatingbranchesandtags.Retrieves the currentstatusfor the SCM.booleanisEmpty(com.atlassian.bitbucket.repository.Repository repository) Retrieves a flag indicating whether the specifiedRepositoryis empty, from the perspective of the SCM implementation.
- 
Method Details- 
getBulkContentCommandFactoryRetrieves aPluginBulkContentCommandFactory, used to createcommandstailored for getting content from a repository in bulk.Implementation Note: This method is optional. SCMs which do not support bulk content retrieval may return null.- Returns:
- a command factory which will create commands operating on the specified repository, or nullif the SCM does not support bulk content retrieval
- Since:
- 4.2
- See Also:
 
- 
getCommandBuilderFactoryRetrieves aPluginCommandBuilderFactory, used to createcommand buildersfor custom SCM commands.Implementation Note: This method is optional. SCMs which do not support a ScmCommandBuildermay returnnull.- Returns:
- a command builder factory, or nullif the SCM does not support command builders
- See Also:
 
- 
getCommandFactoryRetrieves aPluginCommandFactory, used to createcommandsfor performing standard SCM operations such as retrieving commits and viewing diffs. The commands created by the returned factory are used to support normal system functionality; as a result, SCMs are required to provide an implementation.Implementation Note: This method is required and may not return null.- Returns:
- a command factory, providing access to required SCM functionality
- See Also:
 
- 
getCompareCommandFactoryRetrieves aPluginCompareCommandFactory, used to createcommandstailored for comparing refs.Implementation Note: This method is optional. SCMs which do not support comparing refs may return null.- Returns:
- a compare command factory, or nullif the SCM does not support it
- See Also:
 
- 
getDefaultBranch@Nonnull default com.atlassian.bitbucket.repository.MinimalRef getDefaultBranch(@Nonnull com.atlassian.bitbucket.repository.Repository repository) Retrieves the configured default branch for the specified repository.Each repository in an SCM is required to have a default branch. However, that branch is not actually required to exist within the repository. Regardless of whether the branch exists within the repository or not, this method should return the configured default. If the default branch exists, SCMs may optionally return a full Branchinstead of aMinimalRef.Implementors: The default implementation of this method will be removed in 9.0. SCMs are required to implement this accessor for themselves; they cannot rely on the default. - Parameters:
- repository- the repository to retrieve the configured default branch for
- Returns:
- the configured default branch, which may not exist
- Since:
- 7.5
- See Also:
 
- 
getExtendedCommandFactoryRetrieves anoptional command factory, which enables additional system features for SCMs which implement its commands. Each optional command is associated with anSCM feature, and SCMs are free to implement any subset of the factory's methods. If the SCM does not implement any optional features, the returned factory may benull. However, SCM implementors are encouraged to implement as many optional commands as they can.- Returns:
- a command factory providing optional, extended functionality for this SCM, or nullif the SCM does not support any optional commands
- Since:
- 4.6
 
- 
getFeaturesRetrieves thefeaturesthat are supported by this SCM.Since the system relies on optional features to provide some functionality, like branch compare and pull requests, it relies on this set to disable functionality that requires features the SCM doesn't provide. Similarly, plugin developers can use the returned features to control which optional features they try to use, rather than checking for nullor handlingUnsupportedOperationExceptions.- Returns:
- the set of optional features this SCM supports, which may be empty but never null
 
- 
getIntegrityCheckCommandFactoryRetrieves aPluginIntegrityCheckCommandFactory, used to createcommandsthat perform integrity checks on SCMs.- Returns:
- a integrity check command factory, or nullif the SCM does not support integrity checks.
- Since:
- 4.12
 
- 
getIdRetrieves a unique identifier for the SCM that is provided by the plugin.Identifiers should be unique to the SCM's type. Using the name of the SCM's binary is a good approach. For example, a plugin implementing support for git might return "git"as its identifier. This approach allows the system to detect when multiple plugins are installed which implement git support, potentially leading to unexpected behaviour from some repositories.Implementation Note: This method is required and may not return null.- Returns:
- a unique identifier for the SCM, preferably based on its binary
 
- 
getMergeStrategiesRetrieves a set ofmerge strategiessupported by the SCM.If the SCM supports pull requestsand selectable merge strategies, the system will use the returnedstrategiesto allow administrators to configure the default and enabled strategies for the "Merge" dialog.SCMs which support selectable merge strategiesare required to return at least onePluginMergeStrategy. SCMs which support multiple merge strategies must support the same set of strategies for merge commands and pull requests. SCMs must not support different strategies for merge commands and pull requests.Implementation Notes: This method is optional. SCMs which do not support selectable merge strategies, or which don't support the merge commandorpull requests, may returnnull.- Returns:
- the merge strategies supported by this SCM, or nullif the SCM doesn't support selectable strategies
- Since:
- 4.9
- See Also:
 
- 
getMirrorCommandFactoryRetrieves aPluginMirrorCommandFactory, used to createcommandstailored for mirroring repositories.Implementation Note: This method is optional. SCMs which do not support mirroring may return null.Repositoriesusing such SCMs will not be able to mirror repositories.- Returns:
- a command factory which will create commands used to mirror repositories, or nullif the SCM does not support mirroring
- Since:
- 4.1
- See Also:
 
- 
getNameRetrieves a well-known name for the SCM that is provided by the plugin.Most SCMs use binaries which do not match the well-known name of the SCM. For example, Subversion's binary is svn, and Mercurial's ishg. This method should return the SCM's well-known name, suitable for display in a user interface.Implementation Note: This method is required and may not return null.- Returns:
- the SCM's well-known name
 
- 
getPullRequestCommandFactoryRetrieves aPluginPullRequestCommandFactory, used to createcommandstailored for use supporting pull requests.Repositoriesusing an SCM which implements this method will have the ability to create, view and merge pull requests.Implementation Note: This method is optional. SCMs which do not support pull requests may return null.Repositoriesusing such SCMs will not be able to create pull requests.- Returns:
- a pull request command factory, or nullif the SCM does not support pull requests
- See Also:
 
- 
getRefCommandFactoryRetrieves aPluginRefCommandFactory, used to createcommandstailored for creatingbranchesandtags.Implementation Note: This method is optional. SCMs which do not support mutable refs may return null.Repositoriesusing such SCMs will not be able createbranchesandtags.- Returns:
- a plugin ref command factory
- See Also:
 
- 
getStatusRetrieves the currentstatusfor the SCM.AvailableSCMs are expected to be able to process requests. However, there may be situations in which an SCM is unavailable. For example, if the plugin relies on a binary, or common library, which is not installed on the host system, the SCM may be unavailable. When an SCM is unavailable, a message explaining the reason must be provided on the returnedScmStatus.An SCM's status may be capable of changing over time. However, where possible, it is best for SCMs to determine their status up front. An ScmStatusChangedEventshould be raised if an SCM's status changes at runtime, but is not required. However, the system may not detect the change to the SCM's status if it does not raise an event.Implementation Note: This method is required and may not return null.- Returns:
- the current status of the SCM
- See Also:
 
- 
isEmptyboolean isEmpty(@Nonnull com.atlassian.bitbucket.repository.Repository repository) Retrieves a flag indicating whether the specifiedRepositoryis empty, from the perspective of the SCM implementation. Potential criteria for determining whether a repository is empty include:- Whether it has branches
- Whether it has tags
- Whether it has commits
 Scm.isEmpty(Repository)only mandates that a newly-created repository must be considered empty.How to determine whether a repository is "empty" depends on the SCM, as most SCMs create housekeeping files in their repositories to allow them to manage state. As a result, the system cannot simply test for the absence of any files. Instead, it calls this method to allow the SCM to perform the test. Implementation Note: This method is required. - Parameters:
- repository- the repository to check
- Returns:
- trueif the repository is empty; otherwise,- false
 
 
-