from stgit.commands.common import *
from stgit.utils import *
+from stgit.out import *
from stgit import stack, git
help = 'turn regular GIT commits into StGIT patches'
Only commits with exactly one parent can be uncommitted; in other
words, you can't uncommit a merge."""
+directory = DirectoryHasRepository()
options = [make_option('-n', '--number', type = 'int',
help = 'uncommit the specified number of commits'),
make_option('-t', '--to',
- help = 'uncommit to the specified commit')]
+ help = 'uncommit to the specified commit'),
+ make_option('-x', '--exclusive',
+ help = 'exclude the commit specified by the --to option',
+ action = 'store_true')]
def func(parser, options, args):
"""Uncommit a number of patches.
if len(args) != 0:
parser.error('cannot specify patch name with --to')
patch_nr = patchnames = None
- to_commit = git.rev_parse(options.to)
+ to_commit = git_id(options.to)
elif options.number:
if options.number <= 0:
parser.error('invalid value passed to --number')
commits = []
next_commit = crt_series.get_base()
if patch_nr:
- print 'Uncommitting %d patches...' % patch_nr,
+ out.start('Uncommitting %d patches' % patch_nr)
for i in xrange(patch_nr):
commit, commit_id, parent = get_commit(next_commit)
commits.append((commit, commit_id, parent))
next_commit = parent
else:
- print 'Uncommitting to %s...' % to_commit
+ if options.exclusive:
+ out.start('Uncommitting to %s (exclusive)' % to_commit)
+ else:
+ out.start('Uncommitting to %s' % to_commit)
while True:
commit, commit_id, parent = get_commit(next_commit)
- commits.append((commit, commit_id, parent))
if commit_id == to_commit:
+ if not options.exclusive:
+ commits.append((commit, commit_id, parent))
break
+ commits.append((commit, commit_id, parent))
next_commit = parent
patch_nr = len(commits)
- sys.stdout.flush()
for (commit, commit_id, parent), patchname in \
zip(commits, patchnames or [None for i in xrange(len(commits))]):
author_name, author_email, author_date = \
name_email_date(commit.get_author())
crt_series.new_patch(patchname,
can_edit = False, before_existing = True,
+ commit = False,
top = commit_id, bottom = parent,
message = commit.get_log(),
author_name = author_name,
author_email = author_email,
author_date = author_date)
-
- print 'done'
+ out.done()