public RevCommit getSubmoduleCommit()

in git-server/src/main/java/jetbrains/buildServer/buildTriggers/vcs/git/submodules/SubmoduleResolverImpl.java [70:119]


  public RevCommit getSubmoduleCommit(@NotNull String parentRepositoryUrl,
                                      @NotNull String path,
                                      @NotNull ObjectId commit) throws CorruptObjectException, VcsException, URISyntaxException {
    ensureConfigLoaded();
    if (myConfig == null)
      throw new MissingSubmoduleConfigException(parentRepositoryUrl, myCommit.name(), path);

    final Submodule submodule = myConfig.findSubmodule(path);
    if (submodule == null)
      throw new MissingSubmoduleEntryException(parentRepositoryUrl, myCommit.name(), path);

    URIish submoduleUri = resolveSubmoduleUrl(submodule.getUrl());
    File repositoryDir = myContext.getRepositoryDir(submoduleUri);
    try {
      return myContext.getRepositoryManager().runWithDisabledRemove(repositoryDir, () -> {
        try {
          Repository r = resolveRepository(submodule.getUrl());
          String submoduleUrl = myContext.getConfig(r).getString("teamcity", null, "remote");

          if (!isCommitExist(r, commit)) {
            try {
              fetch(r, path, submodule.getUrl());
            } catch (Exception e) {
              throw new SubmoduleFetchException(parentRepositoryUrl, path, submoduleUrl, myCommit, e);
            }
          }
          try {
            return myCommitLoader.getCommit(r, commit);
          } catch (Exception e) {
            LOG.warnAndDebugDetails("Missing submodule", e);
            throw new MissingSubmoduleCommitException(parentRepositoryUrl, myCommit.name(), path, submodule.getUrl(), commit.name());
          }
        } catch (Exception e) {
          throw new RuntimeException(e);
        }
      });
    } catch (RuntimeException e) {
      Throwable cause = e.getCause();
      if (cause instanceof CorruptObjectException) {
        throw (CorruptObjectException) cause;
      }
      if (cause instanceof VcsException) {
        throw (VcsException) cause;
      }
      if (cause instanceof URISyntaxException) {
        throw (URISyntaxException) cause;
      }
      throw new VcsException(e);
    }
  }