Mercurial > hg
diff hgext/imerge.py @ 5111:12930b97a729
imerge: gussy up dispatcher to support subcommand opts.
Add -n, --resolved, --unresolved to status.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Sat, 04 Aug 2007 12:26:48 -0700 |
parents | 420e1166a876 |
children | d4fa6bafc43a |
line wrap: on
line diff
--- a/hgext/imerge.py Sat Aug 04 09:33:10 2007 -0700 +++ b/hgext/imerge.py Sat Aug 04 12:26:48 2007 -0700 @@ -7,7 +7,7 @@ from mercurial.i18n import _ from mercurial.node import * -from mercurial import commands, cmdutil, hg, merge, util +from mercurial import commands, cmdutil, fancyopts, hg, merge, util import os, tarfile class InvalidStateFileException(Exception): pass @@ -135,27 +135,6 @@ if p1.node() != dp[0] or p2.node() != dp[1]: raise util.Abort('imerge state does not match working directory') - def status(self): - p1, p2 = self.wctx.parents() - self.ui.write('merging %s and %s\n' % \ - (short(p1.node()), short(p2.node()))) - - if self.resolved: - self.ui.write('resolved:\n') - for fn in self.resolved: - self.ui.write(' %s\n' % fn) - remaining = [f for f in self.conflicts if f not in self.resolved] - if remaining: - self.ui.write('remaining:\n') - for fn in remaining: - (fd, fo) = self.conflicts[fn] - if fn == fo: - self.ui.write(' %s\n' % (fn,)) - else: - self.ui.write(' %s (%s)\n' % (fn, fd)) - else: - self.ui.write('all conflicts resolved\n') - def next(self): remaining = self.remaining() return remaining and remaining[0] @@ -202,7 +181,7 @@ rc = im.unpickle(source) if not rc: - im.status() + status(im) return rc def merge_(im, filename=None): @@ -236,8 +215,39 @@ def save(im, dest): return im.pickle(dest) -def status(im): - im.status() +def status(im, **opts): + if not opts.get('resolved') and not opts.get('unresolved'): + opts['resolved'] = True + opts['unresolved'] = True + + if im.ui.verbose: + p1, p2 = [short(p.node()) for p in im.wctx.parents()] + im.ui.note(_('merging %s and %s\n') % (p1, p2)) + + conflicts = im.conflicts.keys() + conflicts.sort() + remaining = dict.fromkeys(im.remaining()) + st = [] + for fn in conflicts: + if opts.get('no_status'): + mode = '' + elif fn in remaining: + mode = 'U ' + else: + mode = 'R ' + if ((opts.get('resolved') and fn not in remaining) + or (opts.get('unresolved') and fn in remaining)): + st.append((mode, fn)) + st.sort() + for (mode, fn) in st: + if im.ui.verbose: + fo, fd = im.conflicts[fn] + if fd != fn: + fn = '%s (%s)' % (fn, fd) + im.ui.write('%s%s\n' % (mode, fn)) + if opts.get('unresolved') and not remaining: + im.ui.write(_('all conflicts resolved\n')) + return 0 def unresolve(im, *files): @@ -246,13 +256,16 @@ return im.unresolve(files) subcmdtable = { - 'load': load, - 'merge': merge_, - 'next': next, - 'resolve': resolve, - 'save': save, - 'status': status, - 'unresolve': unresolve + 'load': (load, []), + 'merge': (merge_, []), + 'next': (next, []), + 'resolve': (resolve, []), + 'save': (save, []), + 'status': (status, + [('n', 'no-status', None, _('hide status prefix')), + ('', 'resolved', None, _('only show resolved conflicts')), + ('', 'unresolved', None, _('only show unresolved conflicts'))]), + 'unresolve': (unresolve, []) } def dispatch(im, args, opts): @@ -263,7 +276,7 @@ candidates.append(choice) return candidates - c, args = args[0], args[1:] + c, args = args[0], list(args[1:]) cmd = complete(c, subcmdtable.keys()) if not cmd: raise cmdutil.UnknownCommand('imerge ' + c) @@ -272,11 +285,15 @@ raise cmdutil.AmbiguousCommand('imerge ' + c, cmd) cmd = cmd[0] - func = subcmdtable[cmd] + func, optlist = subcmdtable[cmd] + opts = {} try: - return func(im, *args) + args = fancyopts.fancyopts(args, optlist, opts) + return func(im, *args, **opts) + except fancyopts.getopt.GetoptError, inst: + raise cmdutil.ParseError('imerge', '%s: %s' % (cmd, inst)) except TypeError: - raise cmdutil.ParseError('imerge', '%s: invalid arguments' % cmd) + raise cmdutil.ParseError('imerge', _('%s: invalid arguments') % cmd) def imerge(ui, repo, *args, **opts): '''interactive merge