diff options
Diffstat (limited to 'platform/dvcs-api/src/com')
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 + "."); + } } |