help = 'push a patch on top of the series'
-usage = """%prog [options] [<name>]
+usage = """%prog [options] [<patch1> [<patch2>...]]
Push a patch (defaulting to the first unapplied one) or range of
patches to the stack. The 'push' operation allows patch reordering by
tree to the state before the operation. Conflicts raised during the
push operation have to be fixed and the 'resolved' command run.
-The 'push' command also notifies when the patch becomes empty after
-the merge operation (i.e. it was fully merged upstream)."""
+The command also notifies when the patch becomes empty (fully merged
+upstream) or is modified (three-way merged) by the 'push' operation."""
options = [make_option('-a', '--all',
help = 'push all the unapplied patches',
make_option('--reverse',
help = 'push the patches in reverse order',
action = 'store_true'),
+ make_option('-m', '--merged',
+ help = 'check for patches merged upstream',
+ action = 'store_true'),
make_option('--undo',
help = 'undo the last push operation',
action = 'store_true')]
"""See if patch exists, or is already applied.
"""
if p in applied:
- raise CmdException, 'Patch "%s" is already applied.' % p
+ raise CmdException, 'Patch "%s" is already applied' % p
if p not in unapplied:
- raise CmdException, 'Patch "%s" does not exist.' % p
+ raise CmdException, 'Patch "%s" does not exist' % p
def func(parser, options, args):
"""Pushes the given patch or all onto the series
patches = unapplied
elif len(args) == 0:
patches = [unapplied[0]]
- elif len(args) == 1:
- patches = args
- is_patch_appliable(patches[0])
else:
- parser.error('incorrect number of arguments')
+ patches = args
+ map(is_patch_appliable, patches)
if patches == []:
raise CmdException, 'No patches to push'
if options.reverse:
patches.reverse()
- forwarded = crt_series.forward_patches(patches)
- if forwarded > 1:
- print 'Fast-forwarded patches "%s" - "%s"' % (patches[0],
- patches[forwarded - 1])
- elif forwarded == 1:
- print 'Fast-forwarded patch "%s"' % patches[0]
+ push_patches(patches, options.merged)
- for p in patches[forwarded:]:
- is_patch_appliable(p)
-
- print 'Pushing patch "%s"...' % p,
- sys.stdout.flush()
-
- crt_series.push_patch(p)
-
- if crt_series.empty_patch(p):
- print 'done (empty patch)'
- else:
- print 'done'
print_crt_patch()