X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/blobdiff_plain/27ac2b7eee3cc39e29c470cd5b5889e93091d9be..a79cd5d5eb048bdd9e78d096f7f2cbf923d85eca:/stgit/commands/push.py diff --git a/stgit/commands/push.py b/stgit/commands/push.py index 17b32f6..818e02d 100644 --- a/stgit/commands/push.py +++ b/stgit/commands/push.py @@ -17,66 +17,47 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ import sys, os -from optparse import OptionParser, make_option - +from stgit.argparse import opt from stgit.commands.common import * from stgit.utils import * -from stgit import stack, git - - -help = 'push one or more patches onto of the stack' -usage = """%prog [options] [] [] [..] +from stgit.out import * +from stgit import argparse, stack, git +help = 'Push one or more patches onto the stack' +kind = 'stack' +usage = ['[options] [] [] [..]'] +description = """ Push one or more patches (defaulting to the first unapplied one) onto the stack. The 'push' operation allows patch reordering by commuting -them with the three-way merge algorithm. If the result of the 'push' -operation is not acceptable or if there are too many conflicts, the -'--undo' option can be used to revert the last pushed patch. Conflicts -raised during the push operation have to be fixed and the 'resolved' -command run. +them with the three-way merge algorithm. If there are conflicts while +pushing a patch, those conflicts are written to the work tree, and the +command halts. Conflicts raised during the push operation have to be +fixed and the 'resolved' command run (alternatively, you may undo the +conflicting push with 'stg undo'). 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', - action = 'store_true'), - make_option('-n', '--number', type = 'int', - help = 'push the specified number of 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 patch pushing', - action = 'store_true')] +args = [argparse.patch_range(argparse.unapplied_patches)] +options = [ + opt('-a', '--all', action = 'store_true', + short = 'Push all the unapplied patches'), + opt('-n', '--number', type = 'int', + short = 'Push the specified number of patches'), + opt('--reverse', action = 'store_true', + short = 'Push the patches in reverse order'), + opt('-m', '--merged', action = 'store_true', + short = 'Check for patches merged upstream')] +directory = DirectoryGotoToplevel(log = True) def func(parser, options, args): """Pushes the given patch or all onto the series """ - # If --undo is passed, do the work and exit - if options.undo: - patch = crt_series.get_current() - if not patch: - raise CmdException, 'No patch to undo' - - out.start('Undoing push of "%s"' % patch) - resolved_all() - if crt_series.undo_push(): - out.done() - else: - out.done('patch unchanged') - print_crt_patch() - - return - check_local_changes() check_conflicts() - check_head_top_equal() + check_head_top_equal(crt_series) unapplied = crt_series.get_unapplied() if not unapplied: @@ -97,6 +78,6 @@ def func(parser, options, args): if options.reverse: patches.reverse() - push_patches(patches, options.merged) + push_patches(crt_series, patches, options.merged) - print_crt_patch() + print_crt_patch(crt_series)