diff options
author | Jonathan Nieder <jrn@google.com> | 2015-06-10 15:43:27 -0700 |
---|---|---|
committer | Jonathan Nieder <jrn@google.com> | 2015-06-11 11:54:44 -0700 |
commit | d2ade728a131995c97a65bcb7610b4675682826c (patch) | |
tree | 7446ab7c8dd32efcf6b3a208402afa33a977142c /org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java | |
parent | 24ab79ccaf5e3e8b3c2ef612afc398126b7c2d93 (diff) | |
download | jgit-d2ade728a131995c97a65bcb7610b4675682826c.tar.gz jgit-d2ade728a131995c97a65bcb7610b4675682826c.zip |
Treat CloneCommand.setRemote(null) as setRemote("origin")
A non-bare clone command with null remote produces a
NullPointerException when trying to produce a refspec to fetch against.
In a bare repository, a null remote name is accepted by mistake,
producing a configuration with items like 'remote.url' instead of
'remote.<remote>.url'. This was never meant to work.
Instead, let's make setRemote(null) undo any previous setRemote calls
and re-set the remote name to DEFAULT_REMOTE, imitating C git clone's
--no-origin option.
While we're here, add some tests for setRemote working normally.
Change-Id: I76f502da5e677df501d3ef387e7f61f42a7ca238
Signed-off-by: Jonathan Nieder <jrn@google.com>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java index 72cc51be98..ce11e1b1bc 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java @@ -202,6 +202,66 @@ public class CloneCommandTest extends RepositoryTestCase { fetchRefSpec(git2.getRepository())); } + @Test + public void testCloneRepositoryCustomRemote() throws Exception { + File directory = createTempDirectory("testCloneRemoteUpstream"); + CloneCommand command = Git.cloneRepository(); + command.setDirectory(directory); + command.setRemote("upstream"); + command.setURI(fileUri()); + Git git2 = command.call(); + addRepoToClose(git2.getRepository()); + assertEquals("+refs/heads/*:refs/remotes/upstream/*", + git2.getRepository() + .getConfig() + .getStringList("remote", "upstream", + "fetch")[0]); + assertEquals("upstream", + git2.getRepository() + .getConfig() + .getString("branch", "test", "remote")); + assertEquals(db.resolve("test"), + git2.getRepository().resolve("upstream/test")); + } + + @Test + public void testBareCloneRepositoryCustomRemote() throws Exception { + File directory = createTempDirectory("testCloneRemoteUpstream_bare"); + CloneCommand command = Git.cloneRepository(); + command.setBare(true); + command.setDirectory(directory); + command.setRemote("upstream"); + command.setURI(fileUri()); + Git git2 = command.call(); + addRepoToClose(git2.getRepository()); + assertEquals("+refs/heads/*:refs/heads/*", + git2.getRepository() + .getConfig() + .getStringList("remote", "upstream", + "fetch")[0]); + assertEquals("upstream", + git2.getRepository() + .getConfig() + .getString("branch", "test", "remote")); + assertNull(git2.getRepository().resolve("upstream/test")); + } + + @Test + public void testBareCloneRepositoryNullRemote() throws Exception { + File directory = createTempDirectory("testCloneRemoteNull_bare"); + CloneCommand command = Git.cloneRepository(); + command.setBare(true); + command.setDirectory(directory); + command.setRemote(null); + command.setURI(fileUri()); + Git git2 = command.call(); + addRepoToClose(git2.getRepository()); + assertEquals("+refs/heads/*:refs/heads/*", git2.getRepository() + .getConfig().getStringList("remote", "origin", "fetch")[0]); + assertEquals("origin", git2.getRepository().getConfig() + .getString("branch", "test", "remote")); + } + public static RefSpec fetchRefSpec(Repository r) throws URISyntaxException { RemoteConfig remoteConfig = new RemoteConfig(r.getConfig(), Constants.DEFAULT_REMOTE_NAME); |