This defines an interface which is called from PatchSet, and can (must) be implemented in classes inheriting PatchSet. --- stgit/stack.py | 150 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 75 insertions(+), 75 deletions(-) diff --git a/stgit/stack.py b/stgit/stack.py index 35840e2..89b5a55 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -276,78 +276,6 @@ class Patch(StgitObject): # The current StGIT metadata format version. FORMAT_VERSION = 2 -def format_version_key(branch): - return 'branch.%s.stgitformatversion' % branch - -def update_to_current_format_version(branch, git_dir): - """Update a potentially older StGIT directory structure to the - latest version. Note: This function should depend as little as - possible on external functions that may change during a format - version bump, since it must remain able to process older formats.""" - - branch_dir = os.path.join(git_dir, 'patches', branch) - def get_format_version(): - """Return the integer format version number, or None if the - branch doesn't have any StGIT metadata at all, of any version.""" - fv = config.get(format_version_key(branch)) - if fv: - # Great, there's an explicitly recorded format version - # number, which means that the branch is initialized and - # of that exact version. - return int(fv) - elif os.path.isdir(os.path.join(branch_dir, 'patches')): - # There's a .git/patches/<branch>/patches dirctory, which - # means this is an initialized version 1 branch. - return 1 - elif os.path.isdir(branch_dir): - # There's a .git/patches/<branch> directory, which means - # this is an initialized version 0 branch. - return 0 - else: - # The branch doesn't seem to be initialized at all. - return None - def set_format_version(v): - out.info('Upgraded branch %s to format version %d' % (branch, v)) - config.set(format_version_key(branch), '%d' % v) - def mkdir(d): - if not os.path.isdir(d): - os.makedirs(d) - def rm(f): - if os.path.exists(f): - os.remove(f) - - # Update 0 -> 1. - if get_format_version() == 0: - mkdir(os.path.join(branch_dir, 'trash')) - patch_dir = os.path.join(branch_dir, 'patches') - mkdir(patch_dir) - refs_dir = os.path.join(git_dir, 'refs', 'patches', branch) - mkdir(refs_dir) - for patch in (file(os.path.join(branch_dir, 'unapplied')).readlines() - + file(os.path.join(branch_dir, 'applied')).readlines()): - patch = patch.strip() - os.rename(os.path.join(branch_dir, patch), - os.path.join(patch_dir, patch)) - Patch(patch, patch_dir, refs_dir).update_top_ref() - set_format_version(1) - - # Update 1 -> 2. - if get_format_version() == 1: - desc_file = os.path.join(branch_dir, 'description') - if os.path.isfile(desc_file): - desc = read_string(desc_file) - if desc: - config.set('branch.%s.description' % branch, desc) - rm(desc_file) - rm(os.path.join(branch_dir, 'current')) - rm(os.path.join(git_dir, 'refs', 'bases', branch)) - set_format_version(2) - - # Make sure we're at the latest version. - if not get_format_version() in [None, FORMAT_VERSION]: - raise StackException('Branch %s is at format version %d, expected %d' - % (branch, get_format_version(), FORMAT_VERSION)) - class PatchSet(StgitObject): def get_name(self): return self.__name @@ -400,7 +328,7 @@ class PatchSet(StgitObject): def is_initialised(self): """Checks if series is already initialised """ - return bool(config.get(format_version_key(self.get_name()))) + return bool(config.get(self.format_version_key())) class Series(PatchSet): @@ -422,7 +350,7 @@ class Series(PatchSet): # Update the branch to the latest format version if it is # initialized, but don't touch it if it isn't. - update_to_current_format_version(self.get_name(), self.__base_dir) + self.update_to_current_format_version() self.__refs_dir = os.path.join(self.__base_dir, 'refs', 'patches', self.get_name()) @@ -437,6 +365,78 @@ class Series(PatchSet): # trash directory self.__trash_dir = os.path.join(self._dir(), 'trash') + def format_version_key(self): + return 'branch.%s.stgitformatversion' % self.get_name() + + def update_to_current_format_version(self): + """Update a potentially older StGIT directory structure to the + latest version. Note: This function should depend as little as + possible on external functions that may change during a format + version bump, since it must remain able to process older formats.""" + + branch_dir = os.path.join(self.__base_dir, 'patches', self.get_name()) + def get_format_version(): + """Return the integer format version number, or None if the + branch doesn't have any StGIT metadata at all, of any version.""" + fv = config.get(self.format_version_key()) + if fv: + # Great, there's an explicitly recorded format version + # number, which means that the branch is initialized and + # of that exact version. + return int(fv) + elif os.path.isdir(os.path.join(branch_dir, 'patches')): + # There's a .git/patches/<branch>/patches dirctory, which + # means this is an initialized version 1 branch. + return 1 + elif os.path.isdir(branch_dir): + # There's a .git/patches/<branch> directory, which means + # this is an initialized version 0 branch. + return 0 + else: + # The branch doesn't seem to be initialized at all. + return None + def set_format_version(v): + out.info('Upgraded branch %s to format version %d' % (self.get_name(), v)) + config.set(self.format_version_key(), '%d' % v) + def mkdir(d): + if not os.path.isdir(d): + os.makedirs(d) + def rm(f): + if os.path.exists(f): + os.remove(f) + + # Update 0 -> 1. + if get_format_version() == 0: + mkdir(os.path.join(branch_dir, 'trash')) + patch_dir = os.path.join(branch_dir, 'patches') + mkdir(patch_dir) + refs_dir = os.path.join(self.__base_dir, 'refs', 'patches', self.get_name()) + mkdir(refs_dir) + for patch in (file(os.path.join(branch_dir, 'unapplied')).readlines() + + file(os.path.join(branch_dir, 'applied')).readlines()): + patch = patch.strip() + os.rename(os.path.join(branch_dir, patch), + os.path.join(patch_dir, patch)) + Patch(patch, patch_dir, refs_dir).update_top_ref() + set_format_version(1) + + # Update 1 -> 2. + if get_format_version() == 1: + desc_file = os.path.join(branch_dir, 'description') + if os.path.isfile(desc_file): + desc = read_string(desc_file) + if desc: + config.set('branch.%s.description' % self.get_name(), desc) + rm(desc_file) + rm(os.path.join(branch_dir, 'current')) + rm(os.path.join(self.__base_dir, 'refs', 'bases', self.get_name())) + set_format_version(2) + + # Make sure we're at the latest version. + if not get_format_version() in [None, FORMAT_VERSION]: + raise StackException('Branch %s is at format version %d, expected %d' + % (self.get_name(), get_format_version(), FORMAT_VERSION)) + def __patch_name_valid(self, name): """Raise an exception if the patch name is not valid. """ @@ -584,7 +584,7 @@ class Series(PatchSet): os.makedirs(self.__refs_dir) self._set_field('orig-base', git.get_head()) - config.set(format_version_key(self.get_name()), str(FORMAT_VERSION)) + config.set(self.format_version_key(), str(FORMAT_VERSION)) def rename(self, to_name): """Renames a series - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html