mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs]: provide EP for vcs Ignored files holder
* move Hg specific holder as EP to hg4idea plugin; * optimize HashSet using one from ContainerUtils; * delegate activation for all specific ignored holders from composite; * remove hacky code from UpdateingChanglistBuilder; * now hg ignored files updating only by fully repo refresh;
This commit is contained in:
@@ -55,6 +55,8 @@
|
||||
interface="com.intellij.openapi.vcs.impl.VcsBaseContentProvider"
|
||||
area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint name="vcs.ignoredFilesHolder" interface="com.intellij.openapi.vcs.changes.VcsIgnoredFilesHolder" area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint name="vcsPopupProvider"
|
||||
interface="com.intellij.openapi.vcs.actions.VcsQuickListContentProvider"/>
|
||||
<extensionPoint name="patch.extension" interface="com.intellij.openapi.diff.impl.patch.PatchEP" area="IDEA_PROJECT"/>
|
||||
|
||||
@@ -17,7 +17,7 @@ package com.intellij.openapi.vcs.changes;
|
||||
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
|
||||
interface FileHolder {
|
||||
public interface FileHolder {
|
||||
void cleanAll();
|
||||
void cleanAndAdjustScope(VcsModifiableDirtyScope scope);
|
||||
FileHolder copy();
|
||||
@@ -25,7 +25,7 @@ interface FileHolder {
|
||||
|
||||
void notifyVcsStarted(AbstractVcs scope);
|
||||
|
||||
static enum HolderType {
|
||||
enum HolderType {
|
||||
DELETED,
|
||||
UNVERSIONED,
|
||||
SWITCHED,
|
||||
|
||||
+22
-23
@@ -16,22 +16,18 @@
|
||||
package com.intellij.openapi.vcs.changes;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author irengrig
|
||||
* Date: 2/10/11
|
||||
* Time: 3:57 PM
|
||||
*/
|
||||
public class IgnoredFilesCompositeHolder implements IgnoredFilesHolder {
|
||||
private final Map<AbstractVcs, IgnoredFilesHolder> myHolderMap;
|
||||
private final Project myProject;
|
||||
@@ -73,15 +69,6 @@ public class IgnoredFilesCompositeHolder implements IgnoredFilesHolder {
|
||||
return HolderType.IGNORED;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public IgnoredFilesHolder getAppropriateIgnoredHolder() {
|
||||
if (!myHolderMap.containsKey(myCurrentVcs)) {
|
||||
LOG.error("current vcs: " + myCurrentVcs);
|
||||
return null;
|
||||
}
|
||||
return myHolderMap.get(myCurrentVcs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFile(VirtualFile file) {
|
||||
if (!myHolderMap.containsKey(myCurrentVcs)) {
|
||||
@@ -95,7 +82,7 @@ public class IgnoredFilesCompositeHolder implements IgnoredFilesHolder {
|
||||
final AbstractVcs vcs = myVcsManager.getVcsFor(file);
|
||||
if (vcs == null) return false;
|
||||
final IgnoredFilesHolder ignoredFilesHolder = myHolderMap.get(vcs);
|
||||
return ignoredFilesHolder == null ? false : ignoredFilesHolder.containsFile(file);
|
||||
return ignoredFilesHolder != null && ignoredFilesHolder.containsFile(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -111,10 +98,22 @@ public class IgnoredFilesCompositeHolder implements IgnoredFilesHolder {
|
||||
@Override
|
||||
public void notifyVcsStarted(AbstractVcs vcs) {
|
||||
myCurrentVcs = vcs;
|
||||
if (! myHolderMap.containsKey(vcs)) {
|
||||
myHolderMap.put(vcs, vcs.reportsIgnoredDirectories() ? new RecursiveFileHolder(myProject, HolderType.IGNORED) :
|
||||
new MapIgnoredFilesHolder(myProject));
|
||||
}
|
||||
if (myHolderMap.containsKey(vcs)) return;
|
||||
|
||||
IgnoredFilesHolder ignoredFilesHolder =
|
||||
ObjectUtils.chooseNotNull(getHolderFromEP(vcs, myProject), new RecursiveFileHolder<>(myProject, HolderType.IGNORED));
|
||||
ignoredFilesHolder.notifyVcsStarted(vcs);
|
||||
myHolderMap.put(vcs, ignoredFilesHolder);
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
private static VcsIgnoredFilesHolder getHolderFromEP(AbstractVcs vcs, @NotNull Project project) {
|
||||
Optional<VcsIgnoredFilesHolder> ignoredFilesHolder =
|
||||
Stream.of(Extensions.getExtensions(VcsIgnoredFilesHolder.VCS_IGNORED_FILES_HOLDER_EP, project))
|
||||
.filter(holder -> holder.getVcs().equals(vcs))
|
||||
.findFirst();
|
||||
return ignoredFilesHolder.isPresent() ? ignoredFilesHolder.get() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-9
@@ -174,15 +174,7 @@ class UpdatingChangeListBuilder implements ChangelistBuilder {
|
||||
checkIfDisposed();
|
||||
if (isIgnoredByVcs(file)) return;
|
||||
if (myScope.belongsTo(VcsUtil.getFilePath(file))) {
|
||||
IgnoredFilesHolder ignoredFilesHolder = myComposite.getIgnoredFileHolder();
|
||||
if (ignoredFilesHolder instanceof IgnoredFilesCompositeHolder) {
|
||||
IgnoredFilesHolder holder = ((IgnoredFilesCompositeHolder)ignoredFilesHolder).getAppropriateIgnoredHolder();
|
||||
if (holder instanceof MapIgnoredFilesHolder) {
|
||||
((MapIgnoredFilesHolder)holder).addByVcsChangeProvider(file);
|
||||
return;
|
||||
}
|
||||
}
|
||||
ignoredFilesHolder.addFile(file);
|
||||
myComposite.getIgnoredFileHolder().addFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.openapi.vcs.changes;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface VcsIgnoredFilesHolder extends IgnoredFilesHolder {
|
||||
ExtensionPointName<VcsIgnoredFilesHolder> VCS_IGNORED_FILES_HOLDER_EP = ExtensionPointName.create("com.intellij.vcs.ignoredFilesHolder");
|
||||
|
||||
@NotNull
|
||||
AbstractVcs getVcs();
|
||||
}
|
||||
@@ -30,6 +30,7 @@
|
||||
<vcsPopupProvider implementation="org.zmlx.hg4idea.provider.HgQuickListProvider"/>
|
||||
<logProvider implementation="org.zmlx.hg4idea.log.HgLogProvider"/>
|
||||
<vcs.taskHandler implementation="org.zmlx.hg4idea.HgTaskHandler"/>
|
||||
<vcs.ignoredFilesHolder implementation="org.zmlx.hg4idea.provider.HgIgnoredFileHolder"/>
|
||||
|
||||
<applicationService serviceInterface="org.zmlx.hg4idea.HgGlobalSettings"
|
||||
serviceImplementation="org.zmlx.hg4idea.HgGlobalSettings"/>
|
||||
|
||||
+26
-33
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -13,47 +13,32 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.openapi.vcs.changes;
|
||||
package org.zmlx.hg4idea.provider;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.changes.FileHolder;
|
||||
import com.intellij.openapi.vcs.changes.VcsIgnoredFilesHolder;
|
||||
import com.intellij.openapi.vcs.changes.VcsModifiableDirtyScope;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.zmlx.hg4idea.HgVcs;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author irengrig
|
||||
* Date: 2/10/11
|
||||
* Time: 4:20 PM
|
||||
*/
|
||||
public class MapIgnoredFilesHolder extends AbstractIgnoredFilesHolder {
|
||||
private final static Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.changes.MapIgnoredFilesHolder");
|
||||
|
||||
public class HgIgnoredFileHolder implements VcsIgnoredFilesHolder {
|
||||
private final Project myProject;
|
||||
private HgVcs myVcs;
|
||||
private final Set<VirtualFile> mySet;
|
||||
private final Set<VirtualFile> myVcsIgnoredSet;
|
||||
private final Project myProject;
|
||||
|
||||
public MapIgnoredFilesHolder(Project project) {
|
||||
super(project);
|
||||
public HgIgnoredFileHolder(Project project) {
|
||||
myProject = project;
|
||||
mySet = new THashSet<>();
|
||||
myVcsIgnoredSet = new THashSet<>(); //collect ignored files from VcsChangeProvider -> processIgnored
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void removeFile(VirtualFile file) {
|
||||
mySet.remove(file);
|
||||
myVcsIgnoredSet.remove(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<VirtualFile> keys() {
|
||||
// if mySet has a big size -> idea will process all of this on every typing. see cleanAndAdjustScope() in AbstractIgnoredFilesHolder
|
||||
return mySet;
|
||||
myVcs = HgVcs.getInstance(myProject);
|
||||
mySet = ContainerUtil.newHashSet();
|
||||
myVcsIgnoredSet = ContainerUtil.newHashSet(); //collect ignored files from VcsChangeProvider -> processIgnored
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,9 +46,6 @@ public class MapIgnoredFilesHolder extends AbstractIgnoredFilesHolder {
|
||||
// todo fix more. take from x0x branch
|
||||
//LOG.assertTrue(! file.isDirectory());
|
||||
mySet.add(file);
|
||||
}
|
||||
|
||||
public void addByVcsChangeProvider(VirtualFile file) {
|
||||
myVcsIgnoredSet.add(file);
|
||||
}
|
||||
|
||||
@@ -76,6 +58,10 @@ public class MapIgnoredFilesHolder extends AbstractIgnoredFilesHolder {
|
||||
public Collection<VirtualFile> values() {
|
||||
return ContainerUtil.union(mySet, myVcsIgnoredSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanAndAdjustScope(final VcsModifiableDirtyScope scope) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanAll() {
|
||||
@@ -85,7 +71,7 @@ public class MapIgnoredFilesHolder extends AbstractIgnoredFilesHolder {
|
||||
|
||||
@Override
|
||||
public FileHolder copy() {
|
||||
final MapIgnoredFilesHolder result = new MapIgnoredFilesHolder(myProject);
|
||||
final HgIgnoredFileHolder result = new HgIgnoredFileHolder(myProject);
|
||||
result.mySet.addAll(mySet);
|
||||
result.myVcsIgnoredSet.addAll(myVcsIgnoredSet);
|
||||
return result;
|
||||
@@ -98,5 +84,12 @@ public class MapIgnoredFilesHolder extends AbstractIgnoredFilesHolder {
|
||||
|
||||
@Override
|
||||
public void notifyVcsStarted(AbstractVcs scope) {
|
||||
cleanAll();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public AbstractVcs getVcs() {
|
||||
return myVcs;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user