comparison test/org/tmatesoft/hg/test/TestCommit.java @ 588:41218d84842a

Update dirstate after commit
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Mon, 29 Apr 2013 16:37:57 +0200
parents 73c20c648c1f
children e447384f3771
comparison
equal deleted inserted replaced
587:a52f4cc56f9c 588:41218d84842a
22 import java.io.File; 22 import java.io.File;
23 import java.io.IOException; 23 import java.io.IOException;
24 import java.nio.ByteBuffer; 24 import java.nio.ByteBuffer;
25 import java.util.List; 25 import java.util.List;
26 26
27 import org.junit.Rule;
27 import org.junit.Test; 28 import org.junit.Test;
28 import org.tmatesoft.hg.core.HgAddRemoveCommand; 29 import org.tmatesoft.hg.core.HgAddRemoveCommand;
29 import org.tmatesoft.hg.core.HgCatCommand; 30 import org.tmatesoft.hg.core.HgCatCommand;
30 import org.tmatesoft.hg.core.HgChangeset; 31 import org.tmatesoft.hg.core.HgChangeset;
31 import org.tmatesoft.hg.core.HgCommitCommand; 32 import org.tmatesoft.hg.core.HgCommitCommand;
32 import org.tmatesoft.hg.core.HgLogCommand; 33 import org.tmatesoft.hg.core.HgLogCommand;
33 import org.tmatesoft.hg.core.HgRevertCommand;
34 import org.tmatesoft.hg.core.HgStatus.Kind; 34 import org.tmatesoft.hg.core.HgStatus.Kind;
35 import org.tmatesoft.hg.core.HgStatusCommand; 35 import org.tmatesoft.hg.core.HgStatusCommand;
36 import org.tmatesoft.hg.core.Nodeid; 36 import org.tmatesoft.hg.core.Nodeid;
37 import org.tmatesoft.hg.internal.ByteArrayChannel; 37 import org.tmatesoft.hg.internal.ByteArrayChannel;
38 import org.tmatesoft.hg.internal.FileContentSupplier; 38 import org.tmatesoft.hg.internal.FileContentSupplier;
50 * @author Artem Tikhomirov 50 * @author Artem Tikhomirov
51 * @author TMate Software Ltd. 51 * @author TMate Software Ltd.
52 */ 52 */
53 public class TestCommit { 53 public class TestCommit {
54 54
55 @Rule
56 public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
57
55 @Test 58 @Test
56 public void testCommitToNonEmpty() throws Exception { 59 public void testCommitToNonEmpty() throws Exception {
57 File repoLoc = RepoUtils.initEmptyTempRepo("test-commit2non-empty"); 60 File repoLoc = RepoUtils.initEmptyTempRepo("test-commit2non-empty");
58 RepoUtils.createFile(new File(repoLoc, "file1"), "hello\n"); 61 RepoUtils.createFile(new File(repoLoc, "file1"), "hello\n");
59 new ExecHelper(new OutputParser.Stub(), repoLoc).run("hg", "commit", "--addremove", "-m", "FIRST"); 62 new ExecHelper(new OutputParser.Stub(), repoLoc).run("hg", "commit", "--addremove", "-m", "FIRST");
65 HgDataFile df = hgRepo.getFileNode("file1"); 68 HgDataFile df = hgRepo.getFileNode("file1");
66 cf.add(df, new ByteArraySupplier("hello\nworld".getBytes())); 69 cf.add(df, new ByteArraySupplier("hello\nworld".getBytes()));
67 Nodeid secondRev = cf.commit("SECOND"); 70 Nodeid secondRev = cf.commit("SECOND");
68 // 71 //
69 List<HgChangeset> commits = new HgLogCommand(hgRepo).execute(); 72 List<HgChangeset> commits = new HgLogCommand(hgRepo).execute();
70 assertEquals(2, commits.size()); 73 errorCollector.assertEquals(2, commits.size());
71 HgChangeset c1 = commits.get(0); 74 HgChangeset c1 = commits.get(0);
72 HgChangeset c2 = commits.get(1); 75 HgChangeset c2 = commits.get(1);
73 assertEquals("FIRST", c1.getComment()); 76 errorCollector.assertEquals("FIRST", c1.getComment());
74 assertEquals("SECOND", c2.getComment()); 77 errorCollector.assertEquals("SECOND", c2.getComment());
75 assertEquals(df.getPath(), c2.getAffectedFiles().get(0)); 78 errorCollector.assertEquals(df.getPath(), c2.getAffectedFiles().get(0));
76 assertEquals(c1.getNodeid(), c2.getFirstParentRevision()); 79 errorCollector.assertEquals(c1.getNodeid(), c2.getFirstParentRevision());
77 assertEquals(Nodeid.NULL, c2.getSecondParentRevision()); 80 errorCollector.assertEquals(Nodeid.NULL, c2.getSecondParentRevision());
78 assertEquals(secondRev, c2.getNodeid()); 81 errorCollector.assertEquals(secondRev, c2.getNodeid());
79 } 82 }
80 83
81 @Test 84 @Test
82 public void testCommitToEmpty() throws Exception { 85 public void testCommitToEmpty() throws Exception {
83 File repoLoc = RepoUtils.initEmptyTempRepo("test-commit2empty"); 86 File repoLoc = RepoUtils.initEmptyTempRepo("test-commit2empty");
92 final byte[] initialContent = "hello\nworld".getBytes(); 95 final byte[] initialContent = "hello\nworld".getBytes();
93 cf.add(df, new ByteArraySupplier(initialContent)); 96 cf.add(df, new ByteArraySupplier(initialContent));
94 String comment = "commit 1"; 97 String comment = "commit 1";
95 Nodeid c1Rev = cf.commit(comment); 98 Nodeid c1Rev = cf.commit(comment);
96 List<HgChangeset> commits = new HgLogCommand(hgRepo).execute(); 99 List<HgChangeset> commits = new HgLogCommand(hgRepo).execute();
97 assertEquals(1, commits.size()); 100 errorCollector.assertEquals(1, commits.size());
98 HgChangeset c1 = commits.get(0); 101 HgChangeset c1 = commits.get(0);
99 assertEquals(1, c1.getAffectedFiles().size()); 102 errorCollector.assertEquals(1, c1.getAffectedFiles().size());
100 assertEquals(df.getPath(), c1.getAffectedFiles().get(0)); 103 errorCollector.assertEquals(df.getPath(), c1.getAffectedFiles().get(0));
101 assertEquals(0, c1.getRevisionIndex()); 104 errorCollector.assertEquals(0, c1.getRevisionIndex());
102 assertEquals(Nodeid.NULL, c1.getFirstParentRevision()); 105 errorCollector.assertEquals(Nodeid.NULL, c1.getFirstParentRevision());
103 assertEquals(Nodeid.NULL, c1.getSecondParentRevision()); 106 errorCollector.assertEquals(Nodeid.NULL, c1.getSecondParentRevision());
104 assertEquals(HgRepository.DEFAULT_BRANCH_NAME, c1.getBranch()); 107 errorCollector.assertEquals(HgRepository.DEFAULT_BRANCH_NAME, c1.getBranch());
105 assertEquals(comment, c1.getComment()); 108 errorCollector.assertEquals(comment, c1.getComment());
106 assertEquals(c1Rev, c1.getNodeid()); 109 errorCollector.assertEquals(c1Rev, c1.getNodeid());
107 ByteArrayChannel bac = new ByteArrayChannel(); 110 ByteArrayChannel bac = new ByteArrayChannel();
108 new HgCatCommand(hgRepo).file(df.getPath()).execute(bac); 111 new HgCatCommand(hgRepo).file(df.getPath()).execute(bac);
109 assertArrayEquals(initialContent, bac.toArray()); 112 assertArrayEquals(initialContent, bac.toArray());
110 } 113 }
111 114
132 // FIXME requirement to reload repository is disgusting 135 // FIXME requirement to reload repository is disgusting
133 hgRepo = new HgLookup().detect(repoLoc); 136 hgRepo = new HgLookup().detect(repoLoc);
134 List<HgChangeset> commits = new HgLogCommand(hgRepo).range(parentCsetRevIndex+1, TIP).execute(); 137 List<HgChangeset> commits = new HgLogCommand(hgRepo).range(parentCsetRevIndex+1, TIP).execute();
135 assertEquals(1, commits.size()); 138 assertEquals(1, commits.size());
136 HgChangeset c1 = commits.get(0); 139 HgChangeset c1 = commits.get(0);
137 assertEquals(c1.getNodeid(), commitRev1); 140 errorCollector.assertEquals(c1.getNodeid(), commitRev1);
138 assertEquals("branch1", c1.getBranch()); 141 errorCollector.assertEquals("branch1", c1.getBranch());
139 assertEquals("FIRST", c1.getComment()); 142 errorCollector.assertEquals("FIRST", c1.getComment());
140 // 143 //
141 assertHgVerifyOk(repoLoc); 144 assertHgVerifyOk(repoLoc);
142 } 145 }
143 146
144 /** 147 /**
162 // 165 //
163 // FIXME requirement to reload repository is disgusting 166 // FIXME requirement to reload repository is disgusting
164 hgRepo = new HgLookup().detect(repoLoc); 167 hgRepo = new HgLookup().detect(repoLoc);
165 List<HgChangeset> commits = new HgLogCommand(hgRepo).changeset(commitRev).execute(); 168 List<HgChangeset> commits = new HgLogCommand(hgRepo).changeset(commitRev).execute();
166 HgChangeset cmt = commits.get(0); 169 HgChangeset cmt = commits.get(0);
167 assertEquals(1, cmt.getAddedFiles().size()); 170 errorCollector.assertEquals(1, cmt.getAddedFiles().size());
168 assertEquals("xx", cmt.getAddedFiles().get(0).getPath().toString()); 171 errorCollector.assertEquals("xx", cmt.getAddedFiles().get(0).getPath().toString());
169 assertEquals(1, cmt.getRemovedFiles().size()); 172 errorCollector.assertEquals(1, cmt.getRemovedFiles().size());
170 assertEquals("d", cmt.getRemovedFiles().get(0).toString()); 173 errorCollector.assertEquals("d", cmt.getRemovedFiles().get(0).toString());
171 ByteArrayChannel sink = new ByteArrayChannel(); 174 ByteArrayChannel sink = new ByteArrayChannel();
172 new HgCatCommand(hgRepo).file(Path.create("xx")).changeset(commitRev).execute(sink); 175 new HgCatCommand(hgRepo).file(Path.create("xx")).changeset(commitRev).execute(sink);
173 assertArrayEquals("xyz".getBytes(), sink.toArray()); 176 assertArrayEquals("xyz".getBytes(), sink.toArray());
174 // 177 //
175 assertHgVerifyOk(repoLoc); 178 assertHgVerifyOk(repoLoc);
212 List<HgChangeset> commits = new HgLogCommand(hgRepo).range(parentCsetRevIndex+1, TIP).execute(); 215 List<HgChangeset> commits = new HgLogCommand(hgRepo).range(parentCsetRevIndex+1, TIP).execute();
213 assertEquals(3, commits.size()); 216 assertEquals(3, commits.size());
214 HgChangeset c1 = commits.get(0); 217 HgChangeset c1 = commits.get(0);
215 HgChangeset c2 = commits.get(1); 218 HgChangeset c2 = commits.get(1);
216 HgChangeset c3 = commits.get(2); 219 HgChangeset c3 = commits.get(2);
217 assertEquals(c1.getNodeid(), commitRev1); 220 errorCollector.assertEquals(c1.getNodeid(), commitRev1);
218 assertEquals(c2.getNodeid(), commitRev2); 221 errorCollector.assertEquals(c2.getNodeid(), commitRev2);
219 assertEquals(c3.getNodeid(), commitRev3); 222 errorCollector.assertEquals(c3.getNodeid(), commitRev3);
220 assertEquals("branch1", c1.getBranch()); 223 errorCollector.assertEquals("branch1", c1.getBranch());
221 assertEquals("branch2", c2.getBranch()); 224 errorCollector.assertEquals("branch2", c2.getBranch());
222 assertEquals(DEFAULT_BRANCH_NAME, c3.getBranch()); 225 errorCollector.assertEquals(DEFAULT_BRANCH_NAME, c3.getBranch());
223 assertEquals("FIRST", c1.getComment()); 226 errorCollector.assertEquals("FIRST", c1.getComment());
224 assertEquals("SECOND", c2.getComment()); 227 errorCollector.assertEquals("SECOND", c2.getComment());
225 assertEquals("THIRD", c3.getComment()); 228 errorCollector.assertEquals("THIRD", c3.getComment());
226 assertHgVerifyOk(repoLoc); 229 assertHgVerifyOk(repoLoc);
227 } 230 }
228 231
229 @Test 232 @Test
230 public void testCommandBasics() throws Exception { 233 public void testCommandBasics() throws Exception {
237 RepoUtils.modifyFileAppend(fileB, " 1 \n"); 240 RepoUtils.modifyFileAppend(fileB, " 1 \n");
238 241
239 HgCommitCommand cmd = new HgCommitCommand(hgRepo); 242 HgCommitCommand cmd = new HgCommitCommand(hgRepo);
240 assertFalse(cmd.isMergeCommit()); 243 assertFalse(cmd.isMergeCommit());
241 Outcome r = cmd.message("FIRST").execute(); 244 Outcome r = cmd.message("FIRST").execute();
242 assertTrue(r.isOk()); 245 errorCollector.assertTrue(r.isOk());
243 Nodeid c1 = cmd.getCommittedRevision(); 246 Nodeid c1 = cmd.getCommittedRevision();
244 247
245 hgRepo = new HgLookup().detect(repoLoc); 248 // check that modified files are no longer reported as such
246 // 249 hgRepo = new HgLookup().detect(repoLoc);
247 new HgRevertCommand(hgRepo).file(dfB.getPath()).execute(); // FIXME Hack to emulate dirstate update
248 //
249 TestStatus.StatusCollector status = new TestStatus.StatusCollector(); 250 TestStatus.StatusCollector status = new TestStatus.StatusCollector();
250 new HgStatusCommand(hgRepo).defaults().execute(status); 251 new HgStatusCommand(hgRepo).all().execute(status);
251 assertTrue(status.getErrors().isEmpty()); 252 errorCollector.assertTrue(status.getErrors().isEmpty());
252 assertTrue(status.get(Kind.Modified).isEmpty()); 253 errorCollector.assertTrue(status.get(Kind.Modified).isEmpty());
254 errorCollector.assertEquals(1, status.get(dfB.getPath()).size());
255 errorCollector.assertTrue(status.get(dfB.getPath()).contains(Kind.Clean));
253 256
254 HgDataFile dfD = hgRepo.getFileNode("d"); 257 HgDataFile dfD = hgRepo.getFileNode("d");
255 assertTrue("[sanity]", dfD.exists()); 258 assertTrue("[sanity]", dfD.exists());
256 File fileD = new File(repoLoc, "d"); 259 File fileD = new File(repoLoc, "d");
257 assertTrue("[sanity]", fileD.canRead()); 260 assertTrue("[sanity]", fileD.canRead());
258 // 261 //
259 RepoUtils.modifyFileAppend(fileD, " 1 \n"); 262 RepoUtils.modifyFileAppend(fileD, " 1 \n");
260 cmd = new HgCommitCommand(hgRepo); 263 cmd = new HgCommitCommand(hgRepo);
261 assertFalse(cmd.isMergeCommit()); 264 assertFalse(cmd.isMergeCommit());
262 r = cmd.message("SECOND").execute(); 265 r = cmd.message("SECOND").execute();
263 assertTrue(r.isOk()); 266 errorCollector.assertTrue(r.isOk());
264 Nodeid c2 = cmd.getCommittedRevision(); 267 Nodeid c2 = cmd.getCommittedRevision();
265 // 268 //
266 hgRepo = new HgLookup().detect(repoLoc); 269 hgRepo = new HgLookup().detect(repoLoc);
267 int lastRev = hgRepo.getChangelog().getLastRevision(); 270 int lastRev = hgRepo.getChangelog().getLastRevision();
268 List<HgChangeset> csets = new HgLogCommand(hgRepo).range(lastRev-1, lastRev).execute(); 271 List<HgChangeset> csets = new HgLogCommand(hgRepo).range(lastRev-1, lastRev).execute();
269 assertEquals(csets.get(0).getNodeid(), c1); 272 errorCollector.assertEquals(csets.get(0).getNodeid(), c1);
270 assertEquals(csets.get(1).getNodeid(), c2); 273 errorCollector.assertEquals(csets.get(1).getNodeid(), c2);
271 assertEquals(csets.get(0).getComment(), "FIRST"); 274 errorCollector.assertEquals(csets.get(0).getComment(), "FIRST");
272 assertEquals(csets.get(1).getComment(), "SECOND"); 275 errorCollector.assertEquals(csets.get(1).getComment(), "SECOND");
273 assertHgVerifyOk(repoLoc); 276 assertHgVerifyOk(repoLoc);
274 } 277 }
275 278
276 private void assertHgVerifyOk(File repoLoc) throws InterruptedException, IOException { 279 private void assertHgVerifyOk(File repoLoc) throws InterruptedException, IOException {
277 ExecHelper verifyRun = new ExecHelper(new OutputParser.Stub(), repoLoc); 280 ExecHelper verifyRun = new ExecHelper(new OutputParser.Stub(), repoLoc);
278 verifyRun.run("hg", "verify"); 281 verifyRun.run("hg", "verify");
279 assertEquals("hg verify", 0, verifyRun.getExitValue()); 282 errorCollector.assertEquals("hg verify", 0, verifyRun.getExitValue());
280 } 283 }
281 284
282 public static void main(String[] args) throws Exception { 285 public static void main(String[] args) throws Exception {
283 new TestCommit().testCommitToEmpty(); 286 new TestCommit().testCommitToEmpty();
284 if (Boolean.TRUE.booleanValue()) { 287 if (Boolean.TRUE.booleanValue()) {