Merge remote-tracking branch 'origin/master'
[idea/community.git] / plugins / git4idea / tests / git4idea / test / GitExec.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.test;
17
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.vfs.VirtualFile;
20 import com.intellij.testFramework.AbstractVcsTestCase;
21 import com.intellij.testFramework.VfsTestUtil;
22 import com.intellij.util.ui.UIUtil;
23 import git4idea.repo.GitRepository;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 import java.io.File;
28 import java.io.IOException;
29
30 /**
31  * @author Kirill Likhodedov
32  */
33 public class GitExec {
34
35   public static void refresh(@NotNull GitRepository repository) {
36     repository.getRoot().refresh(false, true);
37   }
38
39   public static GitRepository init(@NotNull Project project, @NotNull VirtualFile root) throws IOException {
40     new GitTestRunEnv(new File(root.getPath())).run("init");
41     root.refresh(false, true);
42     return GitRepository.getFullInstance(root, project, project);
43   }
44
45   public static void create(@NotNull GitRepository repository, @NotNull String filePath) {
46     create(repository, filePath, "content");
47   }
48
49   public static void create(final GitRepository repository, final String filePath, @NotNull final String content) {
50     UIUtil.invokeAndWaitIfNeeded(new Runnable() {
51       @Override public void run() {
52         VfsTestUtil.createFile(repository.getRoot(), filePath, content);
53       }
54     });
55   }
56
57   public static void edit(final GitRepository repository, String filePath, final String newContent) {
58     final VirtualFile file = repository.getRoot().findFileByRelativePath(filePath);
59     UIUtil.invokeAndWaitIfNeeded(new Runnable() {
60       @Override public void run() {
61         AbstractVcsTestCase.editFileInCommand(repository.getProject(), file, newContent);
62       }
63     });
64   }
65   
66   @NotNull
67   public static String read(final @NotNull GitRepository repository, @NotNull String filePath) throws IOException {
68     final VirtualFile file = repository.getRoot().findFileByRelativePath(filePath);
69     assert file != null;
70     return new String(file.contentsToByteArray());
71   }
72
73   public static void add(@NotNull GitRepository repository, @NotNull String filePath) throws IOException {
74     run(repository, "add", filePath);
75   }
76
77   public static void add(@NotNull GitRepository repository) throws IOException {
78     run(repository, "add", ".");
79   }
80
81   public static void commit(@NotNull GitRepository repository) throws IOException {
82     run(repository, "commit", "-m", "message");
83   }
84   
85   public static void addCommit(@NotNull GitRepository repository, @NotNull String filePath) throws IOException {
86     add(repository, filePath);
87     commit(repository);
88   }
89   
90   public static void addCommit(@NotNull GitRepository repository) throws IOException {
91     add(repository);
92     commit(repository);
93   }
94
95   public static void createAddCommit(@NotNull GitRepository repository, @NotNull String filePath) throws IOException {
96     create(repository, filePath);
97     addCommit(repository, filePath);
98   }
99   
100   @NotNull
101   public static String branch(@NotNull GitRepository repository, String... params) throws IOException {
102     return run(repository, "branch", params);
103   }
104
105   @Nullable
106   public static String currentBranch(@NotNull GitRepository repository) throws IOException {
107     String[] branches = branch(repository).split("\n");
108     for (String branch : branches) {
109       if (branch.trim().startsWith("*")) {
110         return branch.trim().substring(1).trim();
111       }
112     }
113     return null;
114   }
115
116   public static void checkout(@NotNull GitRepository repository, String... params) throws IOException {
117     run(repository, "checkout", params);
118   }
119
120   public static void merge(@NotNull GitRepository repository, @NotNull String branch) throws IOException {
121     run(repository, "merge", branch);
122   }
123
124   @NotNull
125   private static String run(@NotNull GitRepository repository, @NotNull String command, String... params) throws IOException {
126     return new GitTestRunEnv(new File(repository.getRoot().getPath())).run(command, params);
127   }
128
129 }