From b5a42f56e44f2d806fa87e67a1bc9035ab33155b Mon Sep 17 00:00:00 2001 From: irengrig Date: Mon, 1 Feb 2010 10:13:49 +0300 Subject: [PATCH] IDEA-51905 (CVS: Update Project and Repository/Incoming views don't work if the VCS rooot is set to , but the project root itself doesn't contain CVS admin files) --- .../intellij/openapi/vcs/actions/AbstractVcsAction.java | 9 ++++----- .../openapi/vcs/actions/DescindingFilesFilter.java | 8 +++++++- .../openapi/vcs/impl/projectlevelman/MappingsToRoots.java | 4 +++- .../openapi/vcs/update/AbstractCommonUpdateAction.java | 15 ++++++++++++++- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AbstractVcsAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AbstractVcsAction.java index 1467ab6584..57a3a3b518 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AbstractVcsAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AbstractVcsAction.java @@ -19,17 +19,16 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.AsyncUpdateAction; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.project.Project; import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.ProjectLevelVcsManager; -import com.intellij.openapi.vcs.VcsKey; -import com.intellij.openapi.vfs.VfsUtil; import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.Collection; +import java.util.Collections; public abstract class AbstractVcsAction extends AsyncUpdateAction implements DumbAware { public static Collection getActiveVcses(VcsContext dataContext) { @@ -43,7 +42,7 @@ public abstract class AbstractVcsAction extends AsyncUpdateAction im @NotNull protected static FilePath[] filterDescindingFiles(@NotNull FilePath[] roots, Project project) { - return DescindingFilesFilter.filterDescindingFiles(roots, project); + return DescindingFilesFilter.filterDescindingFiles(roots, project, null); } protected VcsContext prepareDataFromContext(final AnActionEvent e) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/DescindingFilesFilter.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/DescindingFilesFilter.java index 092be3c0e4..362237d397 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/DescindingFilesFilter.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/DescindingFilesFilter.java @@ -16,12 +16,15 @@ package com.intellij.openapi.vcs.actions; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsKey; import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.util.containers.Convertor; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -30,7 +33,8 @@ public class DescindingFilesFilter { } @NotNull - public static FilePath[] filterDescindingFiles(@NotNull FilePath[] roots, Project project) { + public static FilePath[] filterDescindingFiles(@NotNull FilePath[] roots, Project project, + @Nullable final Convertor, Boolean> pathsFilter) { final List result = new LinkedList(); ProjectLevelVcsManager manager = ProjectLevelVcsManager.getInstance(project); @@ -44,6 +48,8 @@ public class DescindingFilesFilter { result.add(root); continue; } + if (pathsFilter != null && (! pathsFilter.convert(new Pair(root, vcs)))) continue; + final List chain = chains.get(vcs.getKeyInstanceMethod()); if (chain == null) { final LinkedList newList = new LinkedList(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java index e0088ca7f9..4c158a59a9 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/projectlevelman/MappingsToRoots.java @@ -46,7 +46,9 @@ public class MappingsToRoots { if (! vcs.allowsNestedRoots()) { int i=1; while(i < result.size()) { - if (ExcludedFileIndex.getInstance(myProject).isValidAncestor(result.get(i-1), result.get(i))) { + final VirtualFile previous = result.get(i - 1); + final VirtualFile current = result.get(i); + if (ExcludedFileIndex.getInstance(myProject).isValidAncestor(previous, current) && vcs.isVersionedDirectory(previous)) { result.remove(i); } else { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java index f227b67789..4f5b2a9470 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java @@ -31,9 +31,11 @@ import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.ui.MessageType; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.actions.AbstractVcsAction; +import com.intellij.openapi.vcs.actions.DescindingFilesFilter; import com.intellij.openapi.vcs.actions.VcsContext; import com.intellij.openapi.vcs.changes.RemoteRevisionsCache; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; @@ -48,6 +50,7 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.util.containers.Convertor; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.OptionsDialog; import com.intellij.vcsUtil.VcsUtil; @@ -81,7 +84,14 @@ public abstract class AbstractCommonUpdateAction extends AbstractVcsAction { if (project != null) { try { final FilePath[] filePaths = myScopeInfo.getRoots(context, myActionInfo); - final FilePath[] roots = filterDescindingFiles(filterRoots(filePaths, context), project); + final FilePath[] roots = DescindingFilesFilter.filterDescindingFiles(filterRoots(filePaths, context), project, + new Convertor, Boolean>() { + public Boolean convert(Pair pair) { + final AbstractVcs vcs = pair.getSecond(); + final FilePath fp = pair.getFirst(); + return vcs.isVersionedDirectory(fp.getVirtualFile()); + } + }); if (roots.length == 0) { return; } @@ -369,8 +379,11 @@ public abstract class AbstractCommonUpdateAction extends AbstractVcsAction { final SequentialUpdatesContext context = myContextInfo.get(vcs); final Ref refContext = new Ref(context); + + // actual update UpdateSession updateSession = updateEnvironment.updateDirectories(files.toArray(new FilePath[files.size()]), myUpdatedFiles, progressIndicator, refContext); + myContextInfo.put(vcs, refContext.get()); processed++; if (progressIndicator != null) { -- 2.11.4.GIT