@Test
public void testCommandBasics() throws Exception {
File repoLoc = RepoUtils.cloneRepoToTempLocation("log-1", "test-commit-cmd", false);
// PhasesHelper relies on file existence to tell phase enablement
RepoUtils.createFile(new File(repoLoc, HgRepositoryFiles.Phaseroots.getPath()), "");
HgRepository hgRepo = new HgLookup().detect(repoLoc);
HgDataFile dfB = hgRepo.getFileNode("b");
assertTrue("[sanity]", dfB.exists());
File fileB = new File(repoLoc, "b");
assertTrue("[sanity]", fileB.canRead());
RepoUtils.modifyFileAppend(fileB, " 1 \n");
HgCommitCommand cmd = new HgCommitCommand(hgRepo);
assertFalse(cmd.isMergeCommit());
Outcome r = cmd.message("FIRST").execute();
errorCollector.assertTrue(r.isOk());
Nodeid c1 = cmd.getCommittedRevision();
// check that modified files are no longer reported as such
TestStatus.StatusCollector status = new TestStatus.StatusCollector();
new HgStatusCommand(hgRepo).all().execute(status);
errorCollector.assertTrue(status.getErrors().isEmpty());
errorCollector.assertTrue(status.get(Kind.Modified).isEmpty());
errorCollector.assertEquals(1, status.get(dfB.getPath()).size());
errorCollector.assertTrue(status.get(dfB.getPath()).contains(Kind.Clean));
HgDataFile dfD = hgRepo.getFileNode("d");
assertTrue("[sanity]", dfD.exists());
File fileD = new File(repoLoc, "d");
assertTrue("[sanity]", fileD.canRead());
//
RepoUtils.modifyFileAppend(fileD, " 1 \n");
cmd = new HgCommitCommand(hgRepo);
assertFalse(cmd.isMergeCommit());
r = cmd.message("SECOND").execute();
errorCollector.assertTrue(r.isOk());
Nodeid c2 = cmd.getCommittedRevision();
//
errorCollector.assertEquals("SECOND", hgRepo.getCommitLastMessage());
//
int lastRev = hgRepo.getChangelog().getLastRevision();
List<HgChangeset> csets = new HgLogCommand(hgRepo).range(lastRev-1, lastRev).execute();
errorCollector.assertEquals(csets.get(0).getNodeid(), c1);
errorCollector.assertEquals(csets.get(1).getNodeid(), c2);
errorCollector.assertEquals(csets.get(0).getComment(), "FIRST");
errorCollector.assertEquals(csets.get(1).getComment(), "SECOND");
RepoUtils.assertHgVerifyOk(errorCollector, repoLoc);
// new commits are drafts by default, check our commit respects this
// TODO more tests with children of changesets with draft, secret or public phases (latter -
// new commit is child of public, but there are other commits with draft/secret phases - ensure they are intact)
assertEquals(HgPhase.Draft, HgPhase.parse(hgRepo.getConfiguration().getStringValue("phases", "new-commit", HgPhase.Draft.mercurialString())));
errorCollector.assertEquals(HgPhase.Draft, csets.get(0).getPhase());
errorCollector.assertEquals(HgPhase.Draft, csets.get(1).getPhase());
}