Handle branch names with slashes
[stgit] / stgit / commands / branch.py
index 860d7d5..d348409 100644 (file)
@@ -23,7 +23,7 @@ from optparse import OptionParser, make_option
 
 from stgit.commands.common import *
 from stgit.utils import *
 
 from stgit.commands.common import *
 from stgit.utils import *
-from stgit import stack, git
+from stgit import stack, git, basedir
 
 
 help = 'manage development branches'
 
 
 help = 'manage development branches'
@@ -35,7 +35,9 @@ is always created in a new repository.  This subcommand allows you to
 manage several patch series in the same repository via GIT branches.
 
 When displaying the branches, the names can be prefixed with
 manage several patch series in the same repository via GIT branches.
 
 When displaying the branches, the names can be prefixed with
-'s' (StGIT managed) or 'p' (protected)."""
+'s' (StGIT managed) or 'p' (protected).
+
+If not given any options, switch to the named branch."""
 
 options = [make_option('-c', '--create',
                        help = 'create a new development branch',
 
 options = [make_option('-c', '--create',
                        help = 'create a new development branch',
@@ -43,6 +45,9 @@ options = [make_option('-c', '--create',
            make_option('--clone',
                        help = 'clone the contents of the current branch',
                        action = 'store_true'),
            make_option('--clone',
                        help = 'clone the contents of the current branch',
                        action = 'store_true'),
+           make_option('--convert',
+                       help = 'switch between old and new format branches',
+                       action = 'store_true'),
            make_option('--delete',
                        help = 'delete an existing development branch',
                        action = 'store_true'),
            make_option('--delete',
                        help = 'delete an existing development branch',
                        action = 'store_true'),
@@ -119,10 +124,9 @@ def func(parser, options, args):
 
         tree_id = None
         if len(args) == 2:
 
         tree_id = None
         if len(args) == 2:
-            tree_id = args[1]
-
-        git.create_branch(args[0], tree_id)
-        stack.Series(args[0]).init()
+            tree_id = git_id(args[1])
+        
+        stack.Series(args[0]).init(create_at = tree_id)
 
         print 'Branch "%s" created.' % args[0]
         return
 
         print 'Branch "%s" created.' % args[0]
         return
@@ -148,6 +152,14 @@ def func(parser, options, args):
 
         return
 
 
         return
 
+    elif options.convert:
+
+        if len(args) != 0:
+            parser.error('incorrect number of arguments')
+
+        crt_series.convert()
+        return
+
     elif options.delete:
 
         if len(args) != 1:
     elif options.delete:
 
         if len(args) != 1:
@@ -160,13 +172,19 @@ def func(parser, options, args):
         if len(args) != 0:
             parser.error('incorrect number of arguments')
 
         if len(args) != 0:
             parser.error('incorrect number of arguments')
 
-        branches = os.listdir(os.path.join(git.get_base_dir(), 'refs', 'heads'))
+        branches = []
+        basepath = os.path.join(basedir.get(), 'refs', 'heads')
+        for path, files, dirs in walk_tree(basepath):
+            branches += [os.path.join(path, f) for f in files]
         branches.sort()
         branches.sort()
-        max_len = max([len(i) for i in branches])
 
 
-        print 'Available branches:'
-        for i in branches:
-            __print_branch(i, max_len)
+        if branches:
+            print 'Available branches:'
+            max_len = max([len(i) for i in branches])
+            for i in branches:
+                __print_branch(i, max_len)
+        else:
+            print 'No branches'
         return
 
     elif options.protect:
         return
 
     elif options.protect: