X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/26aab5b04fa4ba13f48948de73e497cf0a315ad1..e4fc1f59f679b4f0b5c6805feaf9da0df2cd370f:/stgit/commands/delete.py diff --git a/stgit/commands/delete.py b/stgit/commands/delete.py index 01bea62..515f4b7 100644 --- a/stgit/commands/delete.py +++ b/stgit/commands/delete.py @@ -24,28 +24,57 @@ from stgit.utils import * from stgit import stack, git -help = 'remove the topmost or any unapplied patch' -usage = """%prog [options] +help = 'delete patches' +usage = """%prog [options] [] [..] -Delete the patch passed as argument. The patch to be deleted can only -be part of the unapplied list or be the topmost one, in the latter -case the command also popping it from the stack. Note that the -'delete' operation is irreversible.""" +Delete the patches passed as arguments. If an applied patch is to be +deleted, all other patches applied on top of it must be deleted too, +and they must be explicitly specified, since this command will not try +to delete a patch unless you explicitly ask it to. If any applied +patches are deleted, they are popped from the stack. -options = [] +Note that the 'delete' operation is irreversible.""" +options = [make_option('-b', '--branch', + help = 'use BRANCH instead of the default one')] def func(parser, options, args): - """Deletes a patch + """Deletes one or more patches. """ - if len(args) != 1: - parser.error('incorrect number of arguments') + applied_patches = crt_series.get_applied() + unapplied_patches = crt_series.get_unapplied() + all_patches = applied_patches + unapplied_patches - if args[0] == crt_series.get_current(): + if args: + patches = parse_patches(args, all_patches) + else: + parser.error('No patches specified') + + applied = [] + + # find the applied patches to be deleted. We can only delete + # consecutive patches in the applied range + for patch in applied_patches[::-1]: + if patch in patches: + applied.append(patch) + patches.remove(patch) + else: + break + + # any applied patches to be deleted but not in consecutive order? + for patch in patches: + if patch in applied_patches: + raise CmdException, 'Cannot delete the applied patch "%s"' % patch + + if applied and not options.branch: check_local_changes() check_conflicts() check_head_top_equal() - crt_series.delete_patch(args[0]) - print 'Patch "%s" successfully deleted' % args[0] - print_crt_patch() + # delete the patches + for patch in applied + patches: + crt_series.delete_patch(patch) + print 'Patch "%s" successfully deleted' % patch + + if not options.branch: + print_crt_patch()