in git-server/src/main/java/jetbrains/buildServer/buildTriggers/vcs/git/gitProxy/GitProxyChangesCollector.java [433:458]
private String findCorrespondingFromRevision(@NotNull String topModVersion, @NotNull RepositoryStateData fromState, @NotNull RepositoryStateData toState,
@NotNull Map<String, ModificationData> modificationDataMap, boolean expandSafeMergeBranches) {
String topFromRevision = null;
String topBranch = null;
for (Map.Entry<String, String> toEntry : toState.getBranchRevisions().entrySet()) {
if (topModVersion.equals(toEntry.getValue())) {
topBranch = toEntry.getKey();
String fromRev = fromState.getBranchRevisions().get(toEntry.getKey());
if (fromRev != null && !fromRev.equals(topModVersion)) {
topFromRevision = fromRev;
break;
}
}
}
// try to find from revision for original branch for safe merge
if (expandSafeMergeBranches && topFromRevision == null && topBranch != null && topBranch.endsWith("/safe-merge")) {
ModificationData correspondingModData = modificationDataMap.get(topModVersion);
if (correspondingModData == null) return null;
List<String> parentRevisions = correspondingModData.getParentRevisions();
if (parentRevisions.isEmpty()) return null;
String originalBranchRev = parentRevisions.size() >= 2 ? parentRevisions.get(1) : parentRevisions.get(0);
return findCorrespondingFromRevision(originalBranchRev, fromState, toState, modificationDataMap, false);
}
return topFromRevision;
}