Mercurial > hg4j
comparison test/org/tmatesoft/hg/test/TestCommit.java @ 586:73c20c648c1f
HgCommitCommand initial support
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 26 Apr 2013 18:38:41 +0200 |
parents | 78a9e26e670d |
children | 41218d84842a |
comparison
equal
deleted
inserted
replaced
585:b47ef0d2777b | 586:73c20c648c1f |
---|---|
16 */ | 16 */ |
17 package org.tmatesoft.hg.test; | 17 package org.tmatesoft.hg.test; |
18 | 18 |
19 import static org.junit.Assert.*; | 19 import static org.junit.Assert.*; |
20 import static org.tmatesoft.hg.repo.HgRepository.*; | 20 import static org.tmatesoft.hg.repo.HgRepository.*; |
21 import static org.tmatesoft.hg.repo.HgRepository.DEFAULT_BRANCH_NAME; | |
22 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION; | |
23 | 21 |
24 import java.io.File; | 22 import java.io.File; |
25 import java.io.FileInputStream; | |
26 import java.io.IOException; | 23 import java.io.IOException; |
27 import java.nio.ByteBuffer; | 24 import java.nio.ByteBuffer; |
28 import java.nio.channels.FileChannel; | |
29 import java.util.List; | 25 import java.util.List; |
30 | 26 |
31 import org.junit.Test; | 27 import org.junit.Test; |
32 import org.tmatesoft.hg.core.HgAddRemoveCommand; | 28 import org.tmatesoft.hg.core.HgAddRemoveCommand; |
33 import org.tmatesoft.hg.core.HgCatCommand; | 29 import org.tmatesoft.hg.core.HgCatCommand; |
34 import org.tmatesoft.hg.core.HgChangeset; | 30 import org.tmatesoft.hg.core.HgChangeset; |
31 import org.tmatesoft.hg.core.HgCommitCommand; | |
35 import org.tmatesoft.hg.core.HgLogCommand; | 32 import org.tmatesoft.hg.core.HgLogCommand; |
33 import org.tmatesoft.hg.core.HgRevertCommand; | |
34 import org.tmatesoft.hg.core.HgStatus.Kind; | |
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.repo.CommitFacility; | 39 import org.tmatesoft.hg.repo.CommitFacility; |
39 import org.tmatesoft.hg.repo.HgDataFile; | 40 import org.tmatesoft.hg.repo.HgDataFile; |
40 import org.tmatesoft.hg.repo.HgLookup; | 41 import org.tmatesoft.hg.repo.HgLookup; |
41 import org.tmatesoft.hg.repo.HgRepository; | 42 import org.tmatesoft.hg.repo.HgRepository; |
43 import org.tmatesoft.hg.util.Outcome; | |
42 import org.tmatesoft.hg.util.Path; | 44 import org.tmatesoft.hg.util.Path; |
43 | 45 |
44 /** | 46 /** |
45 * Handy for debug to see patch content: | 47 * Handy for debug to see patch content: |
46 * ...RevlogDump /tmp/test-commit2non-empty/.hg/ store/data/file1.i dumpData | 48 * ...RevlogDump /tmp/test-commit2non-empty/.hg/ store/data/file1.i dumpData |
222 assertEquals("SECOND", c2.getComment()); | 224 assertEquals("SECOND", c2.getComment()); |
223 assertEquals("THIRD", c3.getComment()); | 225 assertEquals("THIRD", c3.getComment()); |
224 assertHgVerifyOk(repoLoc); | 226 assertHgVerifyOk(repoLoc); |
225 } | 227 } |
226 | 228 |
229 @Test | |
230 public void testCommandBasics() throws Exception { | |
231 File repoLoc = RepoUtils.cloneRepoToTempLocation("log-1", "test-commit-cmd", false); | |
232 HgRepository hgRepo = new HgLookup().detect(repoLoc); | |
233 HgDataFile dfB = hgRepo.getFileNode("b"); | |
234 assertTrue("[sanity]", dfB.exists()); | |
235 File fileB = new File(repoLoc, "b"); | |
236 assertTrue("[sanity]", fileB.canRead()); | |
237 RepoUtils.modifyFileAppend(fileB, " 1 \n"); | |
238 | |
239 HgCommitCommand cmd = new HgCommitCommand(hgRepo); | |
240 assertFalse(cmd.isMergeCommit()); | |
241 Outcome r = cmd.message("FIRST").execute(); | |
242 assertTrue(r.isOk()); | |
243 Nodeid c1 = cmd.getCommittedRevision(); | |
244 | |
245 hgRepo = new HgLookup().detect(repoLoc); | |
246 // | |
247 new HgRevertCommand(hgRepo).file(dfB.getPath()).execute(); // FIXME Hack to emulate dirstate update | |
248 // | |
249 TestStatus.StatusCollector status = new TestStatus.StatusCollector(); | |
250 new HgStatusCommand(hgRepo).defaults().execute(status); | |
251 assertTrue(status.getErrors().isEmpty()); | |
252 assertTrue(status.get(Kind.Modified).isEmpty()); | |
253 | |
254 HgDataFile dfD = hgRepo.getFileNode("d"); | |
255 assertTrue("[sanity]", dfD.exists()); | |
256 File fileD = new File(repoLoc, "d"); | |
257 assertTrue("[sanity]", fileD.canRead()); | |
258 // | |
259 RepoUtils.modifyFileAppend(fileD, " 1 \n"); | |
260 cmd = new HgCommitCommand(hgRepo); | |
261 assertFalse(cmd.isMergeCommit()); | |
262 r = cmd.message("SECOND").execute(); | |
263 assertTrue(r.isOk()); | |
264 Nodeid c2 = cmd.getCommittedRevision(); | |
265 // | |
266 hgRepo = new HgLookup().detect(repoLoc); | |
267 int lastRev = hgRepo.getChangelog().getLastRevision(); | |
268 List<HgChangeset> csets = new HgLogCommand(hgRepo).range(lastRev-1, lastRev).execute(); | |
269 assertEquals(csets.get(0).getNodeid(), c1); | |
270 assertEquals(csets.get(1).getNodeid(), c2); | |
271 assertEquals(csets.get(0).getComment(), "FIRST"); | |
272 assertEquals(csets.get(1).getComment(), "SECOND"); | |
273 assertHgVerifyOk(repoLoc); | |
274 } | |
275 | |
227 private void assertHgVerifyOk(File repoLoc) throws InterruptedException, IOException { | 276 private void assertHgVerifyOk(File repoLoc) throws InterruptedException, IOException { |
228 ExecHelper verifyRun = new ExecHelper(new OutputParser.Stub(), repoLoc); | 277 ExecHelper verifyRun = new ExecHelper(new OutputParser.Stub(), repoLoc); |
229 verifyRun.run("hg", "verify"); | 278 verifyRun.run("hg", "verify"); |
230 assertEquals("hg verify", 0, verifyRun.getExitValue()); | 279 assertEquals("hg verify", 0, verifyRun.getExitValue()); |
231 } | 280 } |
273 buf.put(data, pos, count); | 322 buf.put(data, pos, count); |
274 pos += count; | 323 pos += count; |
275 return count; | 324 return count; |
276 } | 325 } |
277 } | 326 } |
278 | |
279 static class FileContentSupplier implements CommitFacility.ByteDataSupplier { | |
280 private final FileChannel channel; | |
281 private IOException error; | |
282 | |
283 public FileContentSupplier(File f) throws IOException { | |
284 if (!f.canRead()) { | |
285 throw new IOException(String.format("Can't read file %s", f)); | |
286 } | |
287 channel = new FileInputStream(f).getChannel(); | |
288 } | |
289 | |
290 public int read(ByteBuffer buf) { | |
291 if (error != null) { | |
292 return -1; | |
293 } | |
294 try { | |
295 return channel.read(buf); | |
296 } catch (IOException ex) { | |
297 error = ex; | |
298 } | |
299 return -1; | |
300 } | |
301 | |
302 public void done() throws IOException { | |
303 channel.close(); | |
304 if (error != null) { | |
305 throw error; | |
306 } | |
307 } | |
308 } | |
309 } | 327 } |