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;
}
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();
}
}
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;
}
}
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);
}
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;
}
Aggregations