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