From d60001c83bfd2dd5170dc1a9377d6eec422b8619 Mon Sep 17 00:00:00 2001 From: Ketan Padegaonkar Date: Thu, 19 May 2011 14:02:02 +0530 Subject: [PATCH] Add GitCloneTaskTest Change-Id: Iec8cd032d8d659a896d909f9094f76b7d35147e6 Signed-off-by: Chris Aniszczyk --- .../META-INF/MANIFEST.MF | 8 +- org.eclipse.jgit.ant.test/build.properties | 1 + .../jgit/ant/tasks/GitCloneTaskTest.java | 128 ++++++++++++++++++ .../eclipse/jgit/ant/tasks/GitCloneTask.java | 7 +- .../junit/LocalDiskRepositoryTestCase.java | 5 + 5 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 org.eclipse.jgit.ant.test/src/org/eclipse/jgit/ant/tasks/GitCloneTaskTest.java diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF index a3c2d8138..564c0f40f 100644 --- a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF @@ -6,5 +6,11 @@ Bundle-SymbolicName: org.eclipse.jgit.ant.test Bundle-Version: 1.0.0.qualifier Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Import-Package: org.eclipse.jgit.ant.tasks;version="1.0.0", +Import-Package: org.apache.tools.ant, + org.eclipse.jgit.ant.tasks;version="1.0.0", + org.eclipse.jgit.junit, + org.eclipse.jgit.lib;version="1.0.0", + org.eclipse.jgit.storage.file;version="1.0.0", + org.eclipse.jgit.util;version="1.0.0", + org.hamcrest;version="1.1.0", org.junit;version="[4.0.0,5.0.0)" diff --git a/org.eclipse.jgit.ant.test/build.properties b/org.eclipse.jgit.ant.test/build.properties index ad796b047..986218197 100644 --- a/org.eclipse.jgit.ant.test/build.properties +++ b/org.eclipse.jgit.ant.test/build.properties @@ -4,3 +4,4 @@ bin.includes = plugin.properties,\ META-INF/,\ . jre.compilation.profile = J2SE-1.5 +additional.bundles = org.eclipse.jgit diff --git a/org.eclipse.jgit.ant.test/src/org/eclipse/jgit/ant/tasks/GitCloneTaskTest.java b/org.eclipse.jgit.ant.test/src/org/eclipse/jgit/ant/tasks/GitCloneTaskTest.java new file mode 100644 index 000000000..c7b949c25 --- /dev/null +++ b/org.eclipse.jgit.ant.test/src/org/eclipse/jgit/ant/tasks/GitCloneTaskTest.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2011, Ketan Padegaonkar + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.eclipse.jgit.ant.tasks; + +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.Project; +import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase; +import org.eclipse.jgit.lib.RepositoryCache; +import org.eclipse.jgit.storage.file.FileRepository; +import org.eclipse.jgit.util.FS; +import org.junit.Before; +import org.junit.Test; + +public class GitCloneTaskTest extends LocalDiskRepositoryTestCase { + + private GitCloneTask task; + private Project project; + + @Before + public void before() { + project = new Project(); + enableLogging(); + project.addTaskDefinition("git-clone", GitCloneTask.class); + task = (GitCloneTask) project.createTask("git-clone"); + } + + @Test(expected = BuildException.class) + public void shouldRaiseErrorOnNoUrl() throws Exception { + task.execute(); + } + + @Test(expected = BuildException.class) + public void shouldRaiseErrorOnEmptyUrl() throws Exception { + task.setUri(""); + task.execute(); + } + + @Test(expected = BuildException.class) + public void shouldRaiseErrorOnBadUrl() throws Exception { + task.setUri("foo://bar"); + task.execute(); + } + + @Test(expected = BuildException.class) + public void shouldRaiseErrorOnBadSourceURL() throws Exception { + task.setUri("http://localhost:9090/does-not-exist.git"); + task.execute(); + } + + @Test + public void shouldCloneAValidGitRepository() throws Exception { + FileRepository repo = createBareRepository(); + File directory = repo.getDirectory(); + task.setUri("file://" + directory); + File dest = createTempFile(); + task.setDest(dest); + task.execute(); + + assertTrue(RepositoryCache.FileKey.isGitRepository(new File(dest, ".git"), FS.DETECTED)); + } + + @Test + public void shouldCreateABareCloneOfAValidGitRepository() throws Exception { + FileRepository repo = createBareRepository(); + File directory = repo.getDirectory(); + task.setUri("file://" + directory); + task.setBare(true); + File dest = createTempFile(); + task.setDest(dest); + task.execute(); + + assertTrue(RepositoryCache.FileKey.isGitRepository(dest, FS.DETECTED)); + } + + private void enableLogging() { + DefaultLogger logger = new DefaultLogger(); + logger.setOutputPrintStream(System.out); + logger.setErrorPrintStream(System.err); + logger.setMessageOutputLevel(Project.MSG_INFO); + project.addBuildListener(logger); + } + +} diff --git a/org.eclipse.jgit.ant/src/org/eclipse/jgit/ant/tasks/GitCloneTask.java b/org.eclipse.jgit.ant/src/org/eclipse/jgit/ant/tasks/GitCloneTask.java index 0794bf1d5..f40b7b1e2 100644 --- a/org.eclipse.jgit.ant/src/org/eclipse/jgit/ant/tasks/GitCloneTask.java +++ b/org.eclipse.jgit.ant/src/org/eclipse/jgit/ant/tasks/GitCloneTask.java @@ -45,10 +45,10 @@ import java.io.File; import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.transport.URIish; @@ -107,10 +107,11 @@ public void execute() throws BuildException { log("Cloning repository " + uri); CloneCommand clone = Git.cloneRepository(); - clone.setURI(uri).setDirectory(destination).setBranch(branch).setBare(bare); try { + clone.setURI(uri).setDirectory(destination).setBranch(branch).setBare(bare); clone.call(); - } catch (JGitInternalException e) { + } catch (RuntimeException e) { + log("Could not clone repository: " + e, e, Project.MSG_ERR); throw new BuildException("Could not clone repository: " + e.getMessage(), e); } } diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java index 4b512ed09..30d437540 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java @@ -58,6 +58,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Constants; @@ -318,6 +319,10 @@ protected File createUniqueTestGitDir(boolean bare) throws IOException { return gitdir; } + protected File createTempFile() throws IOException { + return new File(trash, "tmp-" + UUID.randomUUID()).getCanonicalFile(); + } + /** * Run a hook script in the repository, returning the exit status. *