From: Yann Dirson Date: Mon, 4 Jun 2007 21:14:43 +0000 (+0200) Subject: Fix deletion and move of a hidden patch (gna bug #9244). X-Git-Tag: v0.14.3~227 X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/commitdiff_plain/dfb3bddeb856a6f6751f8deaf5a0403ebada21a3 Fix deletion and move of a hidden patch (gna bug #9244). We must unhide a patch before we delete it, or we get an exception while trying to unhide a non-existent patch. Similarly, when renaming a hidden patch, we must take care of hiding an unhiding at the right moment. Both problems introduced in commit 841c7b2a6b015e3ab3331713cf10caf7a4fd0b49 when first indroducing patch hiding. Signed-off-by: Yann Dirson --- diff --git a/stgit/stack.py b/stgit/stack.py index 7a06458..ed54671 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -894,6 +894,9 @@ class Series(StgitObject): # save the commit id to a trash file write_string(os.path.join(self.__trash_dir, name), patch.get_top()) + if self.patch_hidden(name): + self.unhide_patch(name) + patch.delete() unapplied = self.get_unapplied() @@ -902,9 +905,6 @@ class Series(StgitObject): f.writelines([line + '\n' for line in unapplied]) f.close() - if self.patch_hidden(name): - self.unhide_patch(name) - def forward_patches(self, names): """Try to fast-forward an array of patches. @@ -1168,7 +1168,9 @@ class Series(StgitObject): if self.patch_hidden(oldname): self.unhide_patch(oldname) - self.hide_patch(newname) + was_hidden=True + else: + was_hidden=False if oldname in unapplied: Patch(oldname, self.__patch_dir, self.__refs_dir).rename(newname) @@ -1188,6 +1190,9 @@ class Series(StgitObject): else: raise StackException, 'Unknown patch "%s"' % oldname + if was_hidden: + self.hide_patch(newname) + def log_patch(self, patch, message): """Generate a log commit for a patch """ diff --git a/t/t1600-delete-one.sh b/t/t1600-delete-one.sh index df03d79..d59d4ba 100755 --- a/t/t1600-delete-one.sh +++ b/t/t1600-delete-one.sh @@ -82,6 +82,15 @@ test_expect_success \ ' test_expect_success \ + 'Hide the topmost patch and try to delete it' \ + ' + [ $(stg applied | wc -l) -eq 2 ] && + stg hide bar && + stg delete bar && + [ $(stg applied | wc -l) -eq 1 ] + ' + +test_expect_success \ 'Create another branch, and put one patch in each branch' \ ' stg branch --create br && @@ -99,10 +108,10 @@ test_expect_success \ test_expect_success \ 'Delete a patch in another branch' \ ' - [ $(stg applied | wc -l) -eq 3 ] && + [ $(stg applied | wc -l) -eq 2 ] && [ $(stg applied -b br | wc -l) -eq 1 ] && stg delete -b br baz && - [ $(stg applied | wc -l) -eq 3 ] && + [ $(stg applied | wc -l) -eq 2 ] && [ $(stg applied -b br | wc -l) -eq 0 ] '