From: Catalin Marinas Date: Thu, 9 Apr 2009 20:40:59 +0000 (+0300) Subject: Convert "pop" to the lib infrastructure X-Git-Tag: v0.15-rc1~26 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/commitdiff_plain/1056440bd7cede989a1dd414845b035995ef7a68 Convert "pop" to the lib infrastructure The test files have to be adapted because of a slightly different way of recording a "push" operation with the new infrastructure. The original code was recording two transactions for a "push " - one for reordering the unapplied patches and another for pushing the patch. One would need two "undo" operations to restore the state prior to a "push". The new infrastructure only records one transaction for "push" and only one "undo" is necessary. Since a "pop " operation involves popping the patches and pushing one, with the above changes in the "push" implementation it means that the patch order the test scripts expect is slightly different. Signed-off-by: Catalin Marinas Acked-by: Karl Hasselström --- diff --git a/stgit/commands/pop.py b/stgit/commands/pop.py index 2c78ac2..eace090 100644 --- a/stgit/commands/pop.py +++ b/stgit/commands/pop.py @@ -16,11 +16,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -import sys, os +from stgit.commands import common +from stgit.lib import transaction +from stgit import argparse from stgit.argparse import opt -from stgit.commands.common import * -from stgit.utils import * -from stgit import argparse, stack, git help = 'Pop one or more patches from the stack' kind = 'stack' @@ -40,50 +39,40 @@ options = [ opt('-a', '--all', action = 'store_true', short = 'Pop all the applied patches'), opt('-n', '--number', type = 'int', - short = 'Pop the specified number of patches'), - opt('-k', '--keep', action = 'store_true', - short = 'Keep the local changes')] + short = 'Pop the specified number of patches') + ] + argparse.keep_option() -directory = DirectoryGotoToplevel(log = True) +directory = common.DirectoryHasRepositoryLib() def func(parser, options, args): - """Pop the topmost patch from the stack - """ - check_conflicts() - check_head_top_equal(crt_series) + """Pop the given patches or the topmost one from the stack.""" + stack = directory.repository.current_stack + iw = stack.repository.default_iw + clean_iw = (not options.keep and iw) or None + trans = transaction.StackTransaction(stack, 'pop', + check_clean_iw = clean_iw) - if not options.keep: - check_local_changes() - - applied = crt_series.get_applied() - if not applied: - raise CmdException, 'No patches applied' + if not trans.applied: + raise common.CmdException('No patches applied') if options.all: - patches = applied + patches = trans.applied elif options.number: # reverse it twice to also work with negative or bigger than # the length numbers - patches = applied[::-1][:options.number][::-1] - elif len(args) == 0: - patches = [applied[-1]] + patches = trans.applied[::-1][:options.number][::-1] + elif not args: + patches = [trans.applied[-1]] else: - patches = parse_patches(args, applied, ordered = True) + patches = common.parse_patches(args, trans.applied, ordered = True) if not patches: - raise CmdException, 'No patches to pop' - - # pop to the most distant popped patch - topop = applied[applied.index(patches[0]):] - # push those not in the popped range - topush = [p for p in topop if p not in patches] - - if options.keep and topush: - raise CmdException, 'Cannot pop arbitrary patches with --keep' - - topop.reverse() - pop_patches(crt_series, topop, options.keep) - if topush: - push_patches(crt_series, topush) - - print_crt_patch(crt_series) + raise common.CmdException('No patches to pop') + + applied = [p for p in trans.applied if not p in set(patches)] + unapplied = patches + trans.unapplied + try: + trans.reorder_patches(applied, unapplied, iw = iw) + except transaction.TransactionException: + pass + return trans.run(iw) diff --git a/t/t3101-reset-hard.sh b/t/t3101-reset-hard.sh index 2807ba3..bd97b3a 100755 --- a/t/t3101-reset-hard.sh +++ b/t/t3101-reset-hard.sh @@ -28,7 +28,7 @@ cat > expected.txt < actual.txt && test_cmp expected.txt actual.txt && test "$(echo $(stg series))" = "+ p1 > p3 - p2" @@ -47,7 +47,7 @@ test_expect_success 'Try to reset with --hard' ' stg reset --hard master.stgit^~1 && stg status a > actual.txt && test_cmp expected.txt actual.txt && - test "$(echo $(stg series))" = "> p1 - p3 - p2" + test "$(echo $(stg series))" = "> p1 - p2 - p3" ' test_done diff --git a/t/t3103-undo-hard.sh b/t/t3103-undo-hard.sh index 599aa43..ce71668 100755 --- a/t/t3103-undo-hard.sh +++ b/t/t3103-undo-hard.sh @@ -28,7 +28,7 @@ cat > expected.txt < actual.txt && test_cmp expected.txt actual.txt && test "$(echo $(stg series))" = "+ p1 > p3 - p2" @@ -47,7 +47,7 @@ test_expect_success 'Try to undo with --hard' ' stg undo --hard && stg status a > actual.txt && test_cmp expected.txt actual.txt && - test "$(echo $(stg series))" = "> p1 - p3 - p2" + test "$(echo $(stg series))" = "> p1 - p2 - p3" ' test_done