diff hgsubversion/layouts/standard.py @ 1094:9a7e3dbd0f6e

layouts: add support for an infix between tbt and the hg root
author David Schleimer <dschleimer@fb.com>
date Wed, 11 Sep 2013 10:55:01 -0700
parents 791382a21cc4
children 4a92eb1484ba
line wrap: on
line diff
--- a/hgsubversion/layouts/standard.py
+++ b/hgsubversion/layouts/standard.py
@@ -18,29 +18,41 @@ class StandardLayout(base.BaseLayout):
         if self._branch_dir[-1] != '/':
             self._branch_dir += '/'
 
+        self._infix = ui.config('hgsubversion', 'infix', '').strip('/')
+        if self._infix:
+            self._infix = '/' + self._infix
+
+        self._trunk = 'trunk%s' % self._infix
+
     def localname(self, path):
-        if path == 'trunk':
+        if path == self._trunk:
             return None
-        elif path.startswith(self._branch_dir):
-            return path[len(self._branch_dir):]
+        elif path.startswith(self._branch_dir) and path.endswith(self._infix):
+            path = path[len(self._branch_dir):]
+            if self._infix:
+                path = path[:-len(self._infix)]
+            return path
         return  '../%s' % path
 
     def remotename(self, branch):
         if branch == 'default' or branch is None:
-            return 'trunk'
+            path = self._trunk
         elif branch.startswith('../'):
-            return branch[3:]
-        return '%s%s' % (self._branch_dir, branch)
+            path =  branch[3:]
+        else:
+            path = ''.join((self._branch_dir, branch, self._infix))
+
+        return path
 
     def remotepath(self, branch, subdir='/'):
         if subdir == '/':
             subdir = ''
-        branchpath = 'trunk'
+        branchpath = self._trunk
         if branch and branch != 'default':
             if branch.startswith('../'):
                 branchpath = branch[3:]
             else:
-                branchpath = '%s%s' % (self._branch_dir, branch)
+                branchpath = ''.join((self._branch_dir, branch, self._infix))
 
         return '%s/%s' % (subdir or '', branchpath)
 
@@ -94,16 +106,22 @@ class StandardLayout(base.BaseLayout):
             return candidate, '/'.join(components)
 
         if path == 'trunk' or path.startswith('trunk/'):
-            return 'trunk', path[len('trunk/'):]
+            return self._trunk, path[len(self._trunk) + 1:]
 
         if path.startswith(self._branch_dir):
             path = path[len(self._branch_dir):]
             components = path.split('/', 1)
-            branch_path = '%s%s' % (self._branch_dir, components[0])
+            branch_path = ''.join((self._branch_dir, components[0]))
             if len(components) == 1:
                 local_path = ''
             else:
                 local_path = components[1]
+
+            if local_path == '':
+                branch_path += self._infix
+            elif local_path.startswith(self._infix[1:] + '/'):
+                branch_path += self._infix
+                local_path = local_path[len(self._infix):]
             return branch_path, local_path
 
         components = path.split('/')