in ddm-rrm-git-integration/src/main/java/com/epam/digital/data/platform/management/gitintegration/service/JGitServiceImpl.java [186:231]
public List<String> getConflicts(@NonNull String repositoryName) {
log.debug("Retrieving conflicts in repository {}", repositoryName);
var repositoryDirectory = getExistedRepository(repositoryName);
log.trace("Synchronizing repo {}", repositoryName);
var lock = getLock(repositoryName);
lock.lock();
log.trace("Opening repo {}", repositoryName);
try (var git = openRepo(repositoryDirectory)) {
fetch(
git,
Constants.R_HEADS
+ gerritPropertiesConfig.getHeadBranch()
+ ":"
+ Constants.R_REMOTES
+ Constants.DEFAULT_REMOTE_NAME
+ "/"
+ gerritPropertiesConfig.getHeadBranch());
var originMasterId =
git.getRepository()
.resolve(
Constants.DEFAULT_REMOTE_NAME + "/" + gerritPropertiesConfig.getHeadBranch());
var mergeResult =
git.merge()
.include(originMasterId)
.setCommit(false)
.setFastForward(MergeCommand.FastForwardMode.NO_FF)
.call();
Map<String, int[][]> conflicts = mergeResult.getConflicts();
log.info("Conflicts: {}", conflicts);
git.reset().setMode(ResetType.HARD).call();
if (conflicts != null && conflicts.size() > 0) {
return conflicts.keySet().stream().collect(Collectors.toList());
} else {
return Collections.emptyList();
}
} catch (IOException | GitAPIException e) {
throw new GitCommandException(
String.format(
"Exception occurred during getting conflicts for repository %s: %s",
repositoryDirectory.getName(), e.getMessage()),
e);
} finally {
lock.unlock();
log.trace("Repo {} lock released", repositoryName);
}
}