Browse Source

Fix default directory set when setDirectory wasn't called.

Bug: 519883
Change-Id: I46716e9626b4c4adc0806a7c8df6914309040b94
Signed-off-by: Joan Goyeau <joan@goyeau.com>
stable-4.9
Joan Goyeau 7 years ago
parent
commit
88e453995d
  1. 3
      org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
  2. 29
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
  3. 15
      org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java

3
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java

@ -101,6 +101,9 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback {
if (localName == null) { if (localName == null) {
try { try {
localName = uri.getHumanishName(); localName = uri.getHumanishName();
if (isBare) {
localName = localName + Constants.DOT_GIT_EXT;
}
localNameF = new File(SystemReader.getInstance().getProperty( localNameF = new File(SystemReader.getInstance().getProperty(
Constants.OS_USER_DIR), localName); Constants.OS_USER_DIR), localName);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {

29
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java

@ -76,6 +76,7 @@ import org.eclipse.jgit.submodule.SubmoduleStatusType;
import org.eclipse.jgit.submodule.SubmoduleWalk; import org.eclipse.jgit.submodule.SubmoduleWalk;
import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig; import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.util.SystemReader; import org.eclipse.jgit.util.SystemReader;
import org.junit.Test; import org.junit.Test;
@ -145,15 +146,35 @@ public class CloneCommandTest extends RepositoryTestCase {
File directory = createTempDirectory("testCloneRepository"); File directory = createTempDirectory("testCloneRepository");
CloneCommand command = Git.cloneRepository(); CloneCommand command = Git.cloneRepository();
command.setDirectory(directory); command.setDirectory(directory);
command.setGitDir(new File(directory, ".git")); command.setGitDir(new File(directory, Constants.DOT_GIT));
command.setURI(fileUri()); command.setURI(fileUri());
Git git2 = command.call(); Git git2 = command.call();
addRepoToClose(git2.getRepository()); addRepoToClose(git2.getRepository());
assertEquals(directory, git2.getRepository().getWorkTree()); assertEquals(directory, git2.getRepository().getWorkTree());
assertEquals(new File(directory, ".git"), git2.getRepository() assertEquals(new File(directory, Constants.DOT_GIT), git2.getRepository()
.getDirectory()); .getDirectory());
} }
@Test
public void testCloneRepositoryDefaultDirectory() throws IOException, URISyntaxException,
JGitInternalException, GitAPIException {
CloneCommand command = Git.cloneRepository().setURI(fileUri());
command.verifyDirectories(new URIish(fileUri()));
File directory = command.getDirectory();
assertEquals(git.getRepository().getWorkTree().getName(), directory.getName());
}
@Test
public void testCloneBareRepositoryDefaultDirectory() throws IOException, URISyntaxException,
JGitInternalException, GitAPIException {
CloneCommand command = Git.cloneRepository().setURI(fileUri()).setBare(true);
command.verifyDirectories(new URIish(fileUri()));
File directory = command.getDirectory();
assertEquals(git.getRepository().getWorkTree().getName() + Constants.DOT_GIT_EXT, directory.getName());
}
@Test @Test
public void testCloneRepositoryExplicitGitDirNonStd() throws IOException, public void testCloneRepositoryExplicitGitDirNonStd() throws IOException,
JGitInternalException, GitAPIException { JGitInternalException, GitAPIException {
@ -168,8 +189,8 @@ public class CloneCommandTest extends RepositoryTestCase {
assertEquals(directory, git2.getRepository().getWorkTree()); assertEquals(directory, git2.getRepository().getWorkTree());
assertEquals(gDir, git2.getRepository() assertEquals(gDir, git2.getRepository()
.getDirectory()); .getDirectory());
assertTrue(new File(directory, ".git").isFile()); assertTrue(new File(directory, Constants.DOT_GIT).isFile());
assertFalse(new File(gDir, ".git").exists()); assertFalse(new File(gDir, Constants.DOT_GIT).exists());
} }
@Test @Test

15
org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java

@ -50,6 +50,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException; import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.JGitInternalException;
@ -156,6 +157,16 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> {
super(null); super(null);
} }
/**
* Get the git directory. This is primarily used for tests.
*
* @return the git directory
*/
@Nullable
File getDirectory() {
return directory;
}
/** /**
* Executes the {@code Clone} command. * Executes the {@code Clone} command.
* *
@ -232,9 +243,9 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> {
return false; return false;
} }
private void verifyDirectories(URIish u) { void verifyDirectories(URIish u) {
if (directory == null && gitDir == null) { if (directory == null && gitDir == null) {
directory = new File(u.getHumanishName(), Constants.DOT_GIT); directory = new File(u.getHumanishName() + (bare ? Constants.DOT_GIT_EXT : "")); //$NON-NLS-1$
} }
directoryExistsInitially = directory != null && directory.exists(); directoryExistsInitially = directory != null && directory.exists();
gitDirExistsInitially = gitDir != null && gitDir.exists(); gitDirExistsInitially = gitDir != null && gitDir.exists();

Loading…
Cancel
Save