By specifying a bottom for the new patch commit, it is no longer necessary to update the bottom of the patch before calling refresh_patch. This ensures that the patch top always correspond to a commit object, and the bottom to its parent. Signed-off-by: David Kågedal <davidk@xxxxxxxxxxxxxx> --- stgit/stack.py | 24 ++++++++---------------- 1 files changed, 8 insertions(+), 16 deletions(-) diff --git a/stgit/stack.py b/stgit/stack.py index 03ce218..fd19a82 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -748,7 +748,7 @@ class Series(PatchSet): author_date = None, committer_name = None, committer_email = None, backup = False, sign_str = None, log = 'refresh', - notes = None): + notes = None, bottom = None): """Generates a new commit for the topmost patch """ patch = self.get_current_patch() @@ -780,7 +780,8 @@ class Series(PatchSet): descr = add_sign_line(descr, sign_str, committer_name, committer_email) - bottom = patch.get_bottom() + if not bottom: + bottom = patch.get_bottom() commit_id = git.commit(files = files, message = descr, parents = [bottom], @@ -1026,20 +1027,15 @@ class Series(PatchSet): unapplied = self.get_unapplied() assert(name in unapplied) - patch = self.get_patch(name) + # patch = self.get_patch(name) head = git.get_head() - # The top is updated by refresh_patch since we need an empty - # commit - patch.set_bottom(head, backup = True) - patch.set_top(head, backup = True) - append_string(self.__applied_file, name) unapplied.remove(name) write_strings(self.__unapplied_file, unapplied) - self.refresh_patch(cache_update = False, log = 'push(m)') + self.refresh_patch(bottom = head, cache_update = False, log = 'push(m)') def push_patch(self, name): """Pushes a patch on the stack @@ -1071,11 +1067,6 @@ class Series(PatchSet): ex = None modified = False - # new patch needs to be refreshed. - # The current patch is empty after merge. - patch.set_bottom(head, backup = True) - patch.set_top(head, backup = True) - # Try the fast applying first. If this fails, fall back to the # three-way merge if not git.apply_diff(bottom, top): @@ -1103,13 +1094,14 @@ class Series(PatchSet): log = 'push(m)' else: log = 'push' - self.refresh_patch(cache_update = False, log = log) + self.refresh_patch(bottom = head, cache_update = False, log = log) else: # we store the correctly merged files only for # tracking the conflict history. Note that the # git.merge() operations should always leave the index # in a valid state (i.e. only stage 0 files) - self.refresh_patch(cache_update = False, log = 'push(c)') + self.refresh_patch(bottom = head, cache_update = False, + log = 'push(c)') raise StackException, str(ex) return modified - 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