Search in sources :

Example 21 with AbstractVcs

use of com.intellij.openapi.vcs.AbstractVcs in project intellij-community by JetBrains.

the class VcsRootDetectorImpl method scanForSingleRootAboveDir.

@NotNull
private List<VcsRoot> scanForSingleRootAboveDir(@NotNull final VirtualFile dir) {
    List<VcsRoot> roots = new ArrayList<>();
    if (myProject.isDisposed()) {
        return roots;
    }
    VirtualFile par = dir.getParent();
    while (par != null) {
        List<AbstractVcs> vcsList = getVcsListFor(par);
        for (AbstractVcs vcs : vcsList) {
            roots.add(new VcsRoot(vcs, par));
        }
        if (!roots.isEmpty()) {
            return roots;
        }
        par = par.getParent();
    }
    return roots;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) VcsRoot(com.intellij.openapi.vcs.VcsRoot) AbstractVcs(com.intellij.openapi.vcs.AbstractVcs) NotNull(org.jetbrains.annotations.NotNull)

Example 22 with AbstractVcs

use of com.intellij.openapi.vcs.AbstractVcs in project intellij-community by JetBrains.

the class ModuleVcsDetector method autoDetectVcsMappings.

private void autoDetectVcsMappings(final boolean tryMapPieces) {
    Set<AbstractVcs> usedVcses = new HashSet<>();
    Map<VirtualFile, AbstractVcs> vcsMap = new HashMap<>();
    final ModuleManager moduleManager = ModuleManager.getInstance(myProject);
    for (Module module : moduleManager.getModules()) {
        final VirtualFile[] files = ModuleRootManager.getInstance(module).getContentRoots();
        for (VirtualFile file : files) {
            AbstractVcs contentRootVcs = myVcsManager.findVersioningVcs(file);
            if (contentRootVcs != null) {
                vcsMap.put(file, contentRootVcs);
            }
            usedVcses.add(contentRootVcs);
        }
    }
    if (usedVcses.size() == 1) {
        // todo I doubt this is correct, see IDEA-50527
        final AbstractVcs[] abstractVcses = usedVcses.toArray(new AbstractVcs[1]);
        final Module[] modules = moduleManager.getModules();
        final Set<String> contentRoots = new HashSet<>();
        for (Module module : modules) {
            final VirtualFile[] roots = ModuleRootManager.getInstance(module).getContentRoots();
            for (VirtualFile root : roots) {
                contentRoots.add(root.getPath());
            }
        }
        if (abstractVcses[0] != null) {
            final List<VcsDirectoryMapping> vcsDirectoryMappings = new ArrayList<>(myVcsManager.getDirectoryMappings());
            for (Iterator<VcsDirectoryMapping> iterator = vcsDirectoryMappings.iterator(); iterator.hasNext(); ) {
                final VcsDirectoryMapping mapping = iterator.next();
                if (!contentRoots.contains(mapping.getDirectory())) {
                    iterator.remove();
                }
            }
            myVcsManager.setAutoDirectoryMapping("", abstractVcses[0].getName());
            for (VcsDirectoryMapping mapping : vcsDirectoryMappings) {
                myVcsManager.removeDirectoryMapping(mapping);
            }
            myVcsManager.cleanupMappings();
        }
    } else if (tryMapPieces) {
        for (Map.Entry<VirtualFile, AbstractVcs> entry : vcsMap.entrySet()) {
            myVcsManager.setAutoDirectoryMapping(entry.getKey().getPath(), entry.getValue() == null ? "" : entry.getValue().getName());
        }
        myVcsManager.cleanupMappings();
    }
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) VcsDirectoryMapping(com.intellij.openapi.vcs.VcsDirectoryMapping) ModuleManager(com.intellij.openapi.module.ModuleManager) AbstractVcs(com.intellij.openapi.vcs.AbstractVcs) Module(com.intellij.openapi.module.Module)

Example 23 with AbstractVcs

use of com.intellij.openapi.vcs.AbstractVcs in project intellij-community by JetBrains.

the class VcsEP method getVcs.

@Nullable
public AbstractVcs getVcs(@NotNull Project project) {
    synchronized (LOCK) {
        if (myVcs != null) {
            return myVcs;
        }
    }
    AbstractVcs vcs = getInstance(project, vcsClass);
    synchronized (LOCK) {
        if (myVcs == null && vcs != null) {
            vcs.setupEnvironments();
            myVcs = vcs;
        }
        return myVcs;
    }
}
Also used : AbstractVcs(com.intellij.openapi.vcs.AbstractVcs) Nullable(org.jetbrains.annotations.Nullable)

Example 24 with AbstractVcs

use of com.intellij.openapi.vcs.AbstractVcs in project intellij-community by JetBrains.

the class MappingsToRoots method getRootsUnderVcs.

@NotNull
public VirtualFile[] getRootsUnderVcs(@NotNull AbstractVcs vcs) {
    List<VirtualFile> result = myMappings.getMappingsAsFilesUnderVcs(vcs);
    final AbstractVcs.RootsConvertor convertor = vcs.getCustomConvertor();
    if (convertor != null) {
        result = convertor.convertRoots(result);
    }
    Collections.sort(result, FilePathComparator.getInstance());
    if (!vcs.allowsNestedRoots()) {
        final FileIndexFacade facade = PeriodicalTasksCloser.getInstance().safeGetService(myProject, FileIndexFacade.class);
        final List<VirtualFile> finalResult = result;
        ApplicationManager.getApplication().runReadAction(() -> {
            int i = 1;
            while (i < finalResult.size()) {
                final VirtualFile previous = finalResult.get(i - 1);
                final VirtualFile current = finalResult.get(i);
                if (facade.isValidAncestor(previous, current)) {
                    finalResult.remove(i);
                } else {
                    i++;
                }
            }
        });
    }
    result.removeIf(file -> !file.isDirectory());
    return VfsUtilCore.toVirtualFileArray(result);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) AbstractVcs(com.intellij.openapi.vcs.AbstractVcs) FileIndexFacade(com.intellij.openapi.roots.FileIndexFacade) NotNull(org.jetbrains.annotations.NotNull)

Example 25 with AbstractVcs

use of com.intellij.openapi.vcs.AbstractVcs in project intellij-community by JetBrains.

the class AnnotateRevisionFromHistoryAction method isEnabled.

@Override
protected boolean isEnabled(@NotNull FileHistoryUi ui, @Nullable VcsFullCommitDetails detail, @NotNull AnActionEvent e) {
    VcsKey key = e.getData(VcsDataKeys.VCS);
    if (key == null)
        return false;
    AbstractVcs vcs = VcsUtil.findVcsByKey(notNull(e.getProject()), key);
    if (vcs == null)
        return false;
    AnnotationProvider provider = vcs.getAnnotationProvider();
    if (provider == null)
        return false;
    if (detail != null) {
        VcsFileRevision fileRevision = ui.createRevision(detail);
        return AnnotateRevisionActionBase.isEnabled(vcs, ui.createVcsVirtualFile(fileRevision), fileRevision);
    }
    return true;
}
Also used : VcsKey(com.intellij.openapi.vcs.VcsKey) AnnotationProvider(com.intellij.openapi.vcs.annotate.AnnotationProvider) VcsFileRevision(com.intellij.openapi.vcs.history.VcsFileRevision) AbstractVcs(com.intellij.openapi.vcs.AbstractVcs)

Aggregations

AbstractVcs (com.intellij.openapi.vcs.AbstractVcs)44 VirtualFile (com.intellij.openapi.vfs.VirtualFile)22 NotNull (org.jetbrains.annotations.NotNull)12 Project (com.intellij.openapi.project.Project)9 FilePath (com.intellij.openapi.vcs.FilePath)7 VcsRoot (com.intellij.openapi.vcs.VcsRoot)7 ProjectLevelVcsManager (com.intellij.openapi.vcs.ProjectLevelVcsManager)6 Nullable (org.jetbrains.annotations.Nullable)5 Module (com.intellij.openapi.module.Module)3 VcsDirectoryMapping (com.intellij.openapi.vcs.VcsDirectoryMapping)3 VcsKey (com.intellij.openapi.vcs.VcsKey)3 VcsFileRevision (com.intellij.openapi.vcs.history.VcsFileRevision)3 VcsHistoryProvider (com.intellij.openapi.vcs.history.VcsHistoryProvider)3 VcsRevisionNumber (com.intellij.openapi.vcs.history.VcsRevisionNumber)3 Date (java.util.Date)3 Pair (com.intellij.openapi.util.Pair)2 VcsException (com.intellij.openapi.vcs.VcsException)2 DiffProvider (com.intellij.openapi.vcs.diff.DiffProvider)2 VcsHistorySession (com.intellij.openapi.vcs.history.VcsHistorySession)2 VcsLogProvider (com.intellij.vcs.log.VcsLogProvider)2