X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/dc4e5946dfd10fd8f6251257c52161615f7c1841..6dd8fafabb5b8e266a85f13c8851ca8a66a1a405:/stgit/commands/refresh.py diff --git a/stgit/commands/refresh.py b/stgit/commands/refresh.py index 4cf09ae..b283892 100644 --- a/stgit/commands/refresh.py +++ b/stgit/commands/refresh.py @@ -21,6 +21,7 @@ from optparse import OptionParser, make_option from stgit.commands.common import * from stgit.utils import * +from stgit.out import * from stgit import stack, git from stgit.config import config @@ -36,45 +37,22 @@ options. The '--force' option is useful when a commit object was created with a different tool but the changes need to be included in the current patch.""" +directory = DirectoryHasRepository() options = [make_option('-f', '--force', help = 'force the refresh even if HEAD and '\ 'top differ', action = 'store_true'), - make_option('-e', '--edit', - help = 'invoke an editor for the patch '\ - 'description', - action = 'store_true'), - make_option('-s', '--showpatch', - help = 'show the patch content in the editor buffer', + make_option('--update', + help = 'only update the current patch files', action = 'store_true'), make_option('--undo', help = 'revert the commit generated by the last refresh', action = 'store_true'), - make_option('-m', '--message', - help = 'use MESSAGE as the patch ' \ - 'description'), - make_option('-a', '--author', metavar = '"NAME "', - help = 'use "NAME " as the author details'), - make_option('--authname', - help = 'use AUTHNAME as the author name'), - make_option('--authemail', - help = 'use AUTHEMAIL as the author e-mail'), - make_option('--authdate', - help = 'use AUTHDATE as the author date'), - make_option('--commname', - help = 'use COMMNAME as the committer name'), - make_option('--commemail', - help = 'use COMMEMAIL as the committer ' \ - 'e-mail'), + make_option('-a', '--annotate', metavar = 'NOTE', + help = 'annotate the patch log entry'), make_option('-p', '--patch', - help = 'refresh (applied) PATCH instead of the top one'), - make_option('--sign', - help = 'add Signed-off-by line', - action = 'store_true'), - make_option('--ack', - help = 'add Acked-by line', - action = 'store_true')] - + help = 'refresh (applied) PATCH instead of the top one') + ] def func(parser, options, args): autoresolved = config.get('stgit.autoresolved') @@ -83,7 +61,7 @@ def func(parser, options, args): check_conflicts() if options.patch: - if args: + if args or options.update: raise CmdException, \ 'Only full refresh is available with the --patch option' patch = options.patch @@ -98,59 +76,48 @@ def func(parser, options, args): check_head_top_equal() if options.undo: - print 'Undoing the "%s" refresh...' % patch, - sys.stdout.flush() + out.start('Undoing the refresh of "%s"' % patch) crt_series.undo_refresh() - print 'done' + out.done() return - if options.author: - options.authname, options.authemail = name_email(options.author) - - if options.sign: - sign_str = 'Signed-off-by' - if options.ack: - raise CmdException, '--ack and --sign were both specified' - elif options.ack: - sign_str = 'Acked-by' - else: - sign_str = None - - if git.local_changes() \ - or not crt_series.head_top_equal() \ - or options.edit or options.message \ - or options.authname or options.authemail or options.authdate \ - or options.commname or options.commemail \ - or options.sign or options.ack: + files = [path for (stat,path) in git.tree_status(verbose = True)] + if args: + files = [f for f in files if f in args] + if files or not crt_series.head_top_equal(): if options.patch: applied = crt_series.get_applied() between = applied[:applied.index(patch):-1] pop_patches(between, keep = True) + elif options.update: + rev1 = git_id('//bottom') + rev2 = git_id('//top') + patch_files = git.barefiles(rev1, rev2).split('\n') + files = [f for f in files if f in patch_files] + if not files: + out.info('No modified files for updating patch "%s"' % patch) + return - print 'Refreshing patch "%s"...' % patch, - sys.stdout.flush() + out.start('Refreshing patch "%s"' % patch) if autoresolved == 'yes': resolved_all() - crt_series.refresh_patch(files = args, - message = options.message, - edit = options.edit, - show_patch = options.showpatch, - author_name = options.authname, - author_email = options.authemail, - author_date = options.authdate, - committer_name = options.commname, - committer_email = options.commemail, - backup = True, sign_str = sign_str) + crt_series.refresh_patch(files = files, + backup = True, notes = options.annotate) if crt_series.empty_patch(patch): - print 'done (empty patch)' + out.done('empty patch') else: - print 'done' + out.done() if options.patch: between.reverse() push_patches(between) + elif options.annotate: + # only annotate the top log entry as there is no need to + # refresh the patch and generate a full commit + crt_series.log_patch(crt_series.get_patch(patch), None, + notes = options.annotate) else: - print 'Patch "%s" is already up to date' % patch + out.info('Patch "%s" is already up to date' % patch)