[Mercurial] Utility methods to find the parent hg root.
authorKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Fri, 18 Jun 2010 07:56:35 +0000 (11:56 +0400)
committerKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Fri, 18 Jun 2010 07:56:35 +0000 (11:56 +0400)
plugins/hg4idea/src/org/zmlx/hg4idea/HgUtil.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgVcs.java

index 52b77a2a0d7e86206b0f722c402caa7d7d44e634..dcb3ce3df2c478cbf571cb5fc0c9a33fcdf7a9b6 100644 (file)
@@ -174,4 +174,29 @@ public abstract class HgUtil {
   }
 
 
+  /**
+   * Finds the nearest parent directory which is an hg root.
+   * @param dir Directory which parent will be checked.
+   * @return Directory which is the nearest hg root being a parent of this directory,
+   * or <code>null</code> if this directory is not under hg.
+   * @see com.intellij.openapi.vcs.AbstractVcs#isVersionedDirectory(com.intellij.openapi.vfs.VirtualFile)
+   */
+  @Nullable
+  public static VirtualFile getNearestHgRoot(VirtualFile dir) {
+    VirtualFile currentDir = dir;
+    while (currentDir != null) {
+      if (isHgRoot(currentDir)) {
+        return currentDir;
+      }
+      currentDir = currentDir.getParent();
+    }
+    return null;
+  }
+
+  /**
+   * Checks if the given directory is an hg root.
+   */
+  public static boolean isHgRoot(VirtualFile dir) {
+    return dir.findChild(".hg") != null;
+  }
 }
index 7aafcbc1cb0d513b9a3a356ddef71540fb7a2e5c..26a700e2eda587f23c11158f06d1c897f6ccd726 100644 (file)
@@ -196,14 +196,7 @@ public class HgVcs extends AbstractVcs {
 
   @Override
   public boolean isVersionedDirectory(VirtualFile dir) {
-    VirtualFile currentDir = dir;
-    while (currentDir != null) {
-      if (currentDir.findChild(".hg") != null) {
-        return true;
-      }
-      currentDir = currentDir.getParent();
-    }
-    return false;
+    return HgUtil.getNearestHgRoot(dir) != null;
   }
 
   public boolean isStarted() {