Merge documentation improvements.
[jelmer/subvertpy.git] / scheme.py
index 259e1339a4b1a70cd6d08b39497e244d96f1eb2b..0709f03a1d7827a96d600dad14611aead938b0c1 100644 (file)
--- a/scheme.py
+++ b/scheme.py
@@ -68,8 +68,25 @@ class BranchingScheme:
         return None
 
     def is_branch_parent(self, path):
+        """Check whether the specified path is the parent directory of branches.
+        The path may not be a branch itself.
+        
+        :param path: path to check
+        :returns: boolean
+        """
+        raise NotImplementedError
+
+    def is_tag_parent(self, path):
+        """Check whether the specified path is the parent directory of tags.
+        The path may not be a tag itself.
+        
+        :param path: path to check
+        :returns: boolean
+        """
+        raise NotImplementedError
+
+    def is_tag(self, path):
         raise NotImplementedError
-                
 
 class TrunkBranchingScheme(BranchingScheme):
     """Standard Subversion repository layout. Each project contains three 
@@ -84,8 +101,16 @@ class TrunkBranchingScheme(BranchingScheme):
         if len(parts) == self.level+1 and parts[self.level] == "trunk":
             return True
 
+        if len(parts) == self.level+2 and parts[self.level] == "branches":
+            return True
+
+        return False
+
+    def is_tag(self, path):
+        """See BranchingScheme.is_branch()."""
+        parts = path.strip("/").split("/")
         if len(parts) == self.level+2 and \
-           (parts[self.level] == "branches" or parts[self.level] == "tags"):
+           (parts[self.level] == "tags"):
             return True
 
         return False
@@ -115,6 +140,10 @@ class TrunkBranchingScheme(BranchingScheme):
             return True
         return self.is_branch(path+"/trunk")
 
+    def is_tag_parent(self, path):
+        parts = path.strip("/").split("/")
+        return self.is_tag(path+"/aname")
+
 class NoBranchingScheme(BranchingScheme):
     """Describes a scheme where there is just one branch, the 
     root of the repository."""
@@ -122,6 +151,9 @@ class NoBranchingScheme(BranchingScheme):
         """See BranchingScheme.is_branch()."""
         return path.strip("/") == ""
 
+    def is_tag(self, path):
+        return False
+
     def unprefix(self, path):
         """See BranchingScheme.unprefix()."""
         return ("", path.strip("/"))
@@ -132,6 +164,9 @@ class NoBranchingScheme(BranchingScheme):
     def is_branch_parent(self, path):
         return False
 
+    def is_tag_parent(self, path):
+        return False
+
 
 class ListBranchingScheme(BranchingScheme):
     def __init__(self, branch_list):
@@ -143,6 +178,10 @@ class ListBranchingScheme(BranchingScheme):
         for p in branch_list:
             self.branch_list.append(p.strip("/"))
 
+    def is_tag(self, path):
+        """See BranchingScheme.is_tag()."""
+        return False
+
     def is_branch(self, path):
         """See BranchingScheme.is_branch()."""
         return path.strip("/") in self.branch_list