tikhomirov@534: /* tikhomirov@534: * Copyright (c) 2013 TMate Software Ltd tikhomirov@534: * tikhomirov@534: * This program is free software; you can redistribute it and/or modify tikhomirov@534: * it under the terms of the GNU General Public License as published by tikhomirov@534: * the Free Software Foundation; version 2 of the License. tikhomirov@534: * tikhomirov@534: * This program is distributed in the hope that it will be useful, tikhomirov@534: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@534: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@534: * GNU General Public License for more details. tikhomirov@534: * tikhomirov@534: * For information on how to redistribute this software under tikhomirov@534: * the terms of a license other than GNU General Public License tikhomirov@534: * contact TMate Software at support@hg4j.com tikhomirov@534: */ tikhomirov@534: package org.tmatesoft.hg.test; tikhomirov@534: tikhomirov@538: import java.io.File; tikhomirov@538: import java.io.FileWriter; tikhomirov@538: import java.nio.ByteBuffer; tikhomirov@538: tikhomirov@534: import org.junit.Test; tikhomirov@538: import org.tmatesoft.hg.repo.CommitFacility; tikhomirov@538: import org.tmatesoft.hg.repo.HgLookup; tikhomirov@538: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@534: tikhomirov@534: /** tikhomirov@534: * tikhomirov@534: * @author Artem Tikhomirov tikhomirov@534: * @author TMate Software Ltd. tikhomirov@534: */ tikhomirov@534: public class TestCommit { tikhomirov@534: tikhomirov@534: @Test tikhomirov@538: public void testCommitToNonEmpty() throws Exception { tikhomirov@538: File repoLoc = RepoUtils.initEmptyTempRepo("test-commit2non-empty"); tikhomirov@538: FileWriter fw = new FileWriter(new File(repoLoc, "file1")); tikhomirov@538: fw.write("hello"); tikhomirov@538: fw.close(); tikhomirov@538: new ExecHelper(new OutputParser.Stub(true), repoLoc).run("hg", "commit", "--addremove", "-m", "FIRST"); tikhomirov@538: // tikhomirov@538: HgRepository hgRepo = new HgLookup().detect(repoLoc); tikhomirov@538: CommitFacility cf = new CommitFacility(hgRepo, 0 /*NO_REVISION*/); tikhomirov@538: // FIXME test diff for processing changed newlines - if a whole line or just changed endings are in the patch! tikhomirov@538: cf.add(hgRepo.getFileNode("file1"), new ByteArraySupplier("hello\nworld".getBytes())); tikhomirov@538: cf.commit("commit 1"); tikhomirov@538: // /tmp/test-commit2non-empty/.hg/ store/data/file1.i dumpData tikhomirov@538: } tikhomirov@538: tikhomirov@538: public static void main(String[] args) throws Exception { tikhomirov@538: new TestCommit().testCommitToNonEmpty(); tikhomirov@538: String input = "abcdefghijklmnopqrstuvwxyz"; tikhomirov@538: ByteArraySupplier bas = new ByteArraySupplier(input.getBytes()); tikhomirov@538: ByteBuffer bb = ByteBuffer.allocate(7); tikhomirov@538: byte[] result = new byte[26]; tikhomirov@538: int rpos = 0; tikhomirov@538: while (bas.read(bb) != -1) { tikhomirov@538: bb.flip(); tikhomirov@538: bb.get(result, rpos, bb.limit()); tikhomirov@538: rpos += bb.limit(); tikhomirov@538: bb.clear(); tikhomirov@538: } tikhomirov@538: if (input.length() != rpos) { tikhomirov@538: throw new AssertionError(); tikhomirov@538: } tikhomirov@538: String output = new String(result); tikhomirov@538: if (!input.equals(output)) { tikhomirov@538: throw new AssertionError(); tikhomirov@538: } tikhomirov@538: System.out.println(output); tikhomirov@538: } tikhomirov@538: tikhomirov@538: static class ByteArraySupplier implements CommitFacility.ByteDataSupplier { tikhomirov@538: tikhomirov@538: private final byte[] data; tikhomirov@538: private int pos = 0; tikhomirov@538: tikhomirov@538: public ByteArraySupplier(byte[] source) { tikhomirov@538: data = source; tikhomirov@538: } tikhomirov@538: tikhomirov@538: public int read(ByteBuffer buf) { tikhomirov@538: if (pos >= data.length) { tikhomirov@538: return -1; tikhomirov@538: } tikhomirov@538: int count = Math.min(buf.remaining(), data.length - pos); tikhomirov@538: buf.put(data, pos, count); tikhomirov@538: pos += count; tikhomirov@538: return count; tikhomirov@538: } tikhomirov@534: } tikhomirov@534: }