in git-server/src/main/java/org/eclipse/jgit/treewalk/SubmoduleAwareTreeIterator.java [294:345]
public AbstractTreeIterator createSubtreeIterator(ObjectReader reader) throws IOException {
String path = myWrappedIterator.getEntryPathString();
MissingSubmoduleCommitInfo missingSubmoduleCommitInfo = myMissingSubmoduleCommitInfo == null ?
null :
myMissingSubmoduleCommitInfo.createInfoForSubmodule(ObjectId.toString(myWrappedIterator.getEntryObjectId()), path);
if (myIsOnSubmodule) {
CanonicalTreeParser p = new CanonicalTreeParser();
ObjectReader or = null;
try {
Repository r = mySubmoduleResolver.resolveRepository(mySubmoduleResolver.getSubmoduleUrl(path));
or = r.newObjectReader();
p.reset(or, mySubmoduleCommit.getTree().getId());
} catch (Exception e) {
if (e instanceof IOException)
throw (IOException) e;
IOException ioe = new IOException("Submodule error");
ioe.initCause(e);
throw ioe;
} finally {
if (or != null) or.close();
}
return createSubmoduleAwareTreeIterator(this,
p,
mySubmoduleResolver.getSubResolver(mySubmoduleCommit, path),
"",
mySubmoduleResolver.getSubmoduleUrl(path),
getPathFromRoot(path),
SubmodulesCheckoutPolicy.getSubSubModulePolicyFor(mySubmodulesPolicy),
myLogSubmoduleErrors,
myRules,
missingSubmoduleCommitInfo);
} else {
Repository r = mySubmoduleResolver.getRepository();
ObjectReader or = r.newObjectReader();
AbstractTreeIterator ati = null;
try {
ati = myWrappedIterator.createSubtreeIterator(or);
} finally {
or.close();
}
return createSubmoduleAwareTreeIterator(this,
ati,
mySubmoduleResolver,
path,
myUrl,
myPathFromRoot,
mySubmodulesPolicy,
myLogSubmoduleErrors,
myRules,
missingSubmoduleCommitInfo);
}
}