Mercurial > public > mercurial-scm > hg
comparison mercurial/dispatch.py @ 27623:b3376fba4ab9
dispatch: report similar names consistently
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Mon, 04 Jan 2016 21:52:44 -0800 |
parents | 4030d3b79953 |
children | 707d66afce21 |
comparison
equal
deleted
inserted
replaced
27622:0bc71f45d362 | 27623:b3376fba4ab9 |
---|---|
57 sim = lambda x: difflib.SequenceMatcher(None, value, x).ratio() | 57 sim = lambda x: difflib.SequenceMatcher(None, value, x).ratio() |
58 # The cutoff for similarity here is pretty arbitrary. It should | 58 # The cutoff for similarity here is pretty arbitrary. It should |
59 # probably be investigated and tweaked. | 59 # probably be investigated and tweaked. |
60 return [s for s in symbols if sim(s) > 0.6] | 60 return [s for s in symbols if sim(s) > 0.6] |
61 | 61 |
62 def _reportsimilar(write, similar): | |
63 if len(similar) == 1: | |
64 write(_("(did you mean %s?)\n") % similar[0]) | |
65 elif similar: | |
66 ss = ", ".join(sorted(similar)) | |
67 write(_("(did you mean one of %s?)\n") % ss) | |
68 | |
62 def _formatparse(write, inst): | 69 def _formatparse(write, inst): |
63 similar = [] | 70 similar = [] |
64 if isinstance(inst, error.UnknownIdentifier): | 71 if isinstance(inst, error.UnknownIdentifier): |
65 # make sure to check fileset first, as revset can invoke fileset | 72 # make sure to check fileset first, as revset can invoke fileset |
66 similar = _getsimilar(inst.symbols, inst.function) | 73 similar = _getsimilar(inst.symbols, inst.function) |
69 (inst.args[1], inst.args[0])) | 76 (inst.args[1], inst.args[0])) |
70 if (inst.args[0][0] == ' '): | 77 if (inst.args[0][0] == ' '): |
71 write(_("unexpected leading whitespace\n")) | 78 write(_("unexpected leading whitespace\n")) |
72 else: | 79 else: |
73 write(_("hg: parse error: %s\n") % inst.args[0]) | 80 write(_("hg: parse error: %s\n") % inst.args[0]) |
74 if similar: | 81 _reportsimilar(write, similar) |
75 if len(similar) == 1: | |
76 write(_("(did you mean %r?)\n") % similar[0]) | |
77 else: | |
78 ss = ", ".join(sorted(similar)) | |
79 write(_("(did you mean one of %s?)\n") % ss) | |
80 | 82 |
81 def dispatch(req): | 83 def dispatch(req): |
82 "run the command specified in req.args" | 84 "run the command specified in req.args" |
83 if req.ferr: | 85 if req.ferr: |
84 ferr = req.ferr | 86 ferr = req.ferr |
260 except (error.UnknownCommand, error.Abort): | 262 except (error.UnknownCommand, error.Abort): |
261 suggested = False | 263 suggested = False |
262 if len(inst.args) == 2: | 264 if len(inst.args) == 2: |
263 sim = _getsimilar(inst.args[1], inst.args[0]) | 265 sim = _getsimilar(inst.args[1], inst.args[0]) |
264 if sim: | 266 if sim: |
265 ui.warn(_('(did you mean one of %s?)\n') % | 267 _reportsimilar(ui.warn, sim) |
266 ', '.join(sorted(sim))) | |
267 suggested = True | 268 suggested = True |
268 if not suggested: | 269 if not suggested: |
269 commands.help_(ui, 'shortlist') | 270 commands.help_(ui, 'shortlist') |
270 except error.InterventionRequired as inst: | 271 except error.InterventionRequired as inst: |
271 ui.warn("%s\n" % inst) | 272 ui.warn("%s\n" % inst) |