summaryrefslogtreecommitdiff
path: root/plugins/hg4idea/src/org/zmlx/hg4idea
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/hg4idea/src/org/zmlx/hg4idea')
-rw-r--r--plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java1
-rw-r--r--plugins/hg4idea/src/org/zmlx/hg4idea/push/HgOutgoingCommitsProvider.java12
-rw-r--r--plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPushSupport.java34
-rw-r--r--plugins/hg4idea/src/org/zmlx/hg4idea/push/HgPusher.java28
4 files changed, 43 insertions, 32 deletions
diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
index daaf6ec33fc5..02e49354f3ab 100644
--- a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
+++ b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgChangeProvider.java
@@ -68,6 +68,7 @@ public class HgChangeProvider implements ChangeProvider {
public void getChanges(VcsDirtyScope dirtyScope, ChangelistBuilder builder,
ProgressIndicator progress, ChangeListManagerGate addGate) throws VcsException {
+ if (myProject.isDisposed()) return;
final Collection<HgChange> changes = new HashSet<HgChange>();
changes.addAll(process(builder, dirtyScope.getRecursivelyDirtyDirectories()));
changes.addAll(process(builder, dirtyScope.getDirtyFiles()));
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) {