Merge branch 'stable-5.0'
* stable-5.0: Don't prune symbolic refs when fetch.prune = true Prepare 5.0.0-SNAPSHOT builds JGit v5.0.0.201805221745-rc1 Prepare 5.0.0-SNAPSHOT builds JGit v5.0.0.201805151920-m7 Change-Id: I9a9a4a3ab36a2bd83e4eaed90151740d59af171b
This commit is contained in:
commit
2ab42b74d9
|
@ -43,10 +43,15 @@
|
||||||
package org.eclipse.jgit.api;
|
package org.eclipse.jgit.api;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
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.assertNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.junit.JGitTestUtil;
|
||||||
import org.eclipse.jgit.junit.RepositoryTestCase;
|
import org.eclipse.jgit.junit.RepositoryTestCase;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
|
@ -204,4 +209,43 @@ public void fetchWithExplicitTagsShouldUpdateLocal() throws Exception {
|
||||||
assertEquals(RefUpdate.Result.FORCED, update.getResult());
|
assertEquals(RefUpdate.Result.FORCED, update.getResult());
|
||||||
assertEquals(tagRef2.getObjectId(), db.resolve(tagName));
|
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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -480,6 +480,9 @@ private Map<String, Ref> localRefs() throws TransportException {
|
||||||
private void deleteStaleTrackingRefs(FetchResult result,
|
private void deleteStaleTrackingRefs(FetchResult result,
|
||||||
BatchRefUpdate batch) throws IOException {
|
BatchRefUpdate batch) throws IOException {
|
||||||
for (Ref ref : localRefs().values()) {
|
for (Ref ref : localRefs().values()) {
|
||||||
|
if (ref.isSymbolic()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
final String refname = ref.getName();
|
final String refname = ref.getName();
|
||||||
for (RefSpec spec : toFetch) {
|
for (RefSpec spec : toFetch) {
|
||||||
if (spec.matchDestination(refname)) {
|
if (spec.matchDestination(refname)) {
|
||||||
|
|
Loading…
Reference in New Issue