public AbstractTreeIterator createSubtreeIterator()

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);
    }
  }