浏览代码

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
tags/v1.2.0.201112221803-r
Kevin Sawicki 12 年前
父节点
当前提交
899114f63c

+ 16
- 0
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());
}
}

+ 6
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java 查看文件

@@ -229,6 +229,12 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> {
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();

正在加载...
取消
保存