tikhomirov@201: /* tikhomirov@201: * Copyright (c) 2011 TMate Software Ltd tikhomirov@201: * tikhomirov@201: * This program is free software; you can redistribute it and/or modify tikhomirov@201: * it under the terms of the GNU General Public License as published by tikhomirov@201: * the Free Software Foundation; version 2 of the License. tikhomirov@201: * tikhomirov@201: * This program is distributed in the hope that it will be useful, tikhomirov@201: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@201: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@201: * GNU General Public License for more details. tikhomirov@201: * tikhomirov@201: * For information on how to redistribute this software under tikhomirov@201: * the terms of a license other than GNU General Public License tikhomirov@201: * contact TMate Software at support@hg4j.com tikhomirov@201: */ tikhomirov@201: package org.tmatesoft.hg.test; tikhomirov@201: tikhomirov@201: import java.io.File; tikhomirov@201: import java.io.IOException; tikhomirov@201: import java.util.Arrays; tikhomirov@201: import java.util.LinkedList; tikhomirov@201: import java.util.List; tikhomirov@201: tikhomirov@201: import junit.framework.Assert; tikhomirov@201: tikhomirov@201: import org.junit.Rule; tikhomirov@201: import org.tmatesoft.hg.core.HgCloneCommand; tikhomirov@201: import org.tmatesoft.hg.repo.HgRemoteRepository; tikhomirov@201: tikhomirov@201: /** tikhomirov@201: * tikhomirov@201: * @author Artem Tikhomirov tikhomirov@201: * @author TMate Software Ltd. tikhomirov@201: */ tikhomirov@201: public class TestClone { tikhomirov@201: tikhomirov@201: @Rule tikhomirov@201: public ErrorCollectorExt errorCollector = new ErrorCollectorExt(); tikhomirov@201: tikhomirov@201: public static void main(String[] args) throws Exception { tikhomirov@201: TestClone t = new TestClone(); tikhomirov@201: t.testSimpleClone(); tikhomirov@201: } tikhomirov@201: tikhomirov@201: public TestClone() { tikhomirov@201: } tikhomirov@201: tikhomirov@201: public void testSimpleClone() throws Exception { tikhomirov@201: int x = 0; tikhomirov@201: final File tempDir = new File(System.getProperty("java.io.tmpdir")); tikhomirov@201: for (HgRemoteRepository hgRemote : Configuration.get().allRemote()) { tikhomirov@201: HgCloneCommand cmd = new HgCloneCommand(); tikhomirov@201: cmd.source(hgRemote); tikhomirov@201: File dest = new File(tempDir, "test-clone-" + x++); tikhomirov@201: if (dest.exists()) { tikhomirov@201: rmdir(dest); tikhomirov@201: } tikhomirov@201: cmd.destination(dest); tikhomirov@201: cmd.execute(); tikhomirov@201: verify(hgRemote, dest); tikhomirov@201: } tikhomirov@201: } tikhomirov@201: tikhomirov@201: private void verify(HgRemoteRepository hgRemote, File dest) throws Exception { tikhomirov@201: OutputParser noop = new OutputParser() { tikhomirov@201: public void parse(CharSequence seq) { tikhomirov@201: // no-op tikhomirov@201: } tikhomirov@201: }; tikhomirov@201: ExecHelper eh = new ExecHelper(noop, dest); tikhomirov@201: eh.run("hg", "verify"); tikhomirov@201: Assert.assertEquals(0, eh.getExitValue()); tikhomirov@201: eh.run("hg", "out", hgRemote.getLocation()); tikhomirov@201: Assert.assertEquals(1, eh.getExitValue()); tikhomirov@201: eh.run("hg", "in", hgRemote.getLocation()); tikhomirov@201: Assert.assertEquals(1, eh.getExitValue()); tikhomirov@201: } tikhomirov@201: tikhomirov@201: private static void rmdir(File dest) throws IOException { tikhomirov@201: LinkedList queue = new LinkedList(); tikhomirov@201: queue.addAll(Arrays.asList(dest.listFiles())); tikhomirov@201: while (!queue.isEmpty()) { tikhomirov@201: File next = queue.removeFirst(); tikhomirov@201: if (next.isDirectory()) { tikhomirov@201: List files = Arrays.asList(next.listFiles()); tikhomirov@201: if (!files.isEmpty()) { tikhomirov@201: queue.addAll(files); tikhomirov@201: queue.add(next); tikhomirov@201: } tikhomirov@201: // fall through tikhomirov@201: } tikhomirov@201: next.delete(); tikhomirov@201: } tikhomirov@201: dest.delete(); tikhomirov@201: } tikhomirov@201: }