Package gitflow.actions

Source Code of gitflow.actions.FinishReleaseAction

package gitflow.actions;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.ui.Messages;
import git4idea.branch.GitBranchUtil;
import git4idea.commands.GitCommandResult;
import gitflow.GitflowConfigUtil;
import gitflow.GitflowConfigurable;
import gitflow.ui.NotifyUtil;
import org.jetbrains.annotations.NotNull;

public class FinishReleaseAction extends GitflowAction {

  String customReleaseName=null;
  String customtagMessage=null;

    FinishReleaseAction() {
        super("Finish Release");
    }

  FinishReleaseAction(String name, String tagMessage) {
    super("Finish Release");
    customReleaseName=name;
    customtagMessage=tagMessage;
  }

    @Override
    public void actionPerformed(AnActionEvent e) {
        super.actionPerformed(e);

        String currentBranchName = GitBranchUtil.getBranchNameOrRev(repo);
        if (currentBranchName.isEmpty()==false){

          final AnActionEvent event=e;

            final String tagMessage;
            final String releaseName;

          // Check if a release name was specified, otherwise take name from current branch
          releaseName = customReleaseName!=null ? customReleaseName:GitflowConfigUtil.getReleaseNameFromBranch(myProject, currentBranchName);

            final GitflowErrorsListener errorLineHandler = new GitflowErrorsListener(myProject);
            String defaultTagMessage= GitflowConfigurable.getCustomTagCommitMessage(myProject);
            defaultTagMessage=defaultTagMessage.replace("%name%", releaseName);

            String tagMessageDraft;

            boolean cancelAction=false;

            if (GitflowConfigurable.dontTagRelease(myProject)) {
                tagMessage="";
            }
            else if (customtagMessage!=null){
              //probably repeating the release finish after a merge
              tagMessage=customtagMessage;
            }
            else{
                tagMessageDraft= Messages.showInputDialog(myProject, "Enter the tag message:", "Finish Release", Messages.getQuestionIcon(), defaultTagMessage, null);
                if (tagMessageDraft==null){
                    cancelAction=true;
                    tagMessage="";
                }
                else{

                    tagMessage=tagMessageDraft;
                }
            }


            if (!cancelAction){

                new Task.Backgroundable(myProject,"Finishing release "+releaseName,false){
                    @Override
                    public void run(@NotNull ProgressIndicator indicator) {
                        GitCommandResult result =  myGitflow.finishRelease(repo, releaseName, tagMessage, errorLineHandler);

                        if (result.success()) {
                            String finishedReleaseMessage = String.format("The release branch '%s%s' was merged into '%s' and '%s'", featurePrefix, releaseName, developBranch, masterBranch);
                            NotifyUtil.notifySuccess(myProject, releaseName, finishedReleaseMessage);
                        }
                        else if(errorLineHandler.hasMergeError){
                          // (merge errors are handled in the onSuccess handler)
                        }
                        else {
                            NotifyUtil.notifyError(myProject, "Error", "Please have a look at the Version Control console for more details");
                        }

                        repo.update();

                    }

                    @Override
                    public void onSuccess() {
                        super.onSuccess();

                      //merge conflicts if necessary
                      if (errorLineHandler.hasMergeError){
                        if (handleMerge()) {
                          FinishReleaseAction completeFinisReleaseAction = new FinishReleaseAction(releaseName,tagMessage);
                          completeFinisReleaseAction.actionPerformed(event);
                        }
                      }
                    }

                }.queue();

            }
        }

    }

}
TOP

Related Classes of gitflow.actions.FinishReleaseAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.