From 899114f63c24223b697afb42e1564fc21a3b622d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 28 Nov 2011 11:00:15 -0800 Subject: [PATCH] Always checkout master when it matches the advertised HEAD This parallels the CGit behavior of always using refs/heads/master when it matches the remote advertised HEAD commit. Change-Id: I5a5cd1516b58d116e334056aba1ef7990697ec30 --- .../org/eclipse/jgit/api/CloneCommandTest.java | 16 ++++++++++++++++ .../src/org/eclipse/jgit/api/CloneCommand.java | 6 ++++++ 2 files changed, 22 insertions(+) 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 f16fe83d6..0e9f6721c 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 @@ -236,4 +236,20 @@ public class CloneCommandTest extends RepositoryTestCase { assertTrue(e.getMessage().contains(dirName)); } } + + @Test + public void testCloneRepositoryWithMultipleHeadBranches() throws Exception { + git.checkout().setName(Constants.MASTER).call(); + git.branchCreate().setName("a").call(); + + File directory = createTempDirectory("testCloneRepositoryWithMultipleHeadBranches"); + CloneCommand clone = Git.cloneRepository(); + clone.setDirectory(directory); + clone.setURI("file://" + git.getRepository().getWorkTree().getPath()); + Git git2 = clone.call(); + addRepoToClose(git2.getRepository()); + assertNotNull(git2); + + assertEquals(Constants.MASTER, git2.getRepository().getBranch()); + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java index dbc126e89..b779c488a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java @@ -229,6 +229,12 @@ public class CloneCommand extends TransportCommand { final Ref idHEAD = result.getAdvertisedRef(Constants.HEAD); if (idHEAD == null) return null; + + Ref master = result.getAdvertisedRef(Constants.R_HEADS + + Constants.MASTER); + if (master != null && master.getObjectId().equals(idHEAD.getObjectId())) + return master; + Ref foundBranch = null; for (final Ref r : result.getAdvertisedRefs()) { final String n = r.getName();