| com.atlassian.bitbucket.scm.PluginCommandBuilderFactory | 
When implemented by an SCM, allows the ScmService to provide an ScmCommandBuilder that
 can be used to build custom commands for advanced functionality. SCMs which do not support a command builder should
 not implement this interface and should return null from getCommandBuilderFactory().
 
 SCMs implementing this interface are required to provide a free-form ScmCommandBuilder. They are also
 encouraged to provide a type-safe builder API on top of that, to simplify creating custom commands correctly
 and safely. For plugins which provide a type-safe builder, it is encouraged for them to use a sub-interface which
 extends this one. For example:
 
     //A type-safe builder for MyScm's diff command
     public interface DiffCommandBuilder extends CommandBuilderSupport<DiffCommandBuilder> {
         //A fluent API for constructing a diff command, exposing builder-style methods for setting
         //only parameters that are supported as valid arguments on the SCM's diff command
     }
     //Adds methods for retrieving type-safe builders, in addition to the normal free-form builder methods
     public interface MyScmCommandBuilder extends ScmCommandBuilder<MyScmCommandBuilder> {
         //A type-safe builder for performing diffs
         DiffCommandBuilder diff();
         //Other custom builders for other commands supported by the SCM
     }
     //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 {
         @Nonnull
         @Override
         MyScmCommandBuilder builder(@Nullable Repository repository);
     }
 MyScmCommandBuilder, they may choose to
 construct a diff command entirely using free-form arguments, or they may create a DiffCommandBuilder and
 leverage its API to produce one with known-correct arguments.
 
 The SCM plugin would then expose the class implementing their custom MyScmCommandBuilderFactory using a
 component directive:
 
     <!-- Note: This should be in the SCM provider's atlassian-plugin.xml -->
     <component key="myScmCommandBuilderFactory"
                   class="com.example.DefaultMyScmCommandBuilderFactory"
                   public="true">
         <interface>com.example.MyScmCommandBuilderFactory</interface>
     </component>
 public="true" allows other plugins to import the component. This approach allows other plugin developers
 to import the SCM plugin's type-safe builder API with a component-import directive:
 
     <!-- Note: This should be in the SCM consumer's atlassian-plugin.xml -->
     <component-import key="myScmCommandBuilderFactory"
                          interface="com.example.MyScmCommandBuilderFactory"/>
 
Note: The system never uses the ScmCommandBuilder to perform SCM operations. SCM plugins are encouraged to provide a command builder to allow other plugins to leverage SCM features not exposed by ScmCommandFactory and ScmPullRequestCommandFactory ScmPullRequestCommandFactory
| Public Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Creates a ScmCommandBuilder which can be used to construct free-form commands to interact directly with
 the underlying SCM implementation and perform custom functions on repositories. | |||||||||||
Creates a ScmCommandBuilder which can be used to construct free-form commands to interact directly with the underlying SCM implementation and perform custom functions on repositories.
Command builders are provided as a very powerful extension point for plugin developers, allowing them to create new functionality that uses commands the application does not, or uses them in different ways. However, plugin developers should be aware that:
 If a Repository is provided, the created ScmCommandBuilder will use the repository's directory
 as its initial working directory. However, for commands that create repositories, such as git init, the
 provided repository may be null. In such cases, the builder will use the default working directory. Note
 that, after the builder has been created, it is possible to change the working directory on the instance, before
 commands are constructed.
 
 At a minimum, all ScmCommandBuilderFactory implementations are required to provide a free-form
 builder. They are encouraged to provide a type-safe builder as well, by using a covariant return on their
 implementation of this method to return a derived builder supporting both free-form and type-safe techniques.
 How to do this is described in the class-level documentation.
 
Note: Per the contract of the ScmCommandBuilder API, the returned builder is not thread-safe. If multiple threads require use of a builder, each thread should always create its own builder.
| repository | the repository whose directory should be the initial working directory, or null, if no
                   repository exists, to use the default working directory | 
|---|