protected static void showApplyStatus(@NotNull Project project, final ApplyPatchStatus status) { if (status == ApplyPatchStatus.ALREADY_APPLIED) { showError(project, VcsBundle.message("patch.apply.already.applied"), false); } else if (status == ApplyPatchStatus.PARTIAL) { showError(project, VcsBundle.message("patch.apply.partially.applied"), false); } else if (ApplyPatchStatus.SUCCESS.equals(status)) { final String message = VcsBundle.message("patch.apply.success.applied.text"); VcsBalloonProblemNotifier.NOTIFICATION_GROUP .createNotification(message, MessageType.INFO) .notify(project); } }
@Nullable private ApplyPatchStatus actualApply( final List<Pair<VirtualFile, ApplyTextFilePatch>> textPatches, final List<Pair<VirtualFile, ApplyFilePatchBase<BinaryType>>> binaryPatches, final CommitContext commitContext) { final ApplyPatchContext context = new ApplyPatchContext(myBaseDirectory, 0, true, true); ApplyPatchStatus status; try { status = applyList(textPatches, context, null, commitContext); if (status == ApplyPatchStatus.ABORT) return status; if (myCustomForBinaries == null) { status = applyList(binaryPatches, context, status, commitContext); } else { ApplyPatchStatus patchStatus = myCustomForBinaries.apply(binaryPatches); final List<FilePatch> appliedPatches = myCustomForBinaries.getAppliedPatches(); moveForCustomBinaries(binaryPatches, appliedPatches); status = ApplyPatchStatus.and(status, patchStatus); myRemainingPatches.removeAll(appliedPatches); } } catch (IOException e) { showError(myProject, e.getMessage(), true); return ApplyPatchStatus.ABORT; } return status; }
@Nullable protected ApplyPatchStatus executeWritable() { final ReadonlyStatusHandler.OperationStatus readOnlyFilesStatus = getReadOnlyFilesStatus(myVerifier.getWritableFiles()); if (readOnlyFilesStatus.hasReadonlyFiles()) { showError(myProject, readOnlyFilesStatus.getReadonlyFilesMessage(), true); return ApplyPatchStatus.ABORT; } myFailedPatches.addAll(myVerifier.filterBadFileTypePatches()); ApplyPatchStatus result = myFailedPatches.isEmpty() ? null : ApplyPatchStatus.FAILURE; final List<Pair<VirtualFile, ApplyTextFilePatch>> textPatches = myVerifier.getTextPatches(); try { markInternalOperation(textPatches, true); return ApplyPatchStatus.and( result, actualApply(textPatches, myVerifier.getBinaryPatches(), myCommitContext)); } finally { markInternalOperation(textPatches, false); } }