The latest changes to IndexDiff just assumed that all configured submodules are allways cloned. If a configured submodule did not exist an exception was thrown. This is fixed by this commit. Bug: 450567 Change-Id: Iabe3b196d998c19483082e5720038ebddaeb1890tags/v3.6.0.201411121045-m1
@@ -56,11 +56,15 @@ import java.io.File; | |||
import java.io.FileWriter; | |||
import java.io.IOException; | |||
import org.eclipse.jgit.api.Git; | |||
import org.eclipse.jgit.api.Status; | |||
import org.eclipse.jgit.api.errors.GitAPIException; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.dircache.DirCacheEditor; | |||
import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit; | |||
import org.eclipse.jgit.dircache.DirCacheEntry; | |||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||
import org.eclipse.jgit.errors.NoWorkTreeException; | |||
import org.eclipse.jgit.junit.RepositoryTestCase; | |||
import org.eclipse.jgit.junit.TestRepository; | |||
import org.eclipse.jgit.lib.Config; | |||
@@ -98,7 +102,7 @@ public class SubmoduleWalkTest extends RepositoryTestCase { | |||
@Test | |||
public void repositoryWithRootLevelSubmodule() throws IOException, | |||
ConfigInvalidException { | |||
ConfigInvalidException, NoWorkTreeException, GitAPIException { | |||
final ObjectId id = ObjectId | |||
.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234"); | |||
final String path = "sub"; | |||
@@ -124,6 +128,8 @@ public class SubmoduleWalkTest extends RepositoryTestCase { | |||
assertNull(gen.getModulesUpdate()); | |||
assertNull(gen.getModulesUrl()); | |||
assertNull(gen.getRepository()); | |||
Status status = Git.wrap(db).status().call(); | |||
assertTrue(!status.isClean()); | |||
assertFalse(gen.next()); | |||
} | |||
@@ -532,27 +532,29 @@ public class IndexDiff { | |||
throw e1; | |||
} | |||
Repository subRepo = smw.getRepository(); | |||
ObjectId subHead = subRepo.resolve("HEAD"); //$NON-NLS-1$ | |||
if (subHead != null && !subHead.equals(smw.getObjectId())) | |||
modified.add(smw.getPath()); | |||
else if (ignoreSubmoduleMode != IgnoreSubmoduleMode.DIRTY) { | |||
IndexDiff smid = submoduleIndexDiffs.get(smw.getPath()); | |||
if (smid == null) { | |||
smid = new IndexDiff(subRepo, smw.getObjectId(), | |||
wTreeIt.getWorkingTreeIterator(subRepo)); | |||
submoduleIndexDiffs.put(smw.getPath(), smid); | |||
} | |||
if (smid.diff()) { | |||
if (ignoreSubmoduleMode == IgnoreSubmoduleMode.UNTRACKED | |||
&& smid.getAdded().isEmpty() | |||
&& smid.getChanged().isEmpty() | |||
&& smid.getConflicting().isEmpty() | |||
&& smid.getMissing().isEmpty() | |||
&& smid.getModified().isEmpty() | |||
&& smid.getRemoved().isEmpty()) { | |||
continue; | |||
} | |||
if (subRepo != null) { | |||
ObjectId subHead = subRepo.resolve("HEAD"); //$NON-NLS-1$ | |||
if (subHead != null && !subHead.equals(smw.getObjectId())) | |||
modified.add(smw.getPath()); | |||
else if (ignoreSubmoduleMode != IgnoreSubmoduleMode.DIRTY) { | |||
IndexDiff smid = submoduleIndexDiffs.get(smw.getPath()); | |||
if (smid == null) { | |||
smid = new IndexDiff(subRepo, smw.getObjectId(), | |||
wTreeIt.getWorkingTreeIterator(subRepo)); | |||
submoduleIndexDiffs.put(smw.getPath(), smid); | |||
} | |||
if (smid.diff()) { | |||
if (ignoreSubmoduleMode == IgnoreSubmoduleMode.UNTRACKED | |||
&& smid.getAdded().isEmpty() | |||
&& smid.getChanged().isEmpty() | |||
&& smid.getConflicting().isEmpty() | |||
&& smid.getMissing().isEmpty() | |||
&& smid.getModified().isEmpty() | |||
&& smid.getRemoved().isEmpty()) { | |||
continue; | |||
} | |||
modified.add(smw.getPath()); | |||
} | |||
} | |||
} | |||
} |