Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/help.py @ 44341:142d2a4cb69a
help: add a mechanism to change flags' help depending on config
It seems reasonable to have a similar mechanism for the rest of the
help, but no such thing is implemented.
The goal is to make the help of commands clearer in the presence of
significant default changes, like tweakdefaults or with company-wide
hgrcs. In these cases, a user looking at the help of a command doesn't
exactly know what his hgrc is doing.
Apply to this to the --git option of commands that display diffs, as
this option in particular causes confusion for some reason.
Differential Revision: https://phab.mercurial-scm.org/D8100
author | Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> |
---|---|
date | Sun, 09 Feb 2020 15:50:36 -0500 |
parents | 52f0140c2604 |
children | a0ec05d93c8e |
comparison
equal
deleted
inserted
replaced
44340:234001d22ba6 | 44341:142d2a4cb69a |
---|---|
150 ) | 150 ) |
151 ) | 151 ) |
152 doc = b''.join(rst) | 152 doc = b''.join(rst) |
153 return doc | 153 return doc |
154 | 154 |
155 | 155 def parsedefaultmarker(text): |
156 def optrst(header, options, verbose): | 156 """given a text 'abc (DEFAULT: def.ghi)', |
157 returns (b'abc', (b'def', b'ghi')). Otherwise return None""" | |
158 if text[-1:] == b')': | |
159 marker = b' (DEFAULT: ' | |
160 pos = text.find(marker) | |
161 if pos >= 0: | |
162 item = text[pos + len(marker):-1] | |
163 return text[:pos], item.split(b'.', 2) | |
164 | |
165 def optrst(header, options, verbose, ui): | |
157 data = [] | 166 data = [] |
158 multioccur = False | 167 multioccur = False |
159 for option in options: | 168 for option in options: |
160 if len(option) == 5: | 169 if len(option) == 5: |
161 shortopt, longopt, default, desc, optlabel = option | 170 shortopt, longopt, default, desc, optlabel = option |
163 shortopt, longopt, default, desc = option | 172 shortopt, longopt, default, desc = option |
164 optlabel = _(b"VALUE") # default label | 173 optlabel = _(b"VALUE") # default label |
165 | 174 |
166 if not verbose and any(w in desc for w in _exclkeywords): | 175 if not verbose and any(w in desc for w in _exclkeywords): |
167 continue | 176 continue |
168 | 177 defaultstrsuffix = b'' |
178 if default is None: | |
179 parseresult = parsedefaultmarker(desc) | |
180 if parseresult is not None: | |
181 (desc, (section, name)) = parseresult | |
182 if ui.configbool(section, name): | |
183 default = True | |
184 defaultstrsuffix = _(b' from config') | |
169 so = b'' | 185 so = b'' |
170 if shortopt: | 186 if shortopt: |
171 so = b'-' + shortopt | 187 so = b'-' + shortopt |
172 lo = b'--' + longopt | 188 lo = b'--' + longopt |
173 if default is True: | 189 if default is True: |
181 # match that behavior on Python 3, we do str(default) and | 197 # match that behavior on Python 3, we do str(default) and |
182 # then convert it to bytes. | 198 # then convert it to bytes. |
183 defaultstr = pycompat.bytestr(default) | 199 defaultstr = pycompat.bytestr(default) |
184 if default is True: | 200 if default is True: |
185 defaultstr = _(b"on") | 201 defaultstr = _(b"on") |
186 desc += _(b" (default: %s)") % defaultstr | 202 desc += _(b" (default: %s)") % (defaultstr + defaultstrsuffix) |
187 | 203 |
188 if isinstance(default, list): | 204 if isinstance(default, list): |
189 lo += b" %s [+]" % optlabel | 205 lo += b" %s [+]" % optlabel |
190 multioccur = True | 206 multioccur = True |
191 elif (default is not None) and not isinstance(default, bool): | 207 elif (default is not None) and not isinstance(default, bool): |
712 except KeyError: | 728 except KeyError: |
713 pass | 729 pass |
714 | 730 |
715 # options | 731 # options |
716 if not ui.quiet and entry[1]: | 732 if not ui.quiet and entry[1]: |
717 rst.append(optrst(_(b"options"), entry[1], ui.verbose)) | 733 rst.append(optrst(_(b"options"), entry[1], ui.verbose, ui)) |
718 | 734 |
719 if ui.verbose: | 735 if ui.verbose: |
720 rst.append( | 736 rst.append( |
721 optrst(_(b"global options"), commands.globalopts, ui.verbose) | 737 optrst(_(b"global options"), commands.globalopts, ui.verbose, ui) |
722 ) | 738 ) |
723 | 739 |
724 if not ui.verbose: | 740 if not ui.verbose: |
725 if not full: | 741 if not full: |
726 rst.append(_(b"\n(use 'hg %s -h' to show more help)\n") % name) | 742 rst.append(_(b"\n(use 'hg %s -h' to show more help)\n") % name) |
856 if ui.quiet: | 872 if ui.quiet: |
857 pass | 873 pass |
858 elif ui.verbose: | 874 elif ui.verbose: |
859 rst.append( | 875 rst.append( |
860 b'\n%s\n' | 876 b'\n%s\n' |
861 % optrst(_(b"global options"), commands.globalopts, ui.verbose) | 877 % optrst(_(b"global options"), commands.globalopts, ui.verbose, ui) |
862 ) | 878 ) |
863 if name == b'shortlist': | 879 if name == b'shortlist': |
864 rst.append( | 880 rst.append( |
865 _(b"\n(use 'hg help' for the full list of commands)\n") | 881 _(b"\n(use 'hg help' for the full list of commands)\n") |
866 ) | 882 ) |