[git] IDEA-132736 Define remote right from the push dialog
[idea/community.git] / plugins / git4idea / src / git4idea / commands / Git.java
1 /*
2  * Copyright 2000-2012 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package git4idea.commands;
17
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.util.Computable;
20 import com.intellij.openapi.vcs.VcsException;
21 import com.intellij.openapi.vfs.VirtualFile;
22 import git4idea.GitCommit;
23 import git4idea.GitLocalBranch;
24 import git4idea.GitRemoteBranch;
25 import git4idea.repo.GitRepository;
26 import git4idea.reset.GitResetMode;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29
30 import java.io.File;
31 import java.util.Collection;
32 import java.util.List;
33 import java.util.Set;
34
35 public interface Git {
36
37   /**
38    * A generic method to run a Git command, when existing methods like {@link #fetch(GitRepository, String, String, List, String...)}
39    * are not sufficient.
40    * @param handlerConstructor this is needed, since the operation may need to repeat (e.g. in case of authentication failure).
41    *                           make sure to supply a stateless constructor.
42    */
43   @NotNull
44   GitCommandResult runCommand(@NotNull Computable<GitLineHandler> handlerConstructor);
45
46   @NotNull
47   GitCommandResult init(@NotNull Project project, @NotNull VirtualFile root, @NotNull GitLineHandlerListener... listeners);
48
49   @NotNull
50   Set<VirtualFile> untrackedFiles(@NotNull Project project, @NotNull VirtualFile root,
51                                   @Nullable Collection<VirtualFile> files) throws VcsException;
52
53   // relativePaths are guaranteed to fit into command line length limitations.
54   @NotNull
55   Collection<VirtualFile> untrackedFilesNoChunk(@NotNull Project project, @NotNull VirtualFile root,
56                                                 @Nullable List<String> relativePaths) throws VcsException;
57
58   @NotNull
59   GitCommandResult clone(@NotNull Project project, @NotNull File parentDirectory, @NotNull String url, @NotNull String clonedDirectoryName,
60                          @NotNull GitLineHandlerListener... progressListeners);
61
62   @NotNull
63   GitCommandResult config(@NotNull GitRepository repository, String... params);
64
65   @NotNull
66   GitCommandResult diff(@NotNull GitRepository repository, @NotNull List<String> parameters, @NotNull String range);
67
68   @NotNull
69   GitCommandResult merge(@NotNull GitRepository repository, @NotNull String branchToMerge, @Nullable List<String> additionalParams,
70                          @NotNull GitLineHandlerListener... listeners);
71
72   @NotNull
73   GitCommandResult checkout(@NotNull GitRepository repository, @NotNull String reference, @Nullable String newBranch, boolean force,
74                             @NotNull GitLineHandlerListener... listeners);
75
76   @NotNull
77   GitCommandResult checkoutNewBranch(@NotNull GitRepository repository, @NotNull String branchName,
78                                      @Nullable GitLineHandlerListener listener);
79
80   @NotNull
81   GitCommandResult createNewTag(@NotNull GitRepository repository, @NotNull String tagName,
82                                 @Nullable GitLineHandlerListener listener, @NotNull String reference);
83
84   @NotNull
85   GitCommandResult branchDelete(@NotNull GitRepository repository, @NotNull String branchName, boolean force,
86                                 @NotNull GitLineHandlerListener... listeners);
87
88   @NotNull
89   GitCommandResult branchContains(@NotNull GitRepository repository, @NotNull String commit);
90
91   @NotNull
92   GitCommandResult branchCreate(@NotNull GitRepository repository, @NotNull String branchName);
93
94   @NotNull
95   GitCommandResult reset(@NotNull GitRepository repository, @NotNull GitResetMode mode, @NotNull String target,
96                          @NotNull GitLineHandlerListener... listeners);
97
98   @NotNull
99   GitCommandResult resetMerge(@NotNull GitRepository repository, @Nullable String revision);
100
101   @NotNull
102   GitCommandResult tip(@NotNull GitRepository repository, @NotNull String branchName);
103
104   @NotNull
105   GitCommandResult push(@NotNull GitRepository repository, @NotNull String remote, @Nullable String url, @NotNull String spec,
106                         boolean updateTracking, @NotNull GitLineHandlerListener... listeners);
107
108   @NotNull
109   GitCommandResult push(@NotNull GitRepository repository, @NotNull String remote, @Nullable String url, @NotNull String spec,
110                         @NotNull GitLineHandlerListener... listeners);
111
112   @NotNull
113   GitCommandResult push(@NotNull GitRepository repository,
114                         @NotNull GitLocalBranch source,
115                         @NotNull GitRemoteBranch target,
116                         boolean force,
117                         boolean updateTracking,
118                         @Nullable String tagMode,
119                         GitLineHandlerListener... listeners);
120
121   @NotNull
122   GitCommandResult show(@NotNull GitRepository repository, @NotNull String... params);
123
124   @NotNull
125   GitCommandResult cherryPick(@NotNull GitRepository repository, @NotNull String hash, boolean autoCommit,
126                               @NotNull GitLineHandlerListener... listeners);
127
128   @NotNull
129   GitCommandResult getUnmergedFiles(@NotNull GitRepository repository);
130
131   @NotNull
132   GitCommandResult checkAttr(@NotNull GitRepository repository, @NotNull Collection<String> attributes,
133                              @NotNull Collection<VirtualFile> files);
134
135   @NotNull
136   GitCommandResult stashSave(@NotNull GitRepository repository, @NotNull String message);
137
138   @NotNull
139   GitCommandResult stashPop(@NotNull GitRepository repository, @NotNull GitLineHandlerListener... listeners);
140
141   @NotNull
142   List<GitCommit> history(@NotNull GitRepository repository, @NotNull String range);
143
144   @NotNull
145   GitCommandResult fetch(@NotNull GitRepository repository, @NotNull String url, @NotNull String remote,
146                          @NotNull List<GitLineHandlerListener> listeners, String... params);
147
148   @NotNull
149   GitCommandResult addRemote(@NotNull GitRepository repository, @NotNull String name, @NotNull String url);
150 }