summaryrefslogtreecommitdiff
path: root/platform/dvcs-api/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'platform/dvcs-api/src/com')
-rw-r--r--platform/dvcs-api/src/com/intellij/dvcs/push/OutgoingCommitsProvider.java17
-rw-r--r--platform/dvcs-api/src/com/intellij/dvcs/push/PushSpec.java22
-rw-r--r--platform/dvcs-api/src/com/intellij/dvcs/push/PushSupport.java31
-rw-r--r--platform/dvcs-api/src/com/intellij/dvcs/push/PushTarget.java1
-rw-r--r--platform/dvcs-api/src/com/intellij/dvcs/push/Pusher.java17
-rw-r--r--platform/dvcs-api/src/com/intellij/dvcs/push/VcsError.java4
6 files changed, 56 insertions, 36 deletions
diff --git a/platform/dvcs-api/src/com/intellij/dvcs/push/OutgoingCommitsProvider.java b/platform/dvcs-api/src/com/intellij/dvcs/push/OutgoingCommitsProvider.java
index 4532146f9b4a..33053ffe4ecf 100644
--- a/platform/dvcs-api/src/com/intellij/dvcs/push/OutgoingCommitsProvider.java
+++ b/platform/dvcs-api/src/com/intellij/dvcs/push/OutgoingCommitsProvider.java
@@ -21,15 +21,20 @@ import org.jetbrains.annotations.NotNull;
/**
* Provider for outgoing commits
*/
-public abstract class OutgoingCommitsProvider {
+public abstract class OutgoingCommitsProvider<Repo extends Repository, Source extends PushSource, Target extends PushTarget> {
/**
- * Collect outgoing commits or errors for selected repo for specified {@link PushSpec} and store to {@link OutgoingResult}
+ * Collect either outgoing commits or errors for the given repository and {@link PushSpec}.
*
- * @param initial true for first commits loading, which identify that all inside actions should be silent
- * and do not ask user about smth, a.e authorization request
+ * @param initial true for the first attempt to load commits, which happens when the push dialog just appears on the screen.
+ * If later the user modifies the push target, commits are reloaded, and {@code initial} is false.
+ * <br/>
+ * Implementations should make sure that if {@code initial} is true, no user interaction is allowed
+ * (to avoid suddenly throwing dialogs into user's face).
+ * E.g. if authentication is needed to collect outgoing changes, then the method should silently show the corresponding
+ * request in the error field of the OutgoingResult.
*/
@NotNull
- public abstract OutgoingResult getOutgoingCommits(@NotNull Repository repository,
- @NotNull PushSpec pushSpec, boolean initial);
+ public abstract OutgoingResult getOutgoingCommits(@NotNull Repo repository, @NotNull PushSpec<Source, Target> pushSpec, boolean initial);
+
}
diff --git a/platform/dvcs-api/src/com/intellij/dvcs/push/PushSpec.java b/platform/dvcs-api/src/com/intellij/dvcs/push/PushSpec.java
index 81ff874979bd..e205009a4c0d 100644
--- a/platform/dvcs-api/src/com/intellij/dvcs/push/PushSpec.java
+++ b/platform/dvcs-api/src/com/intellij/dvcs/push/PushSpec.java
@@ -16,28 +16,32 @@
package com.intellij.dvcs.push;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
/**
- * Specified a push from-to settings for one repository
+ * For a single repository, specifies what is pushed and where.
*/
-public class PushSpec {
+public class PushSpec<S extends PushSource, T extends PushTarget> {
- @NotNull private PushSource mySource;
- @Nullable private PushTarget myTarget;
+ @NotNull private S mySource;
+ @NotNull private T myTarget;
- public PushSpec(@NotNull PushSource source, @Nullable PushTarget target) {
+ public PushSpec(@NotNull S source, @NotNull T target) {
mySource = source;
myTarget = target;
}
@NotNull
- public PushSource getSource() {
+ public S getSource() {
return mySource;
}
- @Nullable
- public PushTarget getTarget() {
+ @NotNull
+ public T getTarget() {
return myTarget;
}
+
+ @Override
+ public String toString() {
+ return mySource + "->" + myTarget;
+ }
}
diff --git a/platform/dvcs-api/src/com/intellij/dvcs/push/PushSupport.java b/platform/dvcs-api/src/com/intellij/dvcs/push/PushSupport.java
index d6af8eec1088..fbf6f148c3b1 100644
--- a/platform/dvcs-api/src/com/intellij/dvcs/push/PushSupport.java
+++ b/platform/dvcs-api/src/com/intellij/dvcs/push/PushSupport.java
@@ -19,55 +19,56 @@ import com.intellij.dvcs.repo.Repository;
import com.intellij.dvcs.repo.RepositoryManager;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.vcs.AbstractVcs;
+import com.intellij.ui.SimpleColoredText;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Collection;
+import java.util.List;
/**
* Base class to provide vcs-specific info
*/
-public abstract class PushSupport<Repo extends Repository> {
+public abstract class PushSupport<Repo extends Repository, Source extends PushSource, Target extends PushTarget> {
- public static final ExtensionPointName<PushSupport<? extends Repository>> PUSH_SUPPORT_EP =
+ public static final ExtensionPointName<PushSupport<? extends Repository, ? extends PushSource, ? extends PushTarget>> PUSH_SUPPORT_EP =
ExtensionPointName.create("com.intellij.pushSupport");
@NotNull
public abstract AbstractVcs getVcs();
@NotNull
- public abstract Pusher getPusher();
+ public abstract Pusher<Repo, Source, Target> getPusher();
@NotNull
- public abstract OutgoingCommitsProvider getOutgoingCommitsProvider();
+ public abstract OutgoingCommitsProvider<Repo, Source, Target> getOutgoingCommitsProvider();
/**
* @return Default push destination
*/
@Nullable
- public abstract PushTarget getDefaultTarget(@NotNull Repo repository);
+ public abstract Target getDefaultTarget(@NotNull Repo repository);
/**
- * @return All remembered remote destinations used for completion
+ * @return All remote destinations which will be proposed to user in the target field completion.
+ * They will be shown in the same order as they appear in the returned list.
*/
@NotNull
- public abstract Collection<String> getTargetNames(@NotNull Repo repository);
+ public abstract List<String> getTargetNames(@NotNull Repo repository);
/**
* @return current source(branch) for repository
*/
@NotNull
- public abstract PushSource getSource(@NotNull Repo repository);
+ public abstract Source getSource(@NotNull Repo repository);
/**
- * Parse user input string, and create the valid target for push,
- * or return <code><b>null</b></code> if the target name is not valid.
+ * Parse user input string, and create the VALID target for push
*
* @see #validateSpec(Repository, PushSpec)
*/
- @Nullable
- public abstract PushTarget createTarget(@NotNull Repo repository, @NotNull String targetName);
+ @NotNull
+ public abstract Target createTarget(@NotNull Repo repository, @NotNull String targetName);
/**
* @return RepositoryManager for vcs
@@ -84,5 +85,7 @@ public abstract class PushSupport<Repo extends Repository> {
* @return null if target is valid for selected repository
*/
@Nullable
- public abstract VcsError validate(@NotNull Repository repository, @Nullable String targetToValidate);
+ public abstract VcsError validate(@NotNull Repo repository, @Nullable String targetToValidate);
+
+ public abstract SimpleColoredText renderTarget(@Nullable Target target);
}
diff --git a/platform/dvcs-api/src/com/intellij/dvcs/push/PushTarget.java b/platform/dvcs-api/src/com/intellij/dvcs/push/PushTarget.java
index 87c7244bd77c..d7ed69d0875c 100644
--- a/platform/dvcs-api/src/com/intellij/dvcs/push/PushTarget.java
+++ b/platform/dvcs-api/src/com/intellij/dvcs/push/PushTarget.java
@@ -24,5 +24,6 @@ import org.jetbrains.annotations.NotNull;
public interface PushTarget {
@NotNull
+ //todo rename - > getName or smth
String getPresentation();
}
diff --git a/platform/dvcs-api/src/com/intellij/dvcs/push/Pusher.java b/platform/dvcs-api/src/com/intellij/dvcs/push/Pusher.java
index 6d5fc1611030..306122537660 100644
--- a/platform/dvcs-api/src/com/intellij/dvcs/push/Pusher.java
+++ b/platform/dvcs-api/src/com/intellij/dvcs/push/Pusher.java
@@ -24,16 +24,19 @@ import java.util.Map;
/**
* Base class to execute push command.
*/
-public abstract class Pusher {
+public abstract class Pusher<Repo extends Repository, Source extends PushSource, Target extends PushTarget> {
+
/**
- * Perform push command for all repositories belonged to one vcs.
+ * Perform push for all given repositories.
*
- * @param pushSpecs specify push from and to params
- * @param vcsPushOptionValue specify additional options to push, null if not supported
- * @param force if true then execute force push
+ * @param pushSpecs push specs for each repository telling what to push and where.
+ * @param additionalOption some additional push option(s), which are received from
+ * {@link PushSupport#getVcsPushOptionsPanel() the additional panel} if the plugin has one.
+ * @param force if true then force push should be performed.
*/
- public abstract void push(@NotNull Map<Repository, PushSpec> pushSpecs,
- @Nullable VcsPushOptionValue vcsPushOptionValue,
+ public abstract void push(@NotNull Map<Repo, PushSpec<Source, Target>> pushSpecs,
+ @Nullable VcsPushOptionValue additionalOption,
boolean force);
+
}
diff --git a/platform/dvcs-api/src/com/intellij/dvcs/push/VcsError.java b/platform/dvcs-api/src/com/intellij/dvcs/push/VcsError.java
index de2c640d12b1..b76095629ccd 100644
--- a/platform/dvcs-api/src/com/intellij/dvcs/push/VcsError.java
+++ b/platform/dvcs-api/src/com/intellij/dvcs/push/VcsError.java
@@ -40,4 +40,8 @@ public class VcsError {
myErrorHandleListener.handleError(loader);
}
}
+
+ public static VcsError createEmptyTargetError(@NotNull String name) {
+ return new VcsError("Please, specify remote push path for repository " + name + ".");
+ }
}