X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/blobdiff_plain/9060d4205a9093a8f3c8ff958eff4c64107077cc..6972fd6b0cc82580fb94b3388e4d4879f69b09a8:/stgit/commands/pick.py diff --git a/stgit/commands/pick.py b/stgit/commands/pick.py index ea0756b..1fcc2e2 100644 --- a/stgit/commands/pick.py +++ b/stgit/commands/pick.py @@ -20,6 +20,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.stack import Series @@ -33,6 +34,7 @@ the name of the current patch. It can be overridden with the '--name' option. A commit object can be reverted with the '--reverse' option. The log and author information are those of the commit object.""" +directory = DirectoryHasRepository() options = [make_option('-n', '--name', help = 'use NAME as the patch name'), make_option('-r', '--reverse', @@ -40,6 +42,9 @@ options = [make_option('-n', '--name', action = 'store_true'), make_option('-p', '--parent', metavar = 'COMMITID', help = 'use COMMITID as parent'), + make_option('-x', '--expose', + help = 'append the imported commit id to the patch log', + action = 'store_true'), make_option('--fold', help = 'fold the commit object into the current patch', action = 'store_true'), @@ -60,10 +65,10 @@ def func(parser, options, args): if not options.unapplied: check_local_changes() check_conflicts() - check_head_top_equal() + check_head_top_equal(crt_series) commit_str = args[0] - commit_id = git_id(commit_str) + commit_id = git_id(crt_series, commit_str) commit = git.Commit(commit_id) if options.fold or options.update: @@ -79,7 +84,7 @@ def func(parser, options, args): patchname = None if options.parent: - parent = git_id(options.parent) + parent = git_id(crt_series, options.parent) else: parent = commit.get_parent() @@ -91,39 +96,41 @@ def func(parser, options, args): top = parent if options.fold: - print 'Folding commit %s...' % commit_id, - sys.stdout.flush() + out.start('Folding commit %s' % commit_id) # try a direct git-apply first if not git.apply_diff(bottom, top): git.merge(bottom, git.get_head(), top, recursive = True) - print 'done' + out.done() elif options.update: - rev1 = git_id('//bottom') - rev2 = git_id('//top') + rev1 = git_id(crt_series, '//bottom') + rev2 = git_id(crt_series, '//top') files = git.barefiles(rev1, rev2).split('\n') - print 'Updating with commit %s...' % commit_id, - sys.stdout.flush() + out.start('Updating with commit %s' % commit_id) if not git.apply_diff(bottom, top, files = files): raise CmdException, 'Patch updating failed' - print 'done' + out.done() else: message = commit.get_log() + if options.expose: + message += '(imported from commit %s)\n' % commit.get_id_hash() author_name, author_email, author_date = \ name_email_date(commit.get_author()) - print 'Importing commit %s...' % commit_id, - sys.stdout.flush() + out.start('Importing commit %s' % commit_id) newpatch = crt_series.new_patch(patchname, message = message, can_edit = False, unapplied = True, bottom = bottom, top = top, author_name = author_name, author_email = author_email, author_date = author_date) + # in case the patch name was automatically generated + patchname = newpatch.get_name() + # find a patchlog to fork from (refpatchname, refbranchname, refpatchid) = parse_rev(commit_str) if refpatchname and not refpatchid and \ @@ -137,23 +144,23 @@ def func(parser, options, args): refseries = crt_series patch = refseries.get_patch(refpatchname) if patch.get_log(): - print"log was %s" % newpatch.get_log() - print "setting log to %s\n" % patch.get_log() + out.info("Log was %s" % newpatch.get_log()) + out.info("Setting log to %s\n" % patch.get_log()) newpatch.set_log(patch.get_log()) - print"log is now %s" % newpatch.get_log() + out.info("Log is now %s" % newpatch.get_log()) else: - print "no log for %s\n" % patchname - + out.info("No log for %s\n" % patchname) + if not options.unapplied: modified = crt_series.push_patch(patchname) else: modified = False if crt_series.empty_patch(patchname): - print 'done (empty patch)' + out.done('empty patch') elif modified: - print 'done (modified)' + out.done('modified') else: - print 'done' - - print_crt_patch() + out.done() + + print_crt_patch(crt_series)