SLING-8391 - Add support for execution modes
* implemented execution modes for `release create-jira-new-version`
diff --git a/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java b/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java
index 647cf6d..a15c8a9 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java
@@ -21,6 +21,8 @@
import org.apache.sling.cli.impl.Command;
import org.apache.sling.cli.impl.ExecutionContext;
+import org.apache.sling.cli.impl.InputOption;
+import org.apache.sling.cli.impl.UserInput;
import org.apache.sling.cli.impl.jira.Issue;
import org.apache.sling.cli.impl.jira.Version;
import org.apache.sling.cli.impl.jira.VersionClient;
@@ -52,24 +54,52 @@
StagingRepository repo = repoFinder.find(Integer.parseInt(context.getTarget()));
for (Release release : Release.fromString(repo.getDescription()) ) {
Version version = versionClient.find(release);
- logger.info("Found version {}", version);
+ logger.info("Found {}.", version);
Version successorVersion = versionClient.findSuccessorVersion(release);
- logger.info("Found successor version {}", successorVersion);
+ boolean createNextRelease = false;
if ( successorVersion == null ) {
Release next = release.next();
- logger.info("Would create version {}", next.getName());
- versionClient.create(next.getName());
- logger.info("Created version {}", next.getName());
- successorVersion = versionClient.findSuccessorVersion(release);
+ if (context.getMode() == ExecutionContext.Mode.DRY_RUN) {
+ logger.info("Version {} would be created.", next.getName());
+ } else if (context.getMode() == ExecutionContext.Mode.INTERACTIVE) {
+ InputOption answer = UserInput.yesNo(String.format("Should version %s be created?", next.getName()),
+ InputOption.YES);
+ createNextRelease = (answer == InputOption.YES);
+ } else if (context.getMode() == ExecutionContext.Mode.AUTO) {
+ createNextRelease = true;
+ }
+ if (createNextRelease) {
+ versionClient.create(next.getName());
+ logger.info("Created version {}", next.getName());
+ successorVersion = versionClient.findSuccessorVersion(release);
+ }
+ } else {
+ logger.info("Found successor {}.", successorVersion);
}
-
- List<Issue> unresolvedIssues = versionClient.findUnresolvedIssues(release);
- if ( !unresolvedIssues.isEmpty() ) {
- logger.info("Will move {} unresolved issues from version {} to version {} :",
- unresolvedIssues.isEmpty(), version.getName(), successorVersion.getName());
- unresolvedIssues.stream()
- .forEach( i -> logger.info("- {} : {}", i.getKey(), i.getSummary()));
- versionClient.moveIssuesToNewVersion(version, successorVersion, unresolvedIssues);
+ if (successorVersion != null) {
+ List<Issue> unresolvedIssues = versionClient.findUnresolvedIssues(release);
+ if (!unresolvedIssues.isEmpty()) {
+ boolean moveIssues = false;
+ if (context.getMode() == ExecutionContext.Mode.DRY_RUN) {
+ logger.info("{} unresolved issues would be moved from version {} to version {} :",
+ unresolvedIssues.size(), version.getName(), successorVersion.getName());
+ } else if (context.getMode() == ExecutionContext.Mode.INTERACTIVE) {
+ InputOption answer = UserInput.yesNo(String.format("Should the %s unresolved issue(s) from version %s be " +
+ "moved " +
+ "to version %s?", unresolvedIssues.size(), version.getName(), successorVersion.getName()),
+ InputOption.YES);
+ moveIssues = (answer == InputOption.YES);
+ } else if (context.getMode() == ExecutionContext.Mode.AUTO) {
+ moveIssues = true;
+ }
+ if (moveIssues) {
+ logger.info("Moving the following issues from {} to {}.", version.getName(), successorVersion.getName());
+ unresolvedIssues
+ .forEach(i -> logger.info("- {} : {}", i.getKey(), i.getSummary()));
+ versionClient.moveIssuesToNewVersion(version, successorVersion, unresolvedIssues);
+ logger.info("Done.");
+ }
+ }
}
}
} catch (IOException e) {