Mercurial > hg4j
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()) { |