Merge "Always checkout master when it matches the advertised HEAD"

This commit is contained in:
Shawn Pearce 2011-11-28 21:59:52 -05:00 committed by Code Review
commit e9f20c982a
2 changed files with 22 additions and 0 deletions

View File

@ -236,4 +236,20 @@ public void testCloneRepositoryWhenDestinationDirectoryExistsAndIsNotEmpty()
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());
}
}

View File

@ -229,6 +229,12 @@ private Ref findBranchToCheckout(FetchResult result) {
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();