public Integer call()

in src/main/java/org/apache/sling/cli/impl/release/CreateJiraVersionCommand.java [70:128]


    public Integer call() {
        try {
            StagingRepository repo = repositoryService.find(repositoryId);
            for (Release release : repositoryService.getReleases(repo)) {
                Version version = versionClient.find(release);
                logger.info("Found {}.", version);
                Version successorVersion = versionClient.findSuccessorVersion(release);
                boolean createNextRelease = false;
                if ( successorVersion == null ) {
                    Release next = release.next();
                    if (reusableCLIOptions.executionMode == ExecutionMode.DRY_RUN) {
                        logger.info("Version {} would be created.", next.getName());
                    } else if (reusableCLIOptions.executionMode == ExecutionMode.INTERACTIVE) {
                        InputOption answer = UserInput.yesNo(String.format("Should version %s be created?", next.getName()),
                                InputOption.YES);
                        createNextRelease = (answer == InputOption.YES);
                    } else if (reusableCLIOptions.executionMode == ExecutionMode.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);
                }
                if (successorVersion != null) {
                    List<Issue> unresolvedIssues = versionClient.findUnresolvedIssues(release);
                    if (!unresolvedIssues.isEmpty()) {
                        boolean moveIssues = false;
                        if (reusableCLIOptions.executionMode == ExecutionMode.DRY_RUN) {
                            logger.info("{} unresolved issues would be moved from version {} to version {} :",
                                    unresolvedIssues.size(), version.getName(), successorVersion.getName());
                        } else if (reusableCLIOptions.executionMode == ExecutionMode.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 (reusableCLIOptions.executionMode == ExecutionMode.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) {
            logger.warn("Failed executing command", e);
            return CommandLine.ExitCode.SOFTWARE;
        }
        return CommandLine.ExitCode.OK;
    }