X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/5a636ab334ec9414052aaf228010f3e43760b733..cc3db2b1cfb886fddf76ef758b8fb7b06753347c:/stgit/stack.py diff --git a/stgit/stack.py b/stgit/stack.py index 18b4c6e..8b7c296 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -66,7 +66,7 @@ def __clean_comments(f): def edit_file(series, line, comment, show_patch = True): fname = '.stgit.msg' - tmpl = os.path.join(git.base_dir, 'patchdescr.tmpl') + tmpl = os.path.join(git.get_base_dir(), 'patchdescr.tmpl') f = file(fname, 'w+') if line: @@ -263,9 +263,10 @@ class Series: self.__name = git.get_head_file() if self.__name: - self.__patch_dir = os.path.join(git.base_dir, 'patches', + base_dir = git.get_base_dir() + self.__patch_dir = os.path.join(base_dir, 'patches', self.__name) - self.__base_file = os.path.join(git.base_dir, 'refs', 'bases', + self.__base_file = os.path.join(base_dir, 'refs', 'bases', self.__name) self.__applied_file = os.path.join(self.__patch_dir, 'applied') self.__unapplied_file = os.path.join(self.__patch_dir, 'unapplied') @@ -386,7 +387,7 @@ class Series: def init(self): """Initialises the stgit series """ - bases_dir = os.path.join(git.base_dir, 'refs', 'bases') + bases_dir = os.path.join(git.get_base_dir(), 'refs', 'bases') if self.is_initialised(): raise StackException, self.__patch_dir + ' already exists' @@ -419,6 +420,33 @@ class Series: self.__init__(to_name) + def clone(self, target_series): + """Clones a series + """ + base = read_string(self.get_base_file()) + git.create_branch(target_series, tree_id = base) + Series(target_series).init() + new_series = Series(target_series) + + # generate an artificial description file + write_string(new_series.__descr_file, 'clone of "%s"' % self.__name) + + # clone self's entire series as unapplied patches + patches = self.get_applied() + self.get_unapplied() + patches.reverse() + for p in patches: + patch = self.get_patch(p) + new_series.new_patch(p, message = patch.get_description(), + can_edit = False, unapplied = True, + bottom = patch.get_bottom(), + top = patch.get_top(), + author_name = patch.get_authname(), + author_email = patch.get_authemail(), + author_date = patch.get_authdate()) + + # fast forward the cloned series to self's top + new_series.forward_patches(self.get_applied()) + def delete(self, force = False): """Deletes an stgit series """ @@ -634,6 +662,9 @@ class Series: forwarded+=1 unapplied.remove(name) + if forwarded == 0: + return 0 + git.switch(top) append_strings(self.__applied_file, names[0:forwarded])