|
|
|
@ -58,130 +58,140 @@ public class RevWalkShallowTest extends RevWalkTestCase {
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testDepth1() throws Exception { |
|
|
|
|
final RevCommit a = commit(); |
|
|
|
|
final RevCommit b = commit(a); |
|
|
|
|
final RevCommit c = commit(b); |
|
|
|
|
final RevCommit d = commit(c); |
|
|
|
|
RevCommit[] commits = setupLinearChain(); |
|
|
|
|
|
|
|
|
|
createShallowFile(d); |
|
|
|
|
createShallowFile(commits[3]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(d); |
|
|
|
|
assertCommit(d, rw.next()); |
|
|
|
|
rw.markStart(commits[3]); |
|
|
|
|
assertCommit(commits[3], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testDepth2() throws Exception { |
|
|
|
|
final RevCommit a = commit(); |
|
|
|
|
final RevCommit b = commit(a); |
|
|
|
|
final RevCommit c = commit(b); |
|
|
|
|
final RevCommit d = commit(c); |
|
|
|
|
RevCommit[] commits = setupLinearChain(); |
|
|
|
|
|
|
|
|
|
createShallowFile(c); |
|
|
|
|
createShallowFile(commits[2]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(d); |
|
|
|
|
assertCommit(d, rw.next()); |
|
|
|
|
assertCommit(c, rw.next()); |
|
|
|
|
rw.markStart(commits[3]); |
|
|
|
|
assertCommit(commits[3], rw.next()); |
|
|
|
|
assertCommit(commits[2], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testDepth3() throws Exception { |
|
|
|
|
final RevCommit a = commit(); |
|
|
|
|
final RevCommit b = commit(a); |
|
|
|
|
final RevCommit c = commit(b); |
|
|
|
|
final RevCommit d = commit(c); |
|
|
|
|
RevCommit[] commits = setupLinearChain(); |
|
|
|
|
|
|
|
|
|
createShallowFile(b); |
|
|
|
|
createShallowFile(commits[1]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(d); |
|
|
|
|
assertCommit(d, rw.next()); |
|
|
|
|
assertCommit(c, rw.next()); |
|
|
|
|
assertCommit(b, rw.next()); |
|
|
|
|
rw.markStart(commits[3]); |
|
|
|
|
assertCommit(commits[3], rw.next()); |
|
|
|
|
assertCommit(commits[2], rw.next()); |
|
|
|
|
assertCommit(commits[1], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testMergeCommitOneParentShallow() throws Exception { |
|
|
|
|
final RevCommit a = commit(); |
|
|
|
|
final RevCommit b = commit(a); |
|
|
|
|
final RevCommit c = commit(b); |
|
|
|
|
final RevCommit d = commit(b); |
|
|
|
|
final RevCommit e = commit(d); |
|
|
|
|
final RevCommit merge = commit(c, e); |
|
|
|
|
|
|
|
|
|
createShallowFile(e); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(merge); |
|
|
|
|
assertCommit(merge, rw.next()); |
|
|
|
|
assertCommit(e, rw.next()); |
|
|
|
|
assertCommit(c, rw.next()); |
|
|
|
|
assertCommit(b, rw.next()); |
|
|
|
|
assertCommit(a, rw.next()); |
|
|
|
|
public void testObjectDirectorySnapshot() throws Exception { |
|
|
|
|
RevCommit[] commits = setupLinearChain(); |
|
|
|
|
|
|
|
|
|
createShallowFile(commits[3]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
markStart(commits[3]); |
|
|
|
|
assertCommit(commits[3], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
|
|
|
|
|
createShallowFile(commits[2]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
markStart(commits[3]); |
|
|
|
|
assertCommit(commits[3], rw.next()); |
|
|
|
|
assertCommit(commits[2], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private RevCommit[] setupLinearChain() throws Exception { |
|
|
|
|
RevCommit[] commits = new RevCommit[4]; |
|
|
|
|
RevCommit parent = null; |
|
|
|
|
for (int i = 0; i < commits.length; i++) { |
|
|
|
|
commits[i] = parent != null ? commit(parent) : commit(); |
|
|
|
|
parent = commits[i]; |
|
|
|
|
} |
|
|
|
|
return commits; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testMergeCommitEntirelyShallow() throws Exception { |
|
|
|
|
final RevCommit a = commit(); |
|
|
|
|
final RevCommit b = commit(a); |
|
|
|
|
final RevCommit c = commit(b); |
|
|
|
|
final RevCommit d = commit(b); |
|
|
|
|
final RevCommit e = commit(d); |
|
|
|
|
final RevCommit merge = commit(c, e); |
|
|
|
|
|
|
|
|
|
createShallowFile(c, e); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(merge); |
|
|
|
|
assertCommit(merge, rw.next()); |
|
|
|
|
assertCommit(e, rw.next()); |
|
|
|
|
assertCommit(c, rw.next()); |
|
|
|
|
public void testMergeCommitOneParentShallow() throws Exception { |
|
|
|
|
RevCommit[] commits = setupMergeChain(); |
|
|
|
|
|
|
|
|
|
createShallowFile(commits[4]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
markStart(commits[5]); |
|
|
|
|
assertCommit(commits[5], rw.next()); |
|
|
|
|
assertCommit(commits[4], rw.next()); |
|
|
|
|
assertCommit(commits[2], rw.next()); |
|
|
|
|
assertCommit(commits[1], rw.next()); |
|
|
|
|
assertCommit(commits[0], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testObjectDirectorySnapshot() throws Exception { |
|
|
|
|
RevCommit a = commit(); |
|
|
|
|
RevCommit b = commit(a); |
|
|
|
|
RevCommit c = commit(b); |
|
|
|
|
RevCommit d = commit(c); |
|
|
|
|
public void testMergeCommitEntirelyShallow() throws Exception { |
|
|
|
|
RevCommit[] commits = setupMergeChain(); |
|
|
|
|
|
|
|
|
|
createShallowFile(d); |
|
|
|
|
createShallowFile(commits[2], commits[4]); |
|
|
|
|
updateCommits(commits); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(d); |
|
|
|
|
assertCommit(d, rw.next()); |
|
|
|
|
markStart(commits[5]); |
|
|
|
|
assertCommit(commits[5], rw.next()); |
|
|
|
|
assertCommit(commits[4], rw.next()); |
|
|
|
|
assertCommit(commits[2], rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rw = createRevWalk(); |
|
|
|
|
a = rw.lookupCommit(a); |
|
|
|
|
b = rw.lookupCommit(b); |
|
|
|
|
c = rw.lookupCommit(c); |
|
|
|
|
d = rw.lookupCommit(d); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(d); |
|
|
|
|
assertCommit(d, rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
private RevCommit[] setupMergeChain() throws Exception { |
|
|
|
|
/*- |
|
|
|
|
* Create a history like this, diverging at 1 and merging at 5: |
|
|
|
|
* |
|
|
|
|
* ---o--o commits 3,4 |
|
|
|
|
* / \ |
|
|
|
|
* o--o--o------o commits 0,1,2,5 |
|
|
|
|
*/ |
|
|
|
|
RevCommit[] commits = new RevCommit[6]; |
|
|
|
|
commits[0] = commit(); |
|
|
|
|
commits[1] = commit(commits[0]); |
|
|
|
|
commits[2] = commit(commits[1]); |
|
|
|
|
commits[3] = commit(commits[1]); |
|
|
|
|
commits[4] = commit(commits[3]); |
|
|
|
|
commits[5] = commit(commits[2], commits[4]); |
|
|
|
|
return commits; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
createShallowFile(c); |
|
|
|
|
private void updateCommits(RevCommit[] commits) { |
|
|
|
|
// Relookup commits using the new RevWalk
|
|
|
|
|
for (int i = 0; i < commits.length; i++) { |
|
|
|
|
commits[i] = rw.lookupCommit(commits[i].getId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void createShallowFile(ObjectId... shallowCommits) |
|
|
|
|
throws IOException { |
|
|
|
|
// Reset the RevWalk since the new shallow file invalidates the existing
|
|
|
|
|
// RevWalk's shallow state.
|
|
|
|
|
rw.close(); |
|
|
|
|
rw = createRevWalk(); |
|
|
|
|
a = rw.lookupCommit(a); |
|
|
|
|
b = rw.lookupCommit(b); |
|
|
|
|
c = rw.lookupCommit(c); |
|
|
|
|
d = rw.lookupCommit(d); |
|
|
|
|
|
|
|
|
|
rw.reset(); |
|
|
|
|
markStart(d); |
|
|
|
|
assertCommit(d, rw.next()); |
|
|
|
|
assertCommit(c, rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
StringBuilder builder = new StringBuilder(); |
|
|
|
|
for (ObjectId commit : shallowCommits) { |
|
|
|
|
builder.append(commit.getName() + "\n"); |
|
|
|
|
} |
|
|
|
|
JGitTestUtil.write(new File(db.getDirectory(), "shallow"), |
|
|
|
|
builder.toString()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@ -199,13 +209,4 @@ public class RevWalkShallowTest extends RevWalkTestCase {
|
|
|
|
|
assertCommit(b, rw.next()); |
|
|
|
|
assertNull(rw.next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void createShallowFile(ObjectId... shallowCommits) |
|
|
|
|
throws IOException { |
|
|
|
|
final StringBuilder builder = new StringBuilder(); |
|
|
|
|
for (ObjectId commit : shallowCommits) |
|
|
|
|
builder.append(commit.getName() + "\n"); |
|
|
|
|
JGitTestUtil.write(new File(db.getDirectory(), "shallow"), |
|
|
|
|
builder.toString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|