From a22a62b6760b0e1531d783e414c65ada3d1525d6 Mon Sep 17 00:00:00 2001 From: Yann Dirson Date: Sun, 16 Apr 2006 12:52:35 +0200 Subject: [PATCH] Make branch creation atomic This patch adds an optional create_at parameter to Series.init(), to pass a git.branch_create() parameter if we want it to be called. This parameter can be None, so the test for False has to be explicit. Signed-off-by: Yann Dirson --- stgit/commands/branch.py | 6 +----- stgit/stack.py | 8 +++++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/stgit/commands/branch.py b/stgit/commands/branch.py index be501a8..c7561a8 100644 --- a/stgit/commands/branch.py +++ b/stgit/commands/branch.py @@ -125,12 +125,8 @@ def func(parser, options, args): tree_id = None if len(args) == 2: tree_id = git_id(args[1]) - - if git.branch_exists(args[0]): - raise CmdException, 'Branch "%s" already exists' % args[0] - stack.Series(args[0]).init() - git.create_branch(args[0], tree_id) + stack.Series(args[0]).init(create_at = tree_id) print 'Branch "%s" created.' % args[0] return diff --git a/stgit/stack.py b/stgit/stack.py index c14e029..19bb62a 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -426,7 +426,7 @@ class Series: """ return os.path.isdir(self.__patch_dir) - def init(self): + def init(self, create_at=False): """Initialises the stgit series """ bases_dir = os.path.join(self.__base_dir, 'refs', 'bases') @@ -438,6 +438,9 @@ class Series: if os.path.exists(self.__base_file): raise StackException, self.__base_file + ' already exists' + if (create_at!=False): + git.create_branch(self.__name, create_at) + os.makedirs(self.__patch_dir) if not os.path.isdir(bases_dir): @@ -509,8 +512,7 @@ class Series: """Clones a series """ base = read_string(self.get_base_file()) - git.create_branch(target_series, tree_id = base) - Series(target_series).init() + Series(target_series).init(create_at = base) new_series = Series(target_series) # generate an artificial description file -- 2.11.0