@ -51,6 +51,7 @@ import java.io.IOException;
import org.eclipse.jgit.api.Git ;
import org.eclipse.jgit.dircache.DirCache ;
import org.eclipse.jgit.dircache.DirCacheEditor ;
import org.eclipse.jgit.dircache.DirCacheEntry ;
import org.eclipse.jgit.treewalk.FileTreeIterator ;
public class IndexDiffTest extends RepositoryTestCase {
@ -234,6 +235,39 @@ public class IndexDiffTest extends RepositoryTestCase {
assertTrue ( diff . getUntracked ( ) . contains ( path ) ) ;
}
public void testAssumeUnchanged ( ) throws Exception {
Git git = new Git ( db ) ;
String path = "file" ;
writeTrashFile ( path , "content" ) ;
git . add ( ) . addFilepattern ( path ) . call ( ) ;
String path2 = "file2" ;
writeTrashFile ( path2 , "content" ) ;
git . add ( ) . addFilepattern ( path2 ) . call ( ) ;
git . commit ( ) . setMessage ( "commit" ) . call ( ) ;
assumeUnchanged ( path2 ) ;
writeTrashFile ( path , "more content" ) ;
writeTrashFile ( path2 , "more content" ) ;
FileTreeIterator iterator = new FileTreeIterator ( db ) ;
IndexDiff diff = new IndexDiff ( db , Constants . HEAD , iterator ) ;
diff . diff ( ) ;
assertEquals ( 1 , diff . getAssumeUnchanged ( ) . size ( ) ) ;
assertEquals ( 2 , diff . getModified ( ) . size ( ) ) ;
assertEquals ( 0 , diff . getChanged ( ) . size ( ) ) ;
git . add ( ) . addFilepattern ( "." ) . call ( ) ;
iterator = new FileTreeIterator ( db ) ;
diff = new IndexDiff ( db , Constants . HEAD , iterator ) ;
diff . diff ( ) ;
assertEquals ( 1 , diff . getAssumeUnchanged ( ) . size ( ) ) ;
assertEquals ( 1 , diff . getModified ( ) . size ( ) ) ;
assertEquals ( 1 , diff . getChanged ( ) . size ( ) ) ;
assertTrue ( diff . getAssumeUnchanged ( ) . contains ( "file2" ) ) ;
assertTrue ( diff . getModified ( ) . contains ( "file2" ) ) ;
assertTrue ( diff . getChanged ( ) . contains ( "file" ) ) ;
}
private void removeFromIndex ( String path ) throws IOException {
final DirCache dirc = db . lockDirCache ( ) ;
final DirCacheEditor edit = dirc . editor ( ) ;
@ -241,4 +275,15 @@ public class IndexDiffTest extends RepositoryTestCase {
if ( ! edit . commit ( ) )
throw new IOException ( "could not commit" ) ;
}
private void assumeUnchanged ( String path ) throws IOException {
final DirCache dirc = db . lockDirCache ( ) ;
final DirCacheEntry ent = dirc . getEntry ( path ) ;
if ( ent ! = null )
ent . setAssumeValid ( true ) ;
dirc . write ( ) ;
if ( ! dirc . commit ( ) )
throw new IOException ( "could not commit" ) ;
}
}