@ -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 ( ) ) ;
}
}