|
|
|
@ -43,10 +43,15 @@
|
|
|
|
|
package org.eclipse.jgit.api; |
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
|
import static org.junit.Assert.assertNotEquals; |
|
|
|
|
import static org.junit.Assert.assertNotNull; |
|
|
|
|
import static org.junit.Assert.assertNull; |
|
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
|
|
|
|
|
import org.eclipse.jgit.junit.JGitTestUtil; |
|
|
|
|
import org.eclipse.jgit.junit.RepositoryTestCase; |
|
|
|
|
import org.eclipse.jgit.lib.Constants; |
|
|
|
|
import org.eclipse.jgit.lib.ObjectId; |
|
|
|
@ -204,4 +209,43 @@ public class FetchCommandTest extends RepositoryTestCase {
|
|
|
|
|
assertEquals(RefUpdate.Result.FORCED, update.getResult()); |
|
|
|
|
assertEquals(tagRef2.getObjectId(), db.resolve(tagName)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testFetchWithPruneShouldKeepOriginHead() throws Exception { |
|
|
|
|
// Create a commit in the test repo.
|
|
|
|
|
commitFile("foo", "foo", "master"); |
|
|
|
|
// Produce a real clone of the git repo
|
|
|
|
|
Git cloned = Git.cloneRepository() |
|
|
|
|
.setDirectory(createTempDirectory("testCloneRepository")) |
|
|
|
|
.setURI("file://" |
|
|
|
|
+ git.getRepository().getWorkTree().getAbsolutePath()) |
|
|
|
|
.call(); |
|
|
|
|
assertNotNull(cloned); |
|
|
|
|
Repository clonedRepo = cloned.getRepository(); |
|
|
|
|
addRepoToClose(clonedRepo); |
|
|
|
|
ObjectId originMasterId = clonedRepo |
|
|
|
|
.resolve("refs/remotes/origin/master"); |
|
|
|
|
assertNotNull("Should have origin/master", originMasterId); |
|
|
|
|
assertNotEquals("origin/master should not be zero ID", |
|
|
|
|
ObjectId.zeroId(), originMasterId); |
|
|
|
|
// Canonical git creates origin/HEAD; JGit (for now) doesn't. Let's
|
|
|
|
|
// pretend we did the clone via command-line git.
|
|
|
|
|
ObjectId originHeadId = clonedRepo.resolve("refs/remotes/origin/HEAD"); |
|
|
|
|
if (originHeadId == null) { |
|
|
|
|
JGitTestUtil.write( |
|
|
|
|
new File(clonedRepo.getDirectory(), |
|
|
|
|
"refs/remotes/origin/HEAD"), |
|
|
|
|
"ref: refs/remotes/origin/master\n"); |
|
|
|
|
originHeadId = clonedRepo.resolve("refs/remotes/origin/HEAD"); |
|
|
|
|
} |
|
|
|
|
assertEquals("Should have origin/HEAD", originMasterId, originHeadId); |
|
|
|
|
FetchResult result = cloned.fetch().setRemote("origin") |
|
|
|
|
.setRemoveDeletedRefs(true).call(); |
|
|
|
|
assertTrue("Fetch after clone should be up-to-date", |
|
|
|
|
result.getTrackingRefUpdates().isEmpty()); |
|
|
|
|
assertEquals("origin/master should still exist", originMasterId, |
|
|
|
|
clonedRepo.resolve("refs/remotes/origin/master")); |
|
|
|
|
assertEquals("origin/HEAD should be unchanged", originHeadId, |
|
|
|
|
clonedRepo.resolve("refs/remotes/origin/HEAD")); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|