diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java index 21b977587f73..a89a642854c7 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java @@ -12,31 +12,39 @@ // limitations under the License. package org.zmlx.hg4idea.action; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; +import com.intellij.notification.Notifications; import com.intellij.openapi.project.Project; import com.intellij.vcsUtil.VcsUtil; import org.apache.commons.lang.StringUtils; +import org.jetbrains.annotations.Nullable; +import org.zmlx.hg4idea.HgErrorUtil; +import org.zmlx.hg4idea.HgVcs; import org.zmlx.hg4idea.execution.HgCommandResult; import java.util.List; final class HgCommandResultNotifier { - private final Project project; + private final Project myProject; HgCommandResultNotifier(Project project) { - this.project = project; + myProject = project; } - public void process(HgCommandResult result) { + public void process(HgCommandResult result, @Nullable String successTitle, @Nullable String successDescription) { List out = result.getOutputLines(); List err = result.getErrorLines(); if (!out.isEmpty()) { - VcsUtil.showStatusMessage(project, out.get(out.size() - 1)); + VcsUtil.showStatusMessage(myProject, out.get(out.size() - 1)); } if (!err.isEmpty()) { VcsUtil.showErrorMessage( - project, "" + StringUtils.join(err, "
") + "", "Error" + myProject, "" + StringUtils.join(err, "
") + "", "Error" ); + } else if (!HgErrorUtil.isAbort(result) && successTitle != null && successDescription != null) { + Notifications.Bus.notify(new Notification(HgVcs.NOTIFICATION_GROUP_ID, successTitle, successDescription, NotificationType.INFORMATION), myProject); } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCreateTagAction.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCreateTagAction.java index af702917e2e1..ef97b082d720 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCreateTagAction.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCreateTagAction.java @@ -49,7 +49,7 @@ public class HgCreateTagAction extends HgAbstractGlobalAction { new HgTagCreateCommand(project, dialog.getRepository(), dialog.getTagName()).execute(new HgCommandResultHandler() { @Override public void process(@Nullable HgCommandResult result) { - new HgCommandResultNotifier(project).process(result); + new HgCommandResultNotifier(project).process(result, null, null); } }); } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMqRebaseAction.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMqRebaseAction.java index 82b398ca8483..6757d873c336 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMqRebaseAction.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgMqRebaseAction.java @@ -64,7 +64,7 @@ public class HgMqRebaseAction extends HgAbstractGlobalAction { pullCommand.execute(new HgCommandResultHandler() { @Override public void process(@Nullable HgCommandResult result) { - new HgCommandResultNotifier(project).process(result); + new HgCommandResultNotifier(project).process(result, null, null); String currentBranch = new HgTagBranchCommand(project, repository).getCurrentBranch(); if (StringUtils.isBlank(currentBranch)) { diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPullAction.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPullAction.java index 15d705be9c6c..25da45b3e888 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPullAction.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPullAction.java @@ -54,7 +54,7 @@ public class HgPullAction extends HgAbstractGlobalAction { command.execute(new HgCommandResultHandler() { @Override public void process(@Nullable HgCommandResult result) { - new HgCommandResultNotifier(project).process(result); + new HgCommandResultNotifier(project).process(result, null, null); } }); } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPushAction.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPushAction.java index 838623bd2177..b4e70d27d85d 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPushAction.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgPushAction.java @@ -12,17 +12,25 @@ // limitations under the License. package org.zmlx.hg4idea.action; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.Nullable; +import org.zmlx.hg4idea.HgErrorUtil; import org.zmlx.hg4idea.command.HgPushCommand; import org.zmlx.hg4idea.execution.HgCommandResult; import org.zmlx.hg4idea.execution.HgCommandResultHandler; import org.zmlx.hg4idea.ui.HgPushDialog; import java.util.Collection; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class HgPushAction extends HgAbstractGlobalAction { + private static final Logger LOG = Logger.getInstance(HgPushAction.class); + private static Pattern PUSH_COMMITS_PATTERN = Pattern.compile(".*added (\\d+) changesets.*"); protected HgGlobalCommandBuilder getHgGlobalCommandBuilder(final Project project) { return new HgGlobalCommandBuilder() { @@ -52,11 +60,37 @@ public class HgPushAction extends HgAbstractGlobalAction { command.execute(new HgCommandResultHandler() { @Override public void process(@Nullable HgCommandResult result) { - new HgCommandResultNotifier(project).process(result); + int commitsNum = getNumberOfPushedCommits(result); + String title = null; + String description = null; + if (commitsNum >= 0) { + title = "Pushed successfully"; + description = "Pushed " + commitsNum + " " + StringUtil.pluralize("commit", commitsNum) + "."; + } + new HgCommandResultNotifier(project).process(result, title, description); } }); } }; } + private static int getNumberOfPushedCommits(HgCommandResult result) { + if (!HgErrorUtil.isAbort(result)) { + final List outputLines = result.getOutputLines(); + for (String outputLine : outputLines) { + final Matcher matcher = PUSH_COMMITS_PATTERN.matcher(outputLine.trim()); + if (matcher.matches()) { + try { + return Integer.parseInt(matcher.group(1)); + } + catch (NumberFormatException e) { + LOG.info("getNumberOfPushedCommits ", e); + return -1; + } + } + } + } + return -1; + } + } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgSwitchWorkingDirectoryAction.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgSwitchWorkingDirectoryAction.java index d9d18ff94490..da7ea7417ed7 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgSwitchWorkingDirectoryAction.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgSwitchWorkingDirectoryAction.java @@ -61,7 +61,7 @@ public class HgSwitchWorkingDirectoryAction extends HgAbstractGlobalAction { @Override public void run() { HgCommandResult result = command.execute(); - new HgCommandResultNotifier(project).process(result); + new HgCommandResultNotifier(project).process(result, null, null); project.getMessageBus().syncPublisher(HgVcs.BRANCH_TOPIC).update(project); } });