X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/bae29dddde41058567a5ef9b44c160dd76b1c025..cc3db2b1cfb886fddf76ef758b8fb7b06753347c:/stgit/stack.py diff --git a/stgit/stack.py b/stgit/stack.py index dc7c19f..8b7c296 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -420,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 """ @@ -635,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])