in idea-plugin/src/main/java/org/jetbrains/bunches/idea/vcs/BunchCheckinHandler.kt [72:124]
override fun beforeCheckin(
executor: CommitExecutor?,
additionalDataConsumer: PairConsumer<Any, Any>?
): ReturnResult {
if (!project.bunchFileCheckEnabled) return ReturnResult.COMMIT
val extensions = BunchFileUtils.bunchExtensions(project)?.toSet() ?: return ReturnResult.COMMIT
val forgottenFiles = mutableSetOf<VirtualFile>()
val allFiles = mutableMapOf<PsiFile, List<PsiFile>>()
val commitFiles = checkInProjectPanel.virtualFiles.toSet()
for (file in commitFiles) {
if (file.extension in extensions) continue
val psiFile = getPsiFile(file) ?: continue
val bunchFiles = getAllBunchFiles(psiFile.virtualFile, project)
allFiles[psiFile] = bunchFiles.mapNotNull { getPsiFile(it) }.toList()
forgottenFiles.addAll(bunchFiles.filter { it !in commitFiles })
}
if (forgottenFiles.isEmpty()) {
return ReturnResult.COMMIT
}
when (Messages.showYesNoCancelDialog(
project,
"Several bunch files haven't been updated\nDo you want to review them before commit?",
"Forgotten Bunch Files",
"Yes",
"No",
CommonBundle.getCancelButtonText(),
Messages.getWarningIcon()
)) {
YES -> {
val window = ToolWindowManager.getInstance(project).getToolWindow("Bunch Tool")
?: error("Window with ID = `Bunch Tool` should be registered")
ServiceManager
.getService(project, BunchToolWindowFactory::class.java)
.createCommitCheckToolWindowContent(
window, forgottenFiles, allFiles,
checkInProjectPanel
)
return ReturnResult.CLOSE_WINDOW
}
NO -> return ReturnResult.COMMIT
}
return ReturnResult.CANCEL
}