use of com.intellij.openapi.vcs.changes.CommitContext in project intellij-community by JetBrains.
the class ApplyPatchSaveToFileExecutor method savePatch.
private void savePatch(@NotNull MultiMap<VirtualFile, TextFilePatchInProgress> patchGroups, @NotNull VirtualFileWrapper targetFile) {
VirtualFile newPatchBase = notNull(myNewPatchBase, myProject.getBaseDir());
try {
List<FilePatch> textPatches = toOnePatchGroup(patchGroups, newPatchBase);
PatchWriter.writePatches(myProject, targetFile.getFile().getPath(), newPatchBase.getPath(), textPatches, new CommitContext(), CharsetToolkit.UTF8_CHARSET);
} catch (IOException e) {
LOG.info(e);
WaitForProgressToShow.runOrInvokeLaterAboveProgress(() -> Messages.showErrorDialog(myProject, message("create.patch.error.title", e.getMessage()), getErrorTitle()), null, myProject);
}
}
use of com.intellij.openapi.vcs.changes.CommitContext in project intellij-community by JetBrains.
the class DiffShelvedChangesAction method processTextChanges.
private static void processTextChanges(@NotNull final Project project, @NotNull List<ShelvedChange> changesFromFirstList, @NotNull List<MyDiffRequestProducer> diffRequestProducers) {
final String base = project.getBasePath();
final ApplyPatchContext patchContext = new ApplyPatchContext(project.getBaseDir(), 0, false, false);
final PatchesPreloader preloader = new PatchesPreloader(project);
for (final ShelvedChange shelvedChange : changesFromFirstList) {
final String beforePath = shelvedChange.getBeforePath();
final String afterPath = shelvedChange.getAfterPath();
final FilePath filePath = VcsUtil.getFilePath(new File(base, afterPath == null ? beforePath : afterPath));
final boolean isNewFile = FileStatus.ADDED.equals(shelvedChange.getFileStatus());
// isNewFile -> parent directory, !isNewFile -> file
final VirtualFile file;
try {
file = ApplyFilePatchBase.findPatchTarget(patchContext, beforePath, afterPath, isNewFile);
if (!isNewFile && (file == null || !file.exists()))
throw new FileNotFoundException(beforePath);
} catch (IOException e) {
diffRequestProducers.add(new MyDiffRequestProducer(shelvedChange, filePath) {
@NotNull
@Override
public DiffRequest process(@NotNull UserDataHolder context, @NotNull ProgressIndicator indicator) throws DiffRequestProducerException, ProcessCanceledException {
throw new DiffRequestProducerException("Cannot find base for '" + (beforePath != null ? beforePath : afterPath) + "'");
}
});
continue;
}
diffRequestProducers.add(new MyDiffRequestProducer(shelvedChange, filePath) {
@NotNull
@Override
public DiffRequest process(@NotNull UserDataHolder context, @NotNull ProgressIndicator indicator) throws DiffRequestProducerException, ProcessCanceledException {
if (!isNewFile && file.getFileType() == UnknownFileType.INSTANCE) {
return new UnknownFileTypeDiffRequest(file, getName());
}
if (shelvedChange.isConflictingChange(project)) {
try {
final CommitContext commitContext = new CommitContext();
final TextFilePatch patch = preloader.getPatch(shelvedChange, commitContext);
final FilePath pathBeforeRename = patchContext.getPathBeforeRename(file);
final String relativePath = patch.getAfterName() == null ? patch.getBeforeName() : patch.getAfterName();
final Getter<CharSequence> baseContentGetter = new Getter<CharSequence>() {
@Override
public CharSequence get() {
BaseRevisionTextPatchEP baseRevisionTextPatchEP = Extensions.findExtension(PatchEP.EP_NAME, project, BaseRevisionTextPatchEP.class);
return baseRevisionTextPatchEP.provideContent(relativePath, commitContext);
}
};
Getter<ApplyPatchForBaseRevisionTexts> getter = new Getter<ApplyPatchForBaseRevisionTexts>() {
@Override
public ApplyPatchForBaseRevisionTexts get() {
return ApplyPatchForBaseRevisionTexts.create(project, file, pathBeforeRename, patch, baseContentGetter);
}
};
return PatchDiffRequestFactory.createConflictDiffRequest(project, file, patch, "Shelved Version", getter, getName(), context, indicator);
} catch (VcsException e) {
throw new DiffRequestProducerException("Can't show diff for '" + getName() + "'", e);
}
} else {
final Change change = shelvedChange.getChange(project);
return PatchDiffRequestFactory.createDiffRequest(project, change, getName(), context, indicator);
}
}
});
}
}
use of com.intellij.openapi.vcs.changes.CommitContext in project intellij-community by JetBrains.
the class UnshelvePatchDefaultExecutor method apply.
@Override
public void apply(@NotNull List<FilePatch> remaining, @NotNull MultiMap<VirtualFile, AbstractFilePatchInProgress> patchGroupsToApply, @Nullable LocalChangeList localList, @Nullable String fileName, @Nullable ThrowableComputable<Map<String, Map<String, CharSequence>>, PatchSyntaxException> additionalInfo) {
final CommitContext commitContext = new CommitContext();
applyAdditionalInfoBefore(myProject, additionalInfo, commitContext);
final Collection<PatchApplier> appliers = getPatchAppliers(patchGroupsToApply, localList, commitContext);
final ApplyPatchStatus patchStatus = executeAndApplyAdditionalInfo(localList, additionalInfo, commitContext, appliers);
if (patchStatus != ApplyPatchStatus.ABORT && patchStatus != ApplyPatchStatus.FAILURE) {
// remove only if partly applied or successful
removeAppliedAndSaveRemainedIfNeeded(remaining, appliers, commitContext);
}
}
use of com.intellij.openapi.vcs.changes.CommitContext in project intellij-community by JetBrains.
the class ApplyPatchDefaultExecutor method apply.
@CalledInAwt
@Override
public void apply(@NotNull List<FilePatch> remaining, @NotNull MultiMap<VirtualFile, AbstractFilePatchInProgress> patchGroupsToApply, @Nullable LocalChangeList localList, @Nullable String fileName, @Nullable ThrowableComputable<Map<String, Map<String, CharSequence>>, PatchSyntaxException> additionalInfo) {
final CommitContext commitContext = new CommitContext();
applyAdditionalInfoBefore(myProject, additionalInfo, commitContext);
final Collection<PatchApplier> appliers = getPatchAppliers(patchGroupsToApply, localList, commitContext);
executeAndApplyAdditionalInfo(localList, additionalInfo, commitContext, appliers);
}
Aggregations