mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[git] Check for CRLFs under modal progress, support cancel button.
This commit is contained in:
@@ -17,6 +17,9 @@ package git4idea.checkin;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
@@ -48,6 +51,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
* Prohibits commiting with an empty messages.
|
||||
@@ -104,12 +108,25 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory {
|
||||
return ReturnResult.COMMIT;
|
||||
}
|
||||
|
||||
PlatformFacade platformFacade = ServiceManager.getService(myProject, PlatformFacade.class);
|
||||
Git git = ServiceManager.getService(Git.class);
|
||||
final PlatformFacade platformFacade = ServiceManager.getService(myProject, PlatformFacade.class);
|
||||
final Git git = ServiceManager.getService(Git.class);
|
||||
|
||||
Collection<VirtualFile> files = myPanel.getVirtualFiles(); // deleted files aren't included, but for them we don't care about CRLFs.
|
||||
GitCrlfProblemsDetector crlfHelper = GitCrlfProblemsDetector.detect(myProject, platformFacade, git, files);
|
||||
if (crlfHelper.shouldWarn()) {
|
||||
final Collection<VirtualFile> files = myPanel.getVirtualFiles(); // deleted files aren't included, but for them we don't care about CRLFs.
|
||||
final AtomicReference<GitCrlfProblemsDetector> crlfHelper = new AtomicReference<GitCrlfProblemsDetector>();
|
||||
ProgressManager.getInstance().run(
|
||||
new Task.Modal(myProject, "Checking for line separator issues...", true) {
|
||||
@Override
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
crlfHelper.set(GitCrlfProblemsDetector.detect(GitCheckinHandlerFactory.MyCheckinHandler.this.myProject,
|
||||
platformFacade, git, files));
|
||||
}
|
||||
});
|
||||
|
||||
if (crlfHelper.get() == null) { // detection cancelled
|
||||
return ReturnResult.CANCEL;
|
||||
}
|
||||
|
||||
if (crlfHelper.get().shouldWarn()) {
|
||||
final GitCrlfDialog dialog = new GitCrlfDialog(myProject);
|
||||
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
|
||||
@Override
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package git4idea.crlf;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
@@ -116,6 +117,7 @@ public class GitCrlfProblemsDetector {
|
||||
Map<String, Collection<GitAttribute>> attributes = parser.getAttributes();
|
||||
Collection<VirtualFile> filesWithoutAttrs = new ArrayList<VirtualFile>();
|
||||
for (VirtualFile file : files) {
|
||||
ProgressIndicatorProvider.checkCanceled();
|
||||
String relativePath = FileUtil.getRelativePath(root.getPath(), file.getPath(), '/');
|
||||
Collection<GitAttribute> attrs = attributes.get(relativePath);
|
||||
if (attrs == null || !attrs.contains(GitAttribute.TEXT) && !attrs.contains(GitAttribute.CRLF)) {
|
||||
@@ -146,6 +148,7 @@ public class GitCrlfProblemsDetector {
|
||||
private Collection<VirtualFile> findFilesWithCrlf(@NotNull Collection<VirtualFile> files) {
|
||||
Collection<VirtualFile> filesWithCrlf = new ArrayList<VirtualFile>();
|
||||
for (VirtualFile file : files) {
|
||||
ProgressIndicatorProvider.checkCanceled();
|
||||
String separator = myPlatformFacade.getLineSeparator(file, true);
|
||||
if (CRLF.equals(separator)) {
|
||||
filesWithCrlf.add(file);
|
||||
|
||||
Reference in New Issue
Block a user