summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java110
1 files changed, 110 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
index 3296717c0e..e850223762 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
@@ -43,6 +43,7 @@
package org.eclipse.jgit.api;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
@@ -50,8 +51,12 @@ import java.io.IOException;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.JGitInternalException;
+import org.eclipse.jgit.errors.NoWorkTreeException;
+import org.eclipse.jgit.junit.MockSystemReader;
import org.eclipse.jgit.junit.RepositoryTestCase;
+import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.util.SystemReader;
import org.junit.Before;
import org.junit.Test;
@@ -101,4 +106,109 @@ public class InitCommandTest extends RepositoryTestCase {
assertNotNull(repository);
assertTrue(repository.isBare());
}
+
+ // non-bare repos where gitDir and directory is set. Same as
+ // "git init --separate-git-dir /tmp/a /tmp/b"
+ @Test
+ public void testInitWithExplicitGitDir() throws IOException,
+ JGitInternalException, GitAPIException {
+ File wt = createTempDirectory("testInitRepositoryWT");
+ File gitDir = createTempDirectory("testInitRepositoryGIT");
+ InitCommand command = new InitCommand();
+ command.setDirectory(wt);
+ command.setGitDir(gitDir);
+ Repository repository = command.call().getRepository();
+ addRepoToClose(repository);
+ assertNotNull(repository);
+ assertEqualsFile(wt, repository.getWorkTree());
+ assertEqualsFile(gitDir, repository.getDirectory());
+ }
+
+ // non-bare repos where only gitDir is set. Same as
+ // "git init --separate-git-dir /tmp/a"
+ @Test
+ public void testInitWithOnlyExplicitGitDir() throws IOException,
+ JGitInternalException, GitAPIException {
+ MockSystemReader reader = (MockSystemReader) SystemReader.getInstance();
+ reader.setProperty(Constants.OS_USER_DIR, getTemporaryDirectory()
+ .getAbsolutePath());
+ File gitDir = createTempDirectory("testInitRepository/.git");
+ InitCommand command = new InitCommand();
+ command.setGitDir(gitDir);
+ Repository repository = command.call().getRepository();
+ addRepoToClose(repository);
+ assertNotNull(repository);
+ assertEqualsFile(gitDir, repository.getDirectory());
+ assertEqualsFile(new File(reader.getProperty("user.dir")),
+ repository.getWorkTree());
+ }
+
+ // Bare repos where gitDir and directory is set will only work if gitDir and
+ // directory is pointing to same dir. Same as
+ // "git init --bare --separate-git-dir /tmp/a /tmp/b"
+ // (works in native git but I guess that's more a bug)
+ @Test(expected = IllegalStateException.class)
+ public void testInitBare_DirAndGitDirMustBeEqual() throws IOException,
+ JGitInternalException, GitAPIException {
+ File gitDir = createTempDirectory("testInitRepository.git");
+ InitCommand command = new InitCommand();
+ command.setBare(true);
+ command.setDirectory(gitDir);
+ command.setGitDir(new File(gitDir, ".."));
+ command.call();
+ }
+
+ // If neither directory nor gitDir is set in a non-bare repo make sure
+ // worktree and gitDir are set correctly. Standard case. Same as
+ // "git init"
+ @Test
+ public void testInitWithDefaultsNonBare() throws JGitInternalException,
+ GitAPIException, IOException {
+ MockSystemReader reader = (MockSystemReader) SystemReader.getInstance();
+ reader.setProperty(Constants.OS_USER_DIR, getTemporaryDirectory()
+ .getAbsolutePath());
+ InitCommand command = new InitCommand();
+ command.setBare(false);
+ Repository repository = command.call().getRepository();
+ addRepoToClose(repository);
+ assertNotNull(repository);
+ assertEqualsFile(new File(reader.getProperty("user.dir"), ".git"),
+ repository.getDirectory());
+ assertEqualsFile(new File(reader.getProperty("user.dir")),
+ repository.getWorkTree());
+ }
+
+ // If neither directory nor gitDir is set in a bare repo make sure
+ // worktree and gitDir are set correctly. Standard case. Same as
+ // "git init --bare"
+ @Test(expected = NoWorkTreeException.class)
+ public void testInitWithDefaultsBare() throws JGitInternalException,
+ GitAPIException, IOException {
+ MockSystemReader reader = (MockSystemReader) SystemReader.getInstance();
+ reader.setProperty(Constants.OS_USER_DIR, getTemporaryDirectory()
+ .getAbsolutePath());
+ InitCommand command = new InitCommand();
+ command.setBare(true);
+ Repository repository = command.call().getRepository();
+ addRepoToClose(repository);
+ assertNotNull(repository);
+ assertEqualsFile(new File(reader.getProperty("user.dir")),
+ repository.getDirectory());
+ assertNull(repository.getWorkTree());
+ }
+
+ // In a non-bare repo when directory and gitDir is set then they shouldn't
+ // point to the same dir. Same as
+ // "git init --separate-git-dir /tmp/a /tmp/a"
+ // (works in native git but I guess that's more a bug)
+ @Test(expected = IllegalStateException.class)
+ public void testInitNonBare_GitdirAndDirShouldntBeSame()
+ throws JGitInternalException, GitAPIException, IOException {
+ File gitDir = createTempDirectory("testInitRepository.git");
+ InitCommand command = new InitCommand();
+ command.setBare(false);
+ command.setGitDir(gitDir);
+ command.setDirectory(gitDir);
+ command.call().getRepository();
+ }
}