in src/org/jetbrains/tfsIntegration/core/TFSCheckinHandlerFactory.java [46:122]
protected CheckinHandler createVcsHandler(final CheckinProjectPanel panel) {
return new CheckinHandler() {
@Override
public ReturnResult beforeCheckin(@Nullable CommitExecutor executor, PairConsumer<Object, Object> additionalDataConsumer) {
if (executor != null) {
return ReturnResult.COMMIT;
}
if (!panel.vcsIsAffected(TFSVcs.TFS_NAME)) {
return ReturnResult.COMMIT;
}
boolean reallyAffected = false;
for (File file : panel.getFiles()) {
if (TFSVcs.isUnderTFS(VcsUtil.getFilePath(file), panel.getProject())) {
reallyAffected = true;
break;
}
}
if (!reallyAffected) {
return ReturnResult.COMMIT;
}
final TFSVcs vcs = TFSVcs.getInstance(panel.getProject());
final CheckinParameters parameters = vcs.getCheckinData().parameters;
if (parameters == null) {
Messages.showErrorDialog(panel.getProject(), "Validation must be performed before checking in", "Checkin");
return ReturnResult.CLOSE_WINDOW;
}
@Nullable Pair<String, CheckinParameters.Severity> msg = parameters.getValidationMessage(CheckinParameters.Severity.ERROR);
if (msg != null) {
Messages.showErrorDialog(panel.getProject(), msg.first, "Checkin: Validation Failed");
return ReturnResult.CANCEL;
}
try {
CheckinPoliciesManager.getInstalledPolicies();
}
catch (DuplicatePolicyIdException e) {
String message = MessageFormat
.format("Found multiple checkin policies with the same id: ''{0}''.\nPlease review your extensions.", e.getDuplicateId());
Messages.showErrorDialog(panel.getProject(), message, "Checkin Policies Evaluation");
vcs.getCheckinData().parameters = null;
return ReturnResult.CLOSE_WINDOW;
}
// need to evaluate policies again since comment and checkboxes state may change since last validation
// remove when commit dialog state change listener is provided
boolean completed = ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> {
final ProgressIndicator pi = ProgressManager.getInstance().getProgressIndicator();
pi.setIndeterminate(true);
parameters.evaluatePolicies(pi);
}, "Evaluating Checkin Policies", true, panel.getProject());
if (!completed) {
TFSCheckinEnvironment.updateMessage(vcs.getCheckinData());
return ReturnResult.CANCEL;
}
msg = parameters.getValidationMessage(CheckinParameters.Severity.WARNING);
if (msg == null) {
return ReturnResult.COMMIT;
}
OverridePolicyWarningsDialog d = new OverridePolicyWarningsDialog(panel.getProject(), parameters.getAllFailures());
if (d.showAndGet()) {
parameters.setOverrideReason(d.getReason());
return ReturnResult.COMMIT;
}
else {
return ReturnResult.CANCEL;
}
}
};
}