diff --git a/.factorypath b/.factorypath new file mode 100644 index 00000000..3ca9c6e3 --- /dev/null +++ b/.factorypath @@ -0,0 +1,84 @@ +<factorypath> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-core/3.8.5/maven-core-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-model/3.8.5/maven-model-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-settings/3.8.5/maven-settings-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-settings-builder/3.8.5/maven-settings-builder-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-builder-support/3.8.5/maven-builder-support-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-repository-metadata/3.8.5/maven-repository-metadata-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-artifact/3.8.5/maven-artifact-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-plugin-api/3.8.5/maven-plugin-api-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-model-builder/3.8.5/maven-model-builder-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-resolver-provider/3.8.5/maven-resolver-provider-3.8.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-impl/1.6.3/maven-resolver-impl-1.6.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-api/1.6.3/maven-resolver-api-1.6.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-spi/1.6.3/maven-resolver-spi-1.6.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-util/1.6.3/maven-resolver-util-1.6.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/shared/maven-shared-utils/3.3.4/maven-shared-utils-3.3.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.2/guice-4.2.2-no_aop.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/25.1-android/guava-25.1-android.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-compat-qual/2.0.0/checker-compat-qual-2.0.0.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-interpolation/1.26/plexus-interpolation-1.26.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.0/plexus-component-annotations-2.1.0.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.32/slf4j-api-1.7.32.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/plugin-tools/maven-plugin-annotations/3.6.4/maven-plugin-annotations-3.6.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-interactivity-api/1.1/plexus-interactivity-api-1.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/release/maven-release-manager/2.5.3/maven-release-manager-2.5.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/release/maven-release-api/2.5.3/maven-release-api-2.5.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/aether/aether-util/1.0.0.v20140518/aether-util-1.0.0.v20140518.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/aether/aether-api/1.0.0.v20140518/aether-api-1.0.0.v20140518.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-artifact-manager/2.2.1/maven-artifact-manager-2.2.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-project/2.2.1/maven-project-2.2.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-profile/2.2.1/maven-profile-2.2.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-plugin-registry/2.2.1/maven-plugin-registry-2.2.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/shared/maven-invoker/2.2/maven-invoker-2.2.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.2/commons-cli-1.2.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.2/commons-io-2.2.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-accurev/1.9.4/maven-scm-provider-accurev-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-bazaar/1.9.4/maven-scm-provider-bazaar-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-clearcase/1.9.4/maven-scm-provider-clearcase-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-cvsexe/1.9.4/maven-scm-provider-cvsexe-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-cvs-commons/1.9.4/maven-scm-provider-cvs-commons-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-cvsjava/1.9.4/maven-scm-provider-cvsjava-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/netbeans/lib/cvsclient/20060125/cvsclient-20060125.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-gitexe/1.9.4/maven-scm-provider-gitexe-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-git-commons/1.9.4/maven-scm-provider-git-commons-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-hg/1.9.4/maven-scm-provider-hg-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-perforce/1.9.4/maven-scm-provider-perforce-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-starteam/1.9.4/maven-scm-provider-starteam-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-svnexe/1.9.4/maven-scm-provider-svnexe-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-synergy/1.9.4/maven-scm-provider-synergy-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-vss/1.9.4/maven-scm-provider-vss-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-tfs/1.9.4/maven-scm-provider-tfs-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-integrity/1.9.4/maven-scm-provider-integrity-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/com/mks/api/mksapi-jar/4.10.9049/mksapi-jar-4.10.9049.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/groovy/groovy-all/1.7.6/groovy-all-1.7.6.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-jazz/1.9.4/maven-scm-provider-jazz-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-manager-plexus/1.8/maven-scm-manager-plexus-1.8.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-api/1.9.4/maven-scm-api-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/scm/maven-scm-provider-svn-commons/1.9.4/maven-scm-provider-svn-commons-1.9.4.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/org/jdom/jdom/1.1/jdom-1.1.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/jaxen/jaxen/1.1-beta-8/jaxen-1.1-beta-8.jar" enabled="true" runInBatchMode="false"/> + <factorypathentry kind="VARJAR" id="M2_REPO/jdom/jdom/1.0/jdom-1.0.jar" enabled="true" runInBatchMode="false"/> +</factorypath> diff --git a/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseFinishMojo.java b/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseFinishMojo.java index 8153554e..aebf34cd 100644 --- a/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseFinishMojo.java +++ b/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseFinishMojo.java @@ -179,6 +179,12 @@ public class GitFlowReleaseFinishMojo extends AbstractGitFlowMojo { @Parameter(property = "noBackMerge", defaultValue = "false") private boolean noBackMerge = false; + /** Release branch to use in non-interactive mode. Must start with releasae branch + * prefix. The releaseBranchName parameter will be used if there are multiple release Branches in the Repository + * */ + @Parameter(property = "releaseBranchName") + private String releaseBranchName; + /** * Whether to skip merging release into the development branch. * @@ -191,36 +197,47 @@ public class GitFlowReleaseFinishMojo extends AbstractGitFlowMojo { @Override public void execute() throws MojoExecutionException, MojoFailureException { validateConfiguration(preReleaseGoals, postReleaseGoals); - + String releaseBranch = null; try { // check uncommitted changes checkUncommittedChanges(); - String releaseBranch = gitFindBranches(gitFlowConfig.getReleaseBranchPrefix(), false); + if (StringUtils.isNotBlank(releaseBranchName)) { + if (!releaseBranchName.startsWith(gitFlowConfig.getReleaseBranchPrefix())) { + throw new MojoFailureException("The releaseBranchName parameter doesn't start with release branch prefix."); + } + if (!gitCheckBranchExists(releaseBranchName)) { + throw new MojoFailureException("Release branch with name '" + releaseBranchName + "' doesn't exist. Cannot finish release."); + } + releaseBranch = releaseBranchName; + } else { + + releaseBranch = gitFindBranches(gitFlowConfig.getReleaseBranchPrefix(), false); - if (StringUtils.isBlank(releaseBranch)) { - if (fetchRemote) { - releaseBranch = gitFetchAndFindRemoteBranches(gitFlowConfig.getReleaseBranchPrefix(), false); - if (StringUtils.isBlank(releaseBranch)) { - throw new MojoFailureException("There is no remote or local release branch."); - } + if (StringUtils.isBlank(releaseBranch)) { + if (fetchRemote) { + releaseBranch = gitFetchAndFindRemoteBranches(gitFlowConfig.getReleaseBranchPrefix(), false); + if (StringUtils.isBlank(releaseBranch)) { + throw new MojoFailureException("There is no remote or local release branch."); + } - // remove remote name with slash from branch name - releaseBranch = releaseBranch.substring(gitFlowConfig.getOrigin().length() + 1); + // remove remote name with slash from branch name + releaseBranch = releaseBranch.substring(gitFlowConfig.getOrigin().length() + 1); - if (StringUtils.countMatches(releaseBranch, gitFlowConfig.getReleaseBranchPrefix()) > 1) { - throw new MojoFailureException("More than one remote release branch exists. Cannot finish release."); + if (StringUtils.countMatches(releaseBranch, gitFlowConfig.getReleaseBranchPrefix()) > 1) { + throw new MojoFailureException("More than one remote release branch exists. And the parameter releaseBranchName is not set. Cannot finish release."); + } + + gitCreateAndCheckout(releaseBranch, gitFlowConfig.getOrigin() + "/" + releaseBranch); + } else { + throw new MojoFailureException("There is no release branch."); } + } + if (StringUtils.countMatches(releaseBranch, gitFlowConfig.getReleaseBranchPrefix()) > 1) { - gitCreateAndCheckout(releaseBranch, gitFlowConfig.getOrigin() + "/" + releaseBranch); - } else { - throw new MojoFailureException("There is no release branch."); + throw new MojoFailureException("More than one release branch exists. Cannot finish release."); } } - if (StringUtils.countMatches(releaseBranch, gitFlowConfig.getReleaseBranchPrefix()) > 1) { - throw new MojoFailureException("More than one release branch exists. Cannot finish release."); - } - // check snapshots dependencies if (!allowSnapshots) { gitCheckout(releaseBranch); diff --git a/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseStartMojo.java b/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseStartMojo.java index a4684eca..e1a03d83 100644 --- a/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseStartMojo.java +++ b/src/main/java/com/amashchenko/maven/plugin/gitflow/GitFlowReleaseStartMojo.java @@ -138,6 +138,13 @@ public class GitFlowReleaseStartMojo extends AbstractGitFlowMojo { @Parameter(property = "branchName") private String branchName; + /** + * Whether to allow multiple release branches. + * + */ + @Parameter(property = "allowMultipleReleaseBranches", defaultValue = "true") + private boolean allowMultipleReleaseBranches; + /** {@inheritDoc} */ @Override public void execute() throws MojoExecutionException, MojoFailureException { @@ -152,7 +159,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { final String releaseBranch = gitFindBranches(gitFlowConfig.getReleaseBranchPrefix(), true); - if (StringUtils.isNotBlank(releaseBranch)) { + if (StringUtils.isNotBlank(releaseBranch) && !allowMultipleReleaseBranches ) { throw new MojoFailureException("Release branch already exists. Cannot start release."); } @@ -193,6 +200,10 @@ public void execute() throws MojoExecutionException, MojoFailureException { fullBranchName += releaseVersion; } + if (gitCheckBranchExists(fullBranchName)) { + throw new MojoFailureException("Release branch" + fullBranchName + "already exists. Cannot start release."); + } + String projectVersion = releaseVersion; if (useSnapshotInRelease && !ArtifactUtils.isSnapshot(projectVersion)) { projectVersion = projectVersion + "-" + Artifact.SNAPSHOT_VERSION;