Auto-generate man pages for all StGit commands
[stgit] / stgit / commands / delete.py
CommitLineData
fcee87cf
CM
1
2__copyright__ = """
3Copyright (C) 2005, Catalin Marinas <catalin.marinas@gmail.com>
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU General Public License version 2 as
7published by the Free Software Foundation.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17"""
18
575bbdae 19from stgit.argparse import opt
5901dd6b
KH
20from stgit.commands import common
21from stgit.lib import transaction
fcee87cf 22
575bbdae
KH
23help = 'Delete patches'
24usage = ['[options] <patch1> [<patch2>] [<patch3>..<patch4>]']
25description = """
5901dd6b 26Delete the patches passed as arguments.
87bcf96e
KH
27
28Note that the 'delete' operation is irreversible."""
fcee87cf 29
575bbdae
KH
30options = [
31 opt('-b', '--branch',
32 short = 'Use BRANCH instead of the default branch')]
33
5901dd6b 34directory = common.DirectoryHasRepositoryLib()
fcee87cf
CM
35
36def func(parser, options, args):
5901dd6b 37 """Delete one or more patches."""
13b26f1a 38 stack = directory.repository.get_stack(options.branch)
5901dd6b 39 if options.branch:
5901dd6b
KH
40 iw = None # can't use index/workdir to manipulate another branch
41 else:
5901dd6b 42 iw = stack.repository.default_iw
87bcf96e 43 if args:
a5920051 44 patches = set(common.parse_patches(args, list(stack.patchorder.all)))
87bcf96e
KH
45 else:
46 parser.error('No patches specified')
781e549a
KH
47 def allow_conflicts(trans):
48 # Allow conflicts if the topmost patch stays the same.
49 if stack.patchorder.applied:
50 return (trans.applied
51 and trans.applied[-1] == stack.patchorder.applied[-1])
52 else:
53 return not trans.applied
54 trans = transaction.StackTransaction(stack, 'delete',
55 allow_conflicts = allow_conflicts)
5901dd6b
KH
56 try:
57 to_push = trans.delete_patches(lambda pn: pn in patches)
58 for pn in to_push:
59 trans.push_patch(pn, iw)
60 except transaction.TransactionHalted:
61 pass
62 return trans.run(iw)