package org.iwakura.larcjb import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.vcs.ProjectLevelVcsManager import com.intellij.openapi.vcs.VcsKey import com.intellij.openapi.vcs.VcsRootChecker import com.intellij.openapi.vfs.VirtualFile /** * Determines if a directory is a larc repository by checking for .larc directory. */ class LarcRootChecker : VcsRootChecker() { override fun getSupportedVcs(): VcsKey { /* * Get VcsKey from any open project that has Larc VCS registered. * This is needed because VcsKey constructor is package-private. */ val projects = ProjectManager.getInstance().openProjects for (project in projects) { val vcsManager = ProjectLevelVcsManager.getInstance(project) val vcs = vcsManager.findVcsByName(LarcVcs.NAME) if (vcs != null) { return vcs.keyInstanceMethod } } /* Fallback: return key from default project */ val defaultProject = ProjectManager.getInstance().defaultProject val vcs = ProjectLevelVcsManager.getInstance(defaultProject).findVcsByName(LarcVcs.NAME) return vcs?.keyInstanceMethod ?: throw IllegalStateException("Larc VCS not registered") } override fun isRoot(path: VirtualFile): Boolean { val larcDir = path.findChild(LarcVcs.LARC_DIR) return larcDir != null && larcDir.isDirectory } override fun isVcsDir(dirName: String): Boolean { return dirName.equals(LarcVcs.LARC_DIR, ignoreCase = false) } override fun validateRoot(path: VirtualFile): Boolean { /* * Additional validation: check for larc.db inside .larc * This distinguishes larc repos from other tools that might use .larc */ val larcDir = path.findChild(LarcVcs.LARC_DIR) ?: return false return larcDir.findChild("larc.db") != null } }