diff options
author | Tor Norbye <tnorbye@google.com> | 2014-09-04 13:24:04 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-09-04 13:24:04 -0700 |
commit | c3d3a90f6b4ead083d63e28e6b9fcea93d675678 (patch) | |
tree | fc0dcd722b6d445468dbe7dad13b4c11781b1cbe /plugins/hg4idea/src/org/zmlx/hg4idea/push | |
parent | 1aa2e09bdbd413eacb677e9fa4b50630530d0656 (diff) | |
download | idea-c3d3a90f6b4ead083d63e28e6b9fcea93d675678.tar.gz |
Snapshot idea/138.1980 from git://git.jetbrains.org/idea/community.git
Change-Id: Ib567c9c152d770212a7a3db20fbf591c210920bd
Diffstat (limited to 'plugins/hg4idea/src/org/zmlx/hg4idea/push')
3 files changed, 42 insertions, 32 deletions
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java index 70055cafe1a1..a3ea93d7f0b9 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java @@ -16,7 +16,6 @@ package org.zmlx.hg4idea.push; import com.intellij.dvcs.push.*; -import com.intellij.dvcs.repo.Repository; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; @@ -27,6 +26,7 @@ import org.zmlx.hg4idea.command.HgOutgoingCommand; import org.zmlx.hg4idea.execution.HgCommandResult; import org.zmlx.hg4idea.log.HgBaseLogParser; import org.zmlx.hg4idea.log.HgHistoryUtil; +import org.zmlx.hg4idea.repo.HgRepository; import org.zmlx.hg4idea.util.HgChangesetUtil; import org.zmlx.hg4idea.util.HgErrorUtil; import org.zmlx.hg4idea.util.HgVersion; @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class HgOutgoingCommitsProvider extends OutgoingCommitsProvider { +public class HgOutgoingCommitsProvider extends OutgoingCommitsProvider<HgRepository, HgPushSource, HgTarget> { private static final Logger LOG = Logger.getInstance(HgOutgoingCommitsProvider.class); @@ -43,8 +43,8 @@ public class HgOutgoingCommitsProvider extends OutgoingCommitsProvider { @NotNull @Override - public OutgoingResult getOutgoingCommits(@NotNull final Repository repository, - @NotNull final PushSpec pushSpec, + public OutgoingResult getOutgoingCommits(@NotNull final HgRepository repository, + @NotNull final PushSpec<HgPushSource, HgTarget> pushSpec, boolean initial) { final Project project = repository.getProject(); HgVcs hgvcs = HgVcs.getInstance(project); @@ -52,9 +52,9 @@ public class HgOutgoingCommitsProvider extends OutgoingCommitsProvider { final HgVersion version = hgvcs.getVersion(); String[] templates = HgBaseLogParser.constructFullTemplateArgument(true, version); HgOutgoingCommand hgOutgoingCommand = new HgOutgoingCommand(project); - HgTarget hgTarget = (HgTarget)pushSpec.getTarget(); + HgTarget hgTarget = pushSpec.getTarget(); List<VcsError> errors = new ArrayList<VcsError>(); - if (hgTarget == null || StringUtil.isEmptyOrSpaces(hgTarget.myTarget)) { + if (StringUtil.isEmptyOrSpaces(hgTarget.myTarget)) { errors.add(new VcsError("Hg push path could not be empty.")); return new OutgoingResult(Collections.<VcsFullCommitDetails>emptyList(), errors); } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPushSupport.java b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPushSupport.java index 4bfa134a5e26..13f4aaa08f6a 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPushSupport.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPushSupport.java @@ -15,12 +15,14 @@ */ package org.zmlx.hg4idea.push; +import com.intellij.dvcs.DvcsUtil; import com.intellij.dvcs.push.*; -import com.intellij.dvcs.repo.Repository; import com.intellij.dvcs.repo.RepositoryManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.AbstractVcs; +import com.intellij.ui.SimpleColoredText; +import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.Function; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; @@ -30,10 +32,11 @@ import org.zmlx.hg4idea.HgVcs; import org.zmlx.hg4idea.repo.HgRepository; import org.zmlx.hg4idea.util.HgUtil; -import java.util.Collection; +import java.util.List; -public class HgPushSupport extends PushSupport<HgRepository> { +public class HgPushSupport extends PushSupport<HgRepository, HgPushSource, HgTarget> { + private final static String ENTER_REMOTE = "Enter Remote"; @NotNull private final Project myProject; @NotNull private final HgVcs myVcs; @@ -50,13 +53,13 @@ public class HgPushSupport extends PushSupport<HgRepository> { @NotNull @Override - public Pusher getPusher() { + public Pusher<HgRepository, HgPushSource, HgTarget> getPusher() { return new HgPusher(); } @NotNull @Override - public OutgoingCommitsProvider getOutgoingCommitsProvider() { + public OutgoingCommitsProvider<HgRepository, HgPushSource, HgTarget> getOutgoingCommitsProvider() { return new HgOutgoingCommitsProvider(); } @@ -69,13 +72,13 @@ public class HgPushSupport extends PushSupport<HgRepository> { @NotNull @Override - public Collection<String> getTargetNames(@NotNull HgRepository repository) { - return ContainerUtil.map(repository.getRepositoryConfig().getPaths(), new Function<String, String>() { + public List<String> getTargetNames(@NotNull HgRepository repository) { + return ContainerUtil.sorted(ContainerUtil.map(repository.getRepositoryConfig().getPaths(), new Function<String, String>() { @Override public String fun(String s) { return HgUtil.removePasswordIfNeeded(s); } - }); + })); } @NotNull @@ -86,6 +89,7 @@ public class HgPushSupport extends PushSupport<HgRepository> { } @Override + @NotNull public HgTarget createTarget(@NotNull HgRepository repository, @NotNull String targetName) { return new HgTarget(targetName); } @@ -103,7 +107,17 @@ public class HgPushSupport extends PushSupport<HgRepository> { @Override @Nullable - public VcsError validate(@NotNull Repository repository, @Nullable String targetToValidate) { - return StringUtil.isEmptyOrSpaces(targetToValidate) ? new VcsError("Please, specify remote push path for repository!") : null; + public VcsError validate(@NotNull HgRepository repository, @Nullable String targetToValidate) { + return StringUtil.isEmptyOrSpaces(targetToValidate) + ? VcsError.createEmptyTargetError(DvcsUtil.getShortRepositoryName(repository)) + : null; + } + + @Override + public SimpleColoredText renderTarget(@Nullable HgTarget target) { + if (target == null || StringUtil.isEmptyOrSpaces(target.getPresentation())) { + return new SimpleColoredText(ENTER_REMOTE, SimpleTextAttributes.GRAY_ITALIC_ATTRIBUTES); + } + return new SimpleColoredText(target.getPresentation(), SimpleTextAttributes.SYNTHETIC_ATTRIBUTES); } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPusher.java b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPusher.java index f019035a373f..e3c91e0103d9 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPusher.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPusher.java @@ -18,7 +18,6 @@ package org.zmlx.hg4idea.push; import com.intellij.dvcs.push.PushSpec; import com.intellij.dvcs.push.Pusher; import com.intellij.dvcs.push.VcsPushOptionValue; -import com.intellij.dvcs.repo.Repository; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; @@ -37,33 +36,30 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class HgPusher extends Pusher { +public class HgPusher extends Pusher<HgRepository, HgPushSource, HgTarget> { private static final Logger LOG = Logger.getInstance(HgPusher.class); private static final String ONE = "one"; private static Pattern PUSH_COMMITS_PATTERN = Pattern.compile(".*(?:added|pushed) (\\d+|" + ONE + ") changeset.*"); // hg push command has definite exit values for some cases: // mercurial returns 0 if push was successful, 1 if nothing to push. see hg push --help - private static int PUSH_SUCCEEDED_EXIT_VALUE = 0; - private static int NOTHING_TO_PUSH_EXIT_VALUE = 1; + static int PUSH_SUCCEEDED_EXIT_VALUE = 0; + static int NOTHING_TO_PUSH_EXIT_VALUE = 1; @Override - public void push(@NotNull Map<Repository, PushSpec> pushSpecs, @Nullable VcsPushOptionValue vcsPushOptionValue, boolean force) { - for (Map.Entry<Repository, PushSpec> entry : pushSpecs.entrySet()) { - Repository repository = entry.getKey(); - HgRepository hgRepository = (HgRepository)repository; - PushSpec hgSpec = entry.getValue(); - HgTarget destination = (HgTarget)hgSpec.getTarget(); - if (destination == null) { - continue; - } - HgPushSource source = (HgPushSource)hgSpec.getSource(); + public void push(@NotNull Map<HgRepository, PushSpec<HgPushSource, HgTarget>> pushSpecs, + @Nullable VcsPushOptionValue vcsPushOptionValue, boolean force) { + for (Map.Entry<HgRepository, PushSpec<HgPushSource, HgTarget>> entry : pushSpecs.entrySet()) { + HgRepository repository = entry.getKey(); + PushSpec<HgPushSource, HgTarget> hgSpec = entry.getValue(); + HgTarget destination = hgSpec.getTarget(); + HgPushSource source = hgSpec.getSource(); Project project = repository.getProject(); final HgPushCommand pushCommand = new HgPushCommand(project, repository.getRoot(), destination.myTarget); pushCommand.setIsNewBranch(true); // set always true, because it just allow mercurial to create a new one if needed pushCommand.setForce(force); String branchName = source.getBranch(); - if (branchName.equals(hgRepository.getCurrentBookmark())) { + if (branchName.equals(repository.getCurrentBookmark())) { if (vcsPushOptionValue == HgVcsPushOptionValue.Current) { pushCommand.setBookmarkName(branchName); } @@ -105,7 +101,7 @@ public class HgPusher extends Pusher { }); } - private static int getNumberOfPushedCommits(@NotNull HgCommandResult result) { + static int getNumberOfPushedCommits(@NotNull HgCommandResult result) { int numberOfCommitsInAllSubrepos = 0; final List<String> outputLines = result.getOutputLines(); for (String outputLine : outputLines) { |