@ -1731,6 +1731,128 @@ public class UploadPackTest {
. has ( preparator . foo . toObjectId ( ) ) ) ;
}
/ * *
* Creates a commit with the following files :
* < pre >
* a / x / b / foo
* b / u / c / baz
* y / x / b / foo
* z / v / c / baz
* < / pre >
* which has two pairs of identical trees :
* < ul >
* < li > one at / a and / y
* < li > one at / b / u and / z / v
* < / ul >
* Note that this class defines unique 8 trees ( rootTree and subtree1 - 7 )
* which means PackStatistics should report having visited 8 trees .
* /
class RepeatedSubtreeAtSameLevelPreparator {
RevBlob foo = remote . blob ( "foo" ) ;
/** foo */
RevTree subtree1 = remote . tree ( remote . file ( "foo" , foo ) ) ;
/** b/foo */
RevTree subtree2 = ( new TreeBuilder ( ) {
@Override
void addElements ( DirCacheBuilder dcBuilder ) throws Exception {
dcBuilder . addTree ( new byte [ ] { 'b' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree1 ) ;
}
} ) . build ( ) ;
/** x/b/foo */
RevTree subtree3 = ( new TreeBuilder ( ) {
@Override
void addElements ( DirCacheBuilder dcBuilder ) throws Exception {
dcBuilder . addTree ( new byte [ ] { 'x' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree2 ) ;
}
} ) . build ( ) ;
RevBlob baz = remote . blob ( "baz" ) ;
/** baz */
RevTree subtree4 = remote . tree ( remote . file ( "baz" , baz ) ) ;
/** c/baz */
RevTree subtree5 = ( new TreeBuilder ( ) {
@Override
void addElements ( DirCacheBuilder dcBuilder ) throws Exception {
dcBuilder . addTree ( new byte [ ] { 'c' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree4 ) ;
}
} ) . build ( ) ;
/** u/c/baz */
RevTree subtree6 = ( new TreeBuilder ( ) {
@Override
void addElements ( DirCacheBuilder dcBuilder ) throws Exception {
dcBuilder . addTree ( new byte [ ] { 'u' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree5 ) ;
}
} ) . build ( ) ;
/** v/c/baz */
RevTree subtree7 = ( new TreeBuilder ( ) {
@Override
void addElements ( DirCacheBuilder dcBuilder ) throws Exception {
dcBuilder . addTree ( new byte [ ] { 'v' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree5 ) ;
}
} ) . build ( ) ;
RevTree rootTree = ( new TreeBuilder ( ) {
@Override
void addElements ( DirCacheBuilder dcBuilder ) throws Exception {
dcBuilder . addTree ( new byte [ ] { 'a' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree3 ) ;
dcBuilder . addTree ( new byte [ ] { 'b' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree6 ) ;
dcBuilder . addTree ( new byte [ ] { 'y' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree3 ) ;
dcBuilder . addTree ( new byte [ ] { 'z' } , DirCacheEntry . STAGE_0 ,
remote . getRevWalk ( ) . getObjectReader ( ) , subtree7 ) ;
}
} ) . build ( ) ;
RevCommit commit = remote . commit ( rootTree ) ;
RepeatedSubtreeAtSameLevelPreparator ( ) throws Exception { }
}
@Test
public void testV2FetchFilterTreeDepth_repeatTreeAtSameLevelIncludeFile ( )
throws Exception {
RepeatedSubtreeAtSameLevelPreparator preparator =
new RepeatedSubtreeAtSameLevelPreparator ( ) ;
remote . update ( "master" , preparator . commit ) ;
uploadV2WithTreeDepthFilter ( 5 , preparator . commit . toObjectId ( ) ) ;
assertTrue ( client . getObjectDatabase ( )
. has ( preparator . foo . toObjectId ( ) ) ) ;
assertTrue ( client . getObjectDatabase ( )
. has ( preparator . baz . toObjectId ( ) ) ) ;
assertEquals ( 8 , stats . getTreesTraversed ( ) ) ;
}
@Test
public void testV2FetchFilterTreeDepth_repeatTreeAtSameLevelExcludeFile ( )
throws Exception {
RepeatedSubtreeAtSameLevelPreparator preparator =
new RepeatedSubtreeAtSameLevelPreparator ( ) ;
remote . update ( "master" , preparator . commit ) ;
uploadV2WithTreeDepthFilter ( 4 , preparator . commit . toObjectId ( ) ) ;
assertFalse ( client . getObjectDatabase ( )
. has ( preparator . foo . toObjectId ( ) ) ) ;
assertFalse ( client . getObjectDatabase ( )
. has ( preparator . baz . toObjectId ( ) ) ) ;
assertEquals ( 8 , stats . getTreesTraversed ( ) ) ;
}
@Test
public void testWantFilteredObject ( ) throws Exception {
RepeatedSubtreePreparator preparator = new RepeatedSubtreePreparator ( ) ;