comparison hgext/transplant.py @ 15220:f7db54b832af

transplant: add --edit option
author Matt Mackall <mpm@selenic.com>
date Mon, 10 Oct 2011 23:07:09 -0500
parents 3ce9b1a7538b
children f2ba409dbb0f
comparison
equal deleted inserted replaced
15219:9d58569a8b92 15220:f7db54b832af
79 self.ui = ui 79 self.ui = ui
80 self.path = repo.join('transplant') 80 self.path = repo.join('transplant')
81 self.opener = scmutil.opener(self.path) 81 self.opener = scmutil.opener(self.path)
82 self.transplants = transplants(self.path, 'transplants', 82 self.transplants = transplants(self.path, 'transplants',
83 opener=self.opener) 83 opener=self.opener)
84 self.editor = None
84 85
85 def applied(self, repo, node, parent): 86 def applied(self, repo, node, parent):
86 '''returns True if a node is already an ancestor of parent 87 '''returns True if a node is already an ancestor of parent
87 or has already been transplanted''' 88 or has already been transplanted'''
88 if hasnode(repo, node): 89 if hasnode(repo, node):
255 repo.dirstate.setparents(p1, node) 256 repo.dirstate.setparents(p1, node)
256 m = match.always(repo.root, '') 257 m = match.always(repo.root, '')
257 else: 258 else:
258 m = match.exact(repo.root, '', files) 259 m = match.exact(repo.root, '', files)
259 260
260 n = repo.commit(message, user, date, extra=extra, match=m) 261 n = repo.commit(message, user, date, extra=extra, match=m,
262 editor=self.editor)
261 if not n: 263 if not n:
262 # Crash here to prevent an unclear crash later, in 264 # Crash here to prevent an unclear crash later, in
263 # transplants.write(). This can happen if patch.patch() 265 # transplants.write(). This can happen if patch.patch()
264 # does nothing but claims success or if repo.status() fails 266 # does nothing but claims success or if repo.status() fails
265 # to report changes done by patch.patch(). These both 267 # to report changes done by patch.patch(). These both
306 raise util.Abort( 308 raise util.Abort(
307 _('working dir not at transplant parent %s') % 309 _('working dir not at transplant parent %s') %
308 revlog.hex(parents[0])) 310 revlog.hex(parents[0]))
309 if merge: 311 if merge:
310 repo.dirstate.setparents(p1, parents[1]) 312 repo.dirstate.setparents(p1, parents[1])
311 n = repo.commit(message, user, date, extra=extra) 313 n = repo.commit(message, user, date, extra=extra,
314 editor=self.editor)
312 if not n: 315 if not n:
313 raise util.Abort(_('commit failed')) 316 raise util.Abort(_('commit failed'))
314 if not merge: 317 if not merge:
315 self.transplants.set(n, node) 318 self.transplants.set(n, node)
316 self.unlog() 319 self.unlog()
463 ('b', 'branch', [], 466 ('b', 'branch', [],
464 _('pull patches from branch BRANCH'), _('BRANCH')), 467 _('pull patches from branch BRANCH'), _('BRANCH')),
465 ('a', 'all', None, _('pull all changesets up to BRANCH')), 468 ('a', 'all', None, _('pull all changesets up to BRANCH')),
466 ('p', 'prune', [], _('skip over REV'), _('REV')), 469 ('p', 'prune', [], _('skip over REV'), _('REV')),
467 ('m', 'merge', [], _('merge at REV'), _('REV')), 470 ('m', 'merge', [], _('merge at REV'), _('REV')),
471 ('e', 'edit', False, _('invoke editor on commit messages')),
468 ('', 'log', None, _('append transplant info to log message')), 472 ('', 'log', None, _('append transplant info to log message')),
469 ('c', 'continue', None, _('continue last transplant session ' 473 ('c', 'continue', None, _('continue last transplant session '
470 'after repair')), 474 'after repair')),
471 ('', 'filter', '', 475 ('', 'filter', '',
472 _('filter changesets through command'), _('CMD'))], 476 _('filter changesets through command'), _('CMD'))],
551 opts['log'] = ui.config('transplant', 'log') 555 opts['log'] = ui.config('transplant', 'log')
552 if not opts.get('filter'): 556 if not opts.get('filter'):
553 opts['filter'] = ui.config('transplant', 'filter') 557 opts['filter'] = ui.config('transplant', 'filter')
554 558
555 tp = transplanter(ui, repo) 559 tp = transplanter(ui, repo)
560 if opts.get('edit'):
561 tp.editor = cmdutil.commitforceeditor
556 562
557 p1, p2 = repo.dirstate.parents() 563 p1, p2 = repo.dirstate.parents()
558 if len(repo) > 0 and p1 == revlog.nullid: 564 if len(repo) > 0 and p1 == revlog.nullid:
559 raise util.Abort(_('no revision checked out')) 565 raise util.Abort(_('no revision checked out'))
560 if not opts.get('continue'): 566 if not opts.get('continue'):