From a74f72258ce5fb995a3b414e8e0f3da01506d0b2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 26 Oct 2009 16:15:42 +0300 Subject: [PATCH] CVS: local changes update should not delay Project closing. extra canceled() checks (corrected) --- .../cvsstatuses/CvsChangeProvider.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsstatuses/CvsChangeProvider.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsstatuses/CvsChangeProvider.java index 8fe70cad5963..998c472f4d6e 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsstatuses/CvsChangeProvider.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsstatuses/CvsChangeProvider.java @@ -38,7 +38,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; @@ -87,30 +86,37 @@ public class CvsChangeProvider implements ChangeProvider { if (LOG.isDebugEnabled()) { LOG.debug("Processing changes for scope " + dirtyScope); } + final Runnable checkCanceled = new Runnable() { + public void run() { + if (progress != null) { + progress.checkCanceled(); + } + } + }; for (FilePath path : dirtyScope.getRecursivelyDirtyDirectories()) { final VirtualFile dir = path.getVirtualFile(); - ProgressManager.checkCanceled(); + checkCanceled.run(); if (dir != null) { - processEntriesIn(dir, dirtyScope, builder, true); + processEntriesIn(dir, dirtyScope, builder, true, checkCanceled); } else { - processFile(path, builder); + processFile(path, builder, checkCanceled); } } for (FilePath path : dirtyScope.getDirtyFiles()) { - ProgressManager.checkCanceled(); + checkCanceled.run(); if (path.isDirectory()) { final VirtualFile dir = path.getVirtualFile(); if (dir != null) { - processEntriesIn(dir, dirtyScope, builder, false); + processEntriesIn(dir, dirtyScope, builder, false, checkCanceled); } else { - processFile(path, builder); + processFile(path, builder, checkCanceled); } } else { - processFile(path, builder); + processFile(path, builder, checkCanceled); } } if (LOG.isDebugEnabled()) { @@ -125,7 +131,8 @@ public class CvsChangeProvider implements ChangeProvider { public void doCleanup(final List files) { } - private void processEntriesIn(@NotNull VirtualFile dir, VcsDirtyScope scope, ChangelistBuilder builder, boolean recursively) { + private void processEntriesIn(@NotNull VirtualFile dir, VcsDirtyScope scope, ChangelistBuilder builder, boolean recursively, + final Runnable checkCanceled) { final FilePath path = VcsContextFactory.SERVICE.getInstance().createFilePathOn(dir); if (!scope.belongsTo(path)) { if (LOG.isDebugEnabled()) { @@ -133,7 +140,7 @@ public class CvsChangeProvider implements ChangeProvider { } return; } - final DirectoryContent dirContent = getDirectoryContent(dir); + final DirectoryContent dirContent = getDirectoryContent(dir, checkCanceled); for (VirtualFile file : dirContent.getUnknownFiles()) { builder.processUnversionedFile(file); @@ -165,7 +172,7 @@ public class CvsChangeProvider implements ChangeProvider { builder.processChange(new Change(CurrentContentRevision.create(path), CurrentContentRevision.create(path), FileStatus.DELETED), CvsVcs2.getKey()); } for (VirtualFileEntry fileEntry : dirContent.getFiles()) { - processFile(dir, fileEntry.getVirtualFile(), fileEntry.getEntry(), builder); + processFile(dir, fileEntry.getVirtualFile(), fileEntry.getEntry(), builder, checkCanceled); } if (recursively) { @@ -175,7 +182,7 @@ public class CvsChangeProvider implements ChangeProvider { if (file.isDirectory()) { final boolean isIgnored = myFileIndex.isIgnored(file); if (!isIgnored) { - processEntriesIn(file, scope, builder, true); + processEntriesIn(file, scope, builder, true, checkCanceled); } else { if (LOG.isDebugEnabled()) { @@ -198,8 +205,8 @@ public class CvsChangeProvider implements ChangeProvider { } - private void processFile(final FilePath filePath, final ChangelistBuilder builder) { - ProgressManager.checkCanceled(); + private void processFile(final FilePath filePath, final ChangelistBuilder builder, final Runnable checkCanceled) { + checkCanceled.run(); final VirtualFile dir = filePath.getVirtualFileParent(); if (dir == null) return; @@ -210,8 +217,9 @@ public class CvsChangeProvider implements ChangeProvider { checkSwitchedFile(filePath, builder, dir, entry); } - private void processFile(final VirtualFile dir, @Nullable VirtualFile file, Entry entry, final ChangelistBuilder builder) { - ProgressManager.checkCanceled(); + private void processFile(final VirtualFile dir, @Nullable VirtualFile file, Entry entry, final ChangelistBuilder builder, + final Runnable checkCanceled) { + checkCanceled.run(); final FilePath filePath = VcsContextFactory.SERVICE.getInstance().createFilePathOn(dir, entry.getFileName()); final FileStatus status = CvsStatusProvider.getStatus(file, entry); final VcsRevisionNumber number = createRevisionNumber(entry.getRevision(), status); @@ -423,7 +431,7 @@ public class CvsChangeProvider implements ChangeProvider { return file == null || !FileTypeManager.getInstance().isFileIgnored(file.getName()); } - private static DirectoryContent getDirectoryContent(VirtualFile directory) { + private static DirectoryContent getDirectoryContent(VirtualFile directory, final Runnable checkCanceled) { if (LOG.isDebugEnabled()) { LOG.debug("Retrieving directory content for " + directory); } @@ -441,7 +449,7 @@ public class CvsChangeProvider implements ChangeProvider { } for (final Entry entry : entries) { - ProgressManager.checkCanceled(); + checkCanceled.run(); String fileName = entry.getFileName(); if (entry.isDirectory()) { if (nameToFileMap.containsKey(fileName)) { @@ -469,7 +477,7 @@ public class CvsChangeProvider implements ChangeProvider { } for (final String name : nameToFileMap.keySet()) { - ProgressManager.checkCanceled(); + checkCanceled.run(); VirtualFile unknown = nameToFileMap.get(name); if (unknown.isDirectory()) { if (isInContent(unknown)) {