@ -60,9 +60,11 @@ import org.eclipse.jgit.errors.NoWorkTreeException;
import org.eclipse.jgit.internal.storage.file.FileRepository ;
import org.eclipse.jgit.junit.JGitTestUtil ;
import org.eclipse.jgit.junit.RepositoryTestCase ;
import org.eclipse.jgit.storage.file.FileBasedConfig ;
import org.eclipse.jgit.submodule.SubmoduleWalk.IgnoreSubmoduleMode ;
import org.eclipse.jgit.treewalk.FileTreeIterator ;
import org.junit.Before ;
import org.junit.Test ;
import org.junit.experimental.theories.DataPoints ;
import org.junit.experimental.theories.Theories ;
import org.junit.experimental.theories.Theory ;
@ -295,4 +297,79 @@ public class IndexDiffSubmoduleTest extends RepositoryTestCase {
indexDiff . getAdded ( ) . toString ( ) ) ;
}
@Test
public void testIndexDiffTwoSubmodules ( ) throws Exception {
// Create a second submodule
try ( Repository submodule2 = createWorkRepository ( ) ) {
JGitTestUtil . writeTrashFile ( submodule2 , "fileInSubmodule2" ,
"submodule2" ) ;
Git subGit = Git . wrap ( submodule2 ) ;
subGit . add ( ) . addFilepattern ( "fileInSubmodule2" ) . call ( ) ;
subGit . commit ( ) . setMessage ( "add file to submodule2" ) . call ( ) ;
try ( Repository sub2 = Git . wrap ( db )
. submoduleAdd ( ) . setPath ( "modules/submodule2" )
. setURI ( submodule2 . getDirectory ( ) . toURI ( ) . toString ( ) )
. call ( ) ) {
writeTrashFile ( "fileInRoot" , "root+" ) ;
Git rootGit = Git . wrap ( db ) ;
rootGit . add ( ) . addFilepattern ( "fileInRoot" ) . call ( ) ;
rootGit . commit ( ) . setMessage ( "add submodule2 and root file" )
. call ( ) ;
// Now change files in both submodules
JGitTestUtil . writeTrashFile ( submodule_db , "fileInSubmodule" ,
"submodule changed" ) ;
JGitTestUtil . writeTrashFile ( sub2 , "fileInSubmodule2" ,
"submodule2 changed" ) ;
// Set up .gitmodules
FileBasedConfig gitmodules = new FileBasedConfig (
new File ( db . getWorkTree ( ) , Constants . DOT_GIT_MODULES ) ,
db . getFS ( ) ) ;
gitmodules . load ( ) ;
gitmodules . setString ( ConfigConstants . CONFIG_SUBMODULE_SECTION ,
"modules/submodule" , ConfigConstants . CONFIG_KEY_IGNORE ,
"all" ) ;
gitmodules . setString ( ConfigConstants . CONFIG_SUBMODULE_SECTION ,
"modules/submodule2" , ConfigConstants . CONFIG_KEY_IGNORE ,
"none" ) ;
gitmodules . save ( ) ;
IndexDiff indexDiff = new IndexDiff ( db , Constants . HEAD ,
new FileTreeIterator ( db ) ) ;
assertTrue ( indexDiff . diff ( ) ) ;
String [ ] modified = indexDiff . getModified ( )
. toArray ( new String [ 0 ] ) ;
Arrays . sort ( modified ) ;
assertEquals ( "[.gitmodules, modules/submodule2]" ,
Arrays . toString ( modified ) ) ;
// Try again with "dirty"
gitmodules . setString ( ConfigConstants . CONFIG_SUBMODULE_SECTION ,
"modules/submodule" , ConfigConstants . CONFIG_KEY_IGNORE ,
"dirty" ) ;
gitmodules . save ( ) ;
indexDiff = new IndexDiff ( db , Constants . HEAD ,
new FileTreeIterator ( db ) ) ;
assertTrue ( indexDiff . diff ( ) ) ;
modified = indexDiff . getModified ( ) . toArray ( new String [ 0 ] ) ;
Arrays . sort ( modified ) ;
assertEquals ( "[.gitmodules, modules/submodule2]" ,
Arrays . toString ( modified ) ) ;
// Test the config override
StoredConfig cfg = db . getConfig ( ) ;
cfg . setString ( ConfigConstants . CONFIG_SUBMODULE_SECTION ,
"modules/submodule" , ConfigConstants . CONFIG_KEY_IGNORE ,
"none" ) ;
cfg . setString ( ConfigConstants . CONFIG_SUBMODULE_SECTION ,
"modules/submodule2" , ConfigConstants . CONFIG_KEY_IGNORE ,
"all" ) ;
cfg . save ( ) ;
indexDiff = new IndexDiff ( db , Constants . HEAD ,
new FileTreeIterator ( db ) ) ;
assertTrue ( indexDiff . diff ( ) ) ;
modified = indexDiff . getModified ( ) . toArray ( new String [ 0 ] ) ;
Arrays . sort ( modified ) ;
assertEquals ( "[.gitmodules, modules/submodule]" ,
Arrays . toString ( modified ) ) ;
}
}
}
}