Mercurial > hg
diff mercurial/help.py @ 43077:687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Done with
python3.7 contrib/byteify-strings.py -i $(hg files 'set:mercurial/**.py - mercurial/thirdparty/** + hgext/**.py - hgext/fsmonitor/pywatchman/** - mercurial/__init__.py')
black -l 80 -t py33 -S $(hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**" - hgext/fsmonitor/pywatchman/**')
# skip-blame mass-reformatting only
Differential Revision: https://phab.mercurial-scm.org/D6972
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 06 Oct 2019 09:48:39 -0400 |
parents | 2372284d9457 |
children | c59eb1560c44 |
line wrap: on
line diff
--- a/mercurial/help.py Sun Oct 06 09:45:02 2019 -0400 +++ b/mercurial/help.py Sun Oct 06 09:48:39 2019 -0400 @@ -38,15 +38,15 @@ from .utils import compression _exclkeywords = { - "(ADVANCED)", - "(DEPRECATED)", - "(EXPERIMENTAL)", + b"(ADVANCED)", + b"(DEPRECATED)", + b"(EXPERIMENTAL)", # i18n: "(ADVANCED)" is a keyword, must be translated consistently - _("(ADVANCED)"), + _(b"(ADVANCED)"), # i18n: "(DEPRECATED)" is a keyword, must be translated consistently - _("(DEPRECATED)"), + _(b"(DEPRECATED)"), # i18n: "(EXPERIMENTAL)" is a keyword, must be translated consistently - _("(EXPERIMENTAL)"), + _(b"(EXPERIMENTAL)"), } # The order in which command categories will be displayed. @@ -72,28 +72,28 @@ # Human-readable category names. These are translated. # Extensions with custom categories should add their names here. CATEGORY_NAMES = { - registrar.command.CATEGORY_REPO_CREATION: 'Repository creation', - registrar.command.CATEGORY_REMOTE_REPO_MANAGEMENT: 'Remote repository management', - registrar.command.CATEGORY_COMMITTING: 'Change creation', - registrar.command.CATEGORY_CHANGE_NAVIGATION: 'Change navigation', - registrar.command.CATEGORY_CHANGE_MANAGEMENT: 'Change manipulation', - registrar.command.CATEGORY_CHANGE_ORGANIZATION: 'Change organization', - registrar.command.CATEGORY_WORKING_DIRECTORY: 'Working directory management', - registrar.command.CATEGORY_FILE_CONTENTS: 'File content management', - registrar.command.CATEGORY_IMPORT_EXPORT: 'Change import/export', - registrar.command.CATEGORY_MAINTENANCE: 'Repository maintenance', - registrar.command.CATEGORY_HELP: 'Help', - registrar.command.CATEGORY_MISC: 'Miscellaneous commands', - registrar.command.CATEGORY_NONE: 'Uncategorized commands', + registrar.command.CATEGORY_REPO_CREATION: b'Repository creation', + registrar.command.CATEGORY_REMOTE_REPO_MANAGEMENT: b'Remote repository management', + registrar.command.CATEGORY_COMMITTING: b'Change creation', + registrar.command.CATEGORY_CHANGE_NAVIGATION: b'Change navigation', + registrar.command.CATEGORY_CHANGE_MANAGEMENT: b'Change manipulation', + registrar.command.CATEGORY_CHANGE_ORGANIZATION: b'Change organization', + registrar.command.CATEGORY_WORKING_DIRECTORY: b'Working directory management', + registrar.command.CATEGORY_FILE_CONTENTS: b'File content management', + registrar.command.CATEGORY_IMPORT_EXPORT: b'Change import/export', + registrar.command.CATEGORY_MAINTENANCE: b'Repository maintenance', + registrar.command.CATEGORY_HELP: b'Help', + registrar.command.CATEGORY_MISC: b'Miscellaneous commands', + registrar.command.CATEGORY_NONE: b'Uncategorized commands', } # Topic categories. -TOPIC_CATEGORY_IDS = 'ids' -TOPIC_CATEGORY_OUTPUT = 'output' -TOPIC_CATEGORY_CONFIG = 'config' -TOPIC_CATEGORY_CONCEPTS = 'concepts' -TOPIC_CATEGORY_MISC = 'misc' -TOPIC_CATEGORY_NONE = 'none' +TOPIC_CATEGORY_IDS = b'ids' +TOPIC_CATEGORY_OUTPUT = b'output' +TOPIC_CATEGORY_CONFIG = b'config' +TOPIC_CATEGORY_CONCEPTS = b'concepts' +TOPIC_CATEGORY_MISC = b'misc' +TOPIC_CATEGORY_NONE = b'none' # The order in which topic categories will be displayed. # Extensions with custom categories should insert them into this list @@ -110,12 +110,12 @@ # Human-readable topic category names. These are translated. TOPIC_CATEGORY_NAMES = { - TOPIC_CATEGORY_IDS: 'Mercurial identifiers', - TOPIC_CATEGORY_OUTPUT: 'Mercurial output', - TOPIC_CATEGORY_CONFIG: 'Mercurial configuration', - TOPIC_CATEGORY_CONCEPTS: 'Concepts', - TOPIC_CATEGORY_MISC: 'Miscellaneous', - TOPIC_CATEGORY_NONE: 'Uncategorized topics', + TOPIC_CATEGORY_IDS: b'Mercurial identifiers', + TOPIC_CATEGORY_OUTPUT: b'Mercurial output', + TOPIC_CATEGORY_CONFIG: b'Mercurial configuration', + TOPIC_CATEGORY_CONCEPTS: b'Concepts', + TOPIC_CATEGORY_MISC: b'Miscellaneous', + TOPIC_CATEGORY_NONE: b'Uncategorized topics', } @@ -126,27 +126,27 @@ for name, desc in sorted(exts.iteritems()): if not showdeprecated and any(w in desc for w in _exclkeywords): continue - rst.append('%s:%s: %s\n' % (' ' * indent, name, desc)) + rst.append(b'%s:%s: %s\n' % (b' ' * indent, name, desc)) if rst: - rst.insert(0, '\n%s\n\n' % header) + rst.insert(0, b'\n%s\n\n' % header) return rst def extshelp(ui): - rst = loaddoc('extensions')(ui).splitlines(True) + rst = loaddoc(b'extensions')(ui).splitlines(True) rst.extend( listexts( - _('enabled extensions:'), extensions.enabled(), showdeprecated=True + _(b'enabled extensions:'), extensions.enabled(), showdeprecated=True ) ) rst.extend( listexts( - _('disabled extensions:'), + _(b'disabled extensions:'), extensions.disabled(), showdeprecated=ui.verbose, ) ) - doc = ''.join(rst) + doc = b''.join(rst) return doc @@ -158,17 +158,17 @@ shortopt, longopt, default, desc, optlabel = option else: shortopt, longopt, default, desc = option - optlabel = _("VALUE") # default label + optlabel = _(b"VALUE") # default label if not verbose and any(w in desc for w in _exclkeywords): continue - so = '' + so = b'' if shortopt: - so = '-' + shortopt - lo = '--' + longopt + so = b'-' + shortopt + lo = b'--' + longopt if default is True: - lo = '--[no-]' + longopt + lo = b'--[no-]' + longopt if isinstance(default, fancyopts.customopt): default = default.getdefaultvalue() @@ -179,34 +179,34 @@ # then convert it to bytes. defaultstr = pycompat.bytestr(default) if default is True: - defaultstr = _("on") - desc += _(" (default: %s)") % defaultstr + defaultstr = _(b"on") + desc += _(b" (default: %s)") % defaultstr if isinstance(default, list): - lo += " %s [+]" % optlabel + lo += b" %s [+]" % optlabel multioccur = True elif (default is not None) and not isinstance(default, bool): - lo += " %s" % optlabel + lo += b" %s" % optlabel data.append((so, lo, desc)) if multioccur: - header += _(" ([+] can be repeated)") + header += _(b" ([+] can be repeated)") - rst = ['\n%s:\n\n' % header] + rst = [b'\n%s:\n\n' % header] rst.extend(minirst.maketable(data, 1)) - return ''.join(rst) + return b''.join(rst) def indicateomitted(rst, omitted, notomitted=None): - rst.append('\n\n.. container:: omitted\n\n %s\n\n' % omitted) + rst.append(b'\n\n.. container:: omitted\n\n %s\n\n' % omitted) if notomitted: - rst.append('\n\n.. container:: notomitted\n\n %s\n\n' % notomitted) + rst.append(b'\n\n.. container:: notomitted\n\n %s\n\n' % notomitted) def filtercmd(ui, cmd, func, kw, doc): - if not ui.debugflag and cmd.startswith("debug") and kw != "debug": + if not ui.debugflag and cmd.startswith(b"debug") and kw != b"debug": # Debug command, and user is not looking for those. return True if not ui.verbose: @@ -219,17 +219,17 @@ if doc and any(w in doc for w in _exclkeywords): # Documentation has excluded keywords. return True - if kw == "shortlist" and not getattr(func, 'helpbasic', False): + if kw == b"shortlist" and not getattr(func, 'helpbasic', False): # We're presenting the short list but the command is not basic. return True - if ui.configbool('help', 'hidden-command.%s' % cmd): + if ui.configbool(b'help', b'hidden-command.%s' % cmd): # Configuration explicitly hides the command. return True return False def filtertopic(ui, topic): - return ui.configbool('help', 'hidden-topic.%s' % topic, False) + return ui.configbool(b'help', b'hidden-topic.%s' % topic, False) def topicmatch(ui, commands, kw): @@ -244,10 +244,10 @@ return kw in encoding.lower(container) # translated in helptable results = { - 'topics': [], - 'commands': [], - 'extensions': [], - 'extensioncommands': [], + b'topics': [], + b'commands': [], + b'extensions': [], + b'extensioncommands': [], } for topic in helptable: names, header, doc = topic[0:3] @@ -259,15 +259,15 @@ ): name = names[0] if not filtertopic(ui, name): - results['topics'].append((names[0], header)) + results[b'topics'].append((names[0], header)) for cmd, entry in commands.table.iteritems(): if len(entry) == 3: summary = entry[2] else: - summary = '' + summary = b'' # translate docs *before* searching there func = entry[0] - docs = _(pycompat.getdoc(func)) or '' + docs = _(pycompat.getdoc(func)) or b'' if kw in cmd or lowercontains(summary) or lowercontains(docs): doclines = docs.splitlines() if doclines: @@ -275,18 +275,18 @@ cmdname = cmdutil.parsealiases(cmd)[0] if filtercmd(ui, cmdname, func, kw, docs): continue - results['commands'].append((cmdname, summary)) + results[b'commands'].append((cmdname, summary)) for name, docs in itertools.chain( extensions.enabled(False).iteritems(), extensions.disabled().iteritems() ): if not docs: continue - name = name.rpartition('.')[-1] + name = name.rpartition(b'.')[-1] if lowercontains(name) or lowercontains(docs): # extension docs are already translated - results['extensions'].append((name, docs.splitlines()[0])) + results[b'extensions'].append((name, docs.splitlines()[0])) try: - mod = extensions.load(ui, name, '') + mod = extensions.load(ui, name, b'') except ImportError: # debug message would be printed in extensions.load() continue @@ -298,10 +298,10 @@ if cmddoc: cmddoc = gettext(cmddoc).splitlines()[0] else: - cmddoc = _('(no help text available)') + cmddoc = _(b'(no help text available)') if filtercmd(ui, cmdname, func, kw, cmddoc): continue - results['extensioncommands'].append((cmdname, cmddoc)) + results[b'extensioncommands'].append((cmdname, cmddoc)) return results @@ -309,10 +309,10 @@ """Return a delayed loader for help/topic.txt.""" def loader(ui): - docdir = os.path.join(util.datapath, 'help') + docdir = os.path.join(util.datapath, b'help') if subdir: docdir = os.path.join(docdir, subdir) - path = os.path.join(docdir, topic + ".txt") + path = os.path.join(docdir, topic + b".txt") doc = gettext(util.readfile(path)) for rewriter in helphooks.get(topic, []): doc = rewriter(ui, topic, doc) @@ -323,54 +323,54 @@ internalstable = sorted( [ - (['bundle2'], _('Bundle2'), loaddoc('bundle2', subdir='internals')), - (['bundles'], _('Bundles'), loaddoc('bundles', subdir='internals')), - (['cbor'], _('CBOR'), loaddoc('cbor', subdir='internals')), - (['censor'], _('Censor'), loaddoc('censor', subdir='internals')), + ([b'bundle2'], _(b'Bundle2'), loaddoc(b'bundle2', subdir=b'internals')), + ([b'bundles'], _(b'Bundles'), loaddoc(b'bundles', subdir=b'internals')), + ([b'cbor'], _(b'CBOR'), loaddoc(b'cbor', subdir=b'internals')), + ([b'censor'], _(b'Censor'), loaddoc(b'censor', subdir=b'internals')), ( - ['changegroups'], - _('Changegroups'), - loaddoc('changegroups', subdir='internals'), + [b'changegroups'], + _(b'Changegroups'), + loaddoc(b'changegroups', subdir=b'internals'), ), ( - ['config'], - _('Config Registrar'), - loaddoc('config', subdir='internals'), + [b'config'], + _(b'Config Registrar'), + loaddoc(b'config', subdir=b'internals'), ), ( - ['extensions', 'extension'], - _('Extension API'), - loaddoc('extensions', subdir='internals'), + [b'extensions', b'extension'], + _(b'Extension API'), + loaddoc(b'extensions', subdir=b'internals'), ), ( - ['mergestate'], - _('Mergestate'), - loaddoc('mergestate', subdir='internals'), + [b'mergestate'], + _(b'Mergestate'), + loaddoc(b'mergestate', subdir=b'internals'), ), ( - ['requirements'], - _('Repository Requirements'), - loaddoc('requirements', subdir='internals'), + [b'requirements'], + _(b'Repository Requirements'), + loaddoc(b'requirements', subdir=b'internals'), ), ( - ['revlogs'], - _('Revision Logs'), - loaddoc('revlogs', subdir='internals'), + [b'revlogs'], + _(b'Revision Logs'), + loaddoc(b'revlogs', subdir=b'internals'), ), ( - ['wireprotocol'], - _('Wire Protocol'), - loaddoc('wireprotocol', subdir='internals'), + [b'wireprotocol'], + _(b'Wire Protocol'), + loaddoc(b'wireprotocol', subdir=b'internals'), ), ( - ['wireprotocolrpc'], - _('Wire Protocol RPC'), - loaddoc('wireprotocolrpc', subdir='internals'), + [b'wireprotocolrpc'], + _(b'Wire Protocol RPC'), + loaddoc(b'wireprotocolrpc', subdir=b'internals'), ), ( - ['wireprotocolv2'], - _('Wire Protocol Version 2'), - loaddoc('wireprotocolv2', subdir='internals'), + [b'wireprotocolv2'], + _(b'Wire Protocol Version 2'), + loaddoc(b'wireprotocolv2', subdir=b'internals'), ), ] ) @@ -379,138 +379,155 @@ def internalshelp(ui): """Generate the index for the "internals" topic.""" lines = [ - 'To access a subtopic, use "hg help internals.{subtopic-name}"\n', - '\n', + b'To access a subtopic, use "hg help internals.{subtopic-name}"\n', + b'\n', ] for names, header, doc in internalstable: - lines.append(' :%s: %s\n' % (names[0], header)) + lines.append(b' :%s: %s\n' % (names[0], header)) - return ''.join(lines) + return b''.join(lines) helptable = sorted( [ ( - ['bundlespec'], - _("Bundle File Formats"), - loaddoc('bundlespec'), + [b'bundlespec'], + _(b"Bundle File Formats"), + loaddoc(b'bundlespec'), TOPIC_CATEGORY_CONCEPTS, ), ( - ['color'], - _("Colorizing Outputs"), - loaddoc('color'), + [b'color'], + _(b"Colorizing Outputs"), + loaddoc(b'color'), TOPIC_CATEGORY_OUTPUT, ), ( - ["config", "hgrc"], - _("Configuration Files"), - loaddoc('config'), + [b"config", b"hgrc"], + _(b"Configuration Files"), + loaddoc(b'config'), TOPIC_CATEGORY_CONFIG, ), ( - ['deprecated'], - _("Deprecated Features"), - loaddoc('deprecated'), + [b'deprecated'], + _(b"Deprecated Features"), + loaddoc(b'deprecated'), TOPIC_CATEGORY_MISC, ), - (["dates"], _("Date Formats"), loaddoc('dates'), TOPIC_CATEGORY_OUTPUT), ( - ["flags"], - _("Command-line flags"), - loaddoc('flags'), + [b"dates"], + _(b"Date Formats"), + loaddoc(b'dates'), + TOPIC_CATEGORY_OUTPUT, + ), + ( + [b"flags"], + _(b"Command-line flags"), + loaddoc(b'flags'), TOPIC_CATEGORY_CONFIG, ), ( - ["patterns"], - _("File Name Patterns"), - loaddoc('patterns'), + [b"patterns"], + _(b"File Name Patterns"), + loaddoc(b'patterns'), TOPIC_CATEGORY_IDS, ), ( - ['environment', 'env'], - _('Environment Variables'), - loaddoc('environment'), + [b'environment', b'env'], + _(b'Environment Variables'), + loaddoc(b'environment'), TOPIC_CATEGORY_CONFIG, ), ( - ['revisions', 'revs', 'revsets', 'revset', 'multirevs', 'mrevs'], - _('Specifying Revisions'), - loaddoc('revisions'), + [ + b'revisions', + b'revs', + b'revsets', + b'revset', + b'multirevs', + b'mrevs', + ], + _(b'Specifying Revisions'), + loaddoc(b'revisions'), TOPIC_CATEGORY_IDS, ), ( - ['filesets', 'fileset'], - _("Specifying File Sets"), - loaddoc('filesets'), + [b'filesets', b'fileset'], + _(b"Specifying File Sets"), + loaddoc(b'filesets'), TOPIC_CATEGORY_IDS, ), - (['diffs'], _('Diff Formats'), loaddoc('diffs'), TOPIC_CATEGORY_OUTPUT), ( - ['merge-tools', 'mergetools', 'mergetool'], - _('Merge Tools'), - loaddoc('merge-tools'), + [b'diffs'], + _(b'Diff Formats'), + loaddoc(b'diffs'), + TOPIC_CATEGORY_OUTPUT, + ), + ( + [b'merge-tools', b'mergetools', b'mergetool'], + _(b'Merge Tools'), + loaddoc(b'merge-tools'), TOPIC_CATEGORY_CONFIG, ), ( - ['templating', 'templates', 'template', 'style'], - _('Template Usage'), - loaddoc('templates'), + [b'templating', b'templates', b'template', b'style'], + _(b'Template Usage'), + loaddoc(b'templates'), TOPIC_CATEGORY_OUTPUT, ), - (['urls'], _('URL Paths'), loaddoc('urls'), TOPIC_CATEGORY_IDS), + ([b'urls'], _(b'URL Paths'), loaddoc(b'urls'), TOPIC_CATEGORY_IDS), ( - ["extensions"], - _("Using Additional Features"), + [b"extensions"], + _(b"Using Additional Features"), extshelp, TOPIC_CATEGORY_CONFIG, ), ( - ["subrepos", "subrepo"], - _("Subrepositories"), - loaddoc('subrepos'), + [b"subrepos", b"subrepo"], + _(b"Subrepositories"), + loaddoc(b'subrepos'), TOPIC_CATEGORY_CONCEPTS, ), ( - ["hgweb"], - _("Configuring hgweb"), - loaddoc('hgweb'), + [b"hgweb"], + _(b"Configuring hgweb"), + loaddoc(b'hgweb'), TOPIC_CATEGORY_CONFIG, ), ( - ["glossary"], - _("Glossary"), - loaddoc('glossary'), + [b"glossary"], + _(b"Glossary"), + loaddoc(b'glossary'), TOPIC_CATEGORY_CONCEPTS, ), ( - ["hgignore", "ignore"], - _("Syntax for Mercurial Ignore Files"), - loaddoc('hgignore'), + [b"hgignore", b"ignore"], + _(b"Syntax for Mercurial Ignore Files"), + loaddoc(b'hgignore'), TOPIC_CATEGORY_IDS, ), ( - ["phases"], - _("Working with Phases"), - loaddoc('phases'), + [b"phases"], + _(b"Working with Phases"), + loaddoc(b'phases'), TOPIC_CATEGORY_CONCEPTS, ), ( - ['scripting'], - _('Using Mercurial from scripts and automation'), - loaddoc('scripting'), + [b'scripting'], + _(b'Using Mercurial from scripts and automation'), + loaddoc(b'scripting'), TOPIC_CATEGORY_MISC, ), ( - ['internals'], - _("Technical implementation topics"), + [b'internals'], + _(b"Technical implementation topics"), internalshelp, TOPIC_CATEGORY_MISC, ), ( - ['pager'], - _("Pager Support"), - loaddoc('pager'), + [b'pager'], + _(b"Pager Support"), + loaddoc(b'pager'), TOPIC_CATEGORY_CONFIG, ), ] @@ -518,7 +535,7 @@ # Maps topics with sub-topics to a list of their sub-topics. subtopics = { - 'internals': internalstable, + b'internals': internalstable, } # Map topics to lists of callable taking the current topic help and @@ -536,7 +553,7 @@ """ entries = [] for name in sorted(items): - text = (pycompat.getdoc(items[name]) or '').rstrip() + text = (pycompat.getdoc(items[name]) or b'').rstrip() if not text or not ui.verbose and any(w in text for w in _exclkeywords): continue text = gettext(text) @@ -547,14 +564,14 @@ doclines = [(lines[0])] for l in lines[1:]: # Stop once we find some Python doctest - if l.strip().startswith('>>>'): + if l.strip().startswith(b'>>>'): break if dedent: doclines.append(l.rstrip()) else: - doclines.append(' ' + l.strip()) - entries.append('\n'.join(doclines)) - entries = '\n\n'.join(entries) + doclines.append(b' ' + l.strip()) + entries.append(b'\n'.join(doclines)) + entries = b'\n\n'.join(entries) return doc.replace(marker, entries) @@ -566,33 +583,35 @@ addtopicsymbols( - 'bundlespec', - '.. bundlecompressionmarker', + b'bundlespec', + b'.. bundlecompressionmarker', compression.bundlecompressiontopics(), ) -addtopicsymbols('filesets', '.. predicatesmarker', fileset.symbols) -addtopicsymbols('merge-tools', '.. internaltoolsmarker', filemerge.internalsdoc) -addtopicsymbols('revisions', '.. predicatesmarker', revset.symbols) -addtopicsymbols('templates', '.. keywordsmarker', templatekw.keywords) -addtopicsymbols('templates', '.. filtersmarker', templatefilters.filters) -addtopicsymbols('templates', '.. functionsmarker', templatefuncs.funcs) +addtopicsymbols(b'filesets', b'.. predicatesmarker', fileset.symbols) addtopicsymbols( - 'hgweb', '.. webcommandsmarker', webcommands.commands, dedent=True + b'merge-tools', b'.. internaltoolsmarker', filemerge.internalsdoc +) +addtopicsymbols(b'revisions', b'.. predicatesmarker', revset.symbols) +addtopicsymbols(b'templates', b'.. keywordsmarker', templatekw.keywords) +addtopicsymbols(b'templates', b'.. filtersmarker', templatefilters.filters) +addtopicsymbols(b'templates', b'.. functionsmarker', templatefuncs.funcs) +addtopicsymbols( + b'hgweb', b'.. webcommandsmarker', webcommands.commands, dedent=True ) def inserttweakrc(ui, topic, doc): - marker = '.. tweakdefaultsmarker' + marker = b'.. tweakdefaultsmarker' repl = uimod.tweakrc def sub(m): lines = [m.group(1) + s for s in repl.splitlines()] - return '\n'.join(lines) + return b'\n'.join(lines) return re.sub(br'( *)%s' % re.escape(marker), sub, doc) -addtopichook('config', inserttweakrc) +addtopichook(b'config', inserttweakrc) def help_( @@ -629,7 +648,7 @@ # check if it's an invalid alias and display its error if it is if getattr(entry[0], 'badalias', None): - rst.append(entry[0].badalias + '\n') + rst.append(entry[0].badalias + b'\n') if entry[0].unknowncmd: try: rst.extend(helpextcmd(entry[0].cmdname)) @@ -639,31 +658,31 @@ # synopsis if len(entry) > 2: - if entry[2].startswith('hg'): - rst.append("%s\n" % entry[2]) + if entry[2].startswith(b'hg'): + rst.append(b"%s\n" % entry[2]) else: - rst.append('hg %s %s\n' % (aliases[0], entry[2])) + rst.append(b'hg %s %s\n' % (aliases[0], entry[2])) else: - rst.append('hg %s\n' % aliases[0]) + rst.append(b'hg %s\n' % aliases[0]) # aliases if full and not ui.quiet and len(aliases) > 1: - rst.append(_("\naliases: %s\n") % ', '.join(aliases[1:])) - rst.append('\n') + rst.append(_(b"\naliases: %s\n") % b', '.join(aliases[1:])) + rst.append(b'\n') # description doc = gettext(pycompat.getdoc(entry[0])) if not doc: - doc = _("(no help text available)") - if util.safehasattr(entry[0], 'definition'): # aliased command + doc = _(b"(no help text available)") + if util.safehasattr(entry[0], b'definition'): # aliased command source = entry[0].source - if entry[0].definition.startswith('!'): # shell alias - doc = _('shell alias for: %s\n\n%s\n\ndefined by: %s\n') % ( + if entry[0].definition.startswith(b'!'): # shell alias + doc = _(b'shell alias for: %s\n\n%s\n\ndefined by: %s\n') % ( entry[0].definition[1:], doc, source, ) else: - doc = _('alias for: hg %s\n\n%s\n\ndefined by: %s\n') % ( + doc = _(b'alias for: hg %s\n\n%s\n\ndefined by: %s\n') % ( entry[0].definition, doc, source, @@ -673,38 +692,39 @@ rst.append(doc[0]) else: rst.extend(doc) - rst.append('\n') + rst.append(b'\n') # check if this command shadows a non-trivial (multi-line) # extension help text try: mod = extensions.find(name) - doc = gettext(pycompat.getdoc(mod)) or '' - if '\n' in doc.strip(): + doc = gettext(pycompat.getdoc(mod)) or b'' + if b'\n' in doc.strip(): msg = _( - "(use 'hg help -e %s' to show help for " "the %s extension)" + b"(use 'hg help -e %s' to show help for " + b"the %s extension)" ) % (name, name) - rst.append('\n%s\n' % msg) + rst.append(b'\n%s\n' % msg) except KeyError: pass # options if not ui.quiet and entry[1]: - rst.append(optrst(_("options"), entry[1], ui.verbose)) + rst.append(optrst(_(b"options"), entry[1], ui.verbose)) if ui.verbose: rst.append( - optrst(_("global options"), commands.globalopts, ui.verbose) + optrst(_(b"global options"), commands.globalopts, ui.verbose) ) if not ui.verbose: if not full: - rst.append(_("\n(use 'hg %s -h' to show more help)\n") % name) + rst.append(_(b"\n(use 'hg %s -h' to show more help)\n") % name) elif not ui.quiet: rst.append( _( - '\n(some details hidden, use --verbose ' - 'to show complete help)' + b'\n(some details hidden, use --verbose ' + b'to show complete help)' ) ) @@ -720,7 +740,7 @@ for c, e in commands.table.iteritems(): fs = cmdutil.parsealiases(c) f = fs[0] - syns[f] = ', '.join(fs) + syns[f] = b', '.join(fs) func = e[0] if select and not select(f): continue @@ -729,7 +749,7 @@ continue doc = gettext(doc) if not doc: - doc = _("(no help text available)") + doc = _(b"(no help text available)") h[f] = doc.splitlines()[0].rstrip() cat = getattr(func, 'helpcategory', None) or ( @@ -740,27 +760,27 @@ rst = [] if not h: if not ui.quiet: - rst.append(_('no commands defined\n')) + rst.append(_(b'no commands defined\n')) return rst # Output top header. if not ui.quiet: - if name == "shortlist": - rst.append(_('basic commands:\n\n')) - elif name == "debug": - rst.append(_('debug commands (internal and unsupported):\n\n')) + if name == b"shortlist": + rst.append(_(b'basic commands:\n\n')) + elif name == b"debug": + rst.append(_(b'debug commands (internal and unsupported):\n\n')) else: - rst.append(_('list of commands:\n')) + rst.append(_(b'list of commands:\n')) def appendcmds(cmds): cmds = sorted(cmds) for c in cmds: if ui.verbose: - rst.append(" :%s: %s\n" % (syns[c], h[c])) + rst.append(b" :%s: %s\n" % (syns[c], h[c])) else: - rst.append(' :%s: %s\n' % (c, h[c])) + rst.append(b' :%s: %s\n' % (c, h[c])) - if name in ('shortlist', 'debug'): + if name in (b'shortlist', b'debug'): # List without categories. appendcmds(h) else: @@ -768,7 +788,7 @@ missing_order = set(cats.keys()) - set(CATEGORY_ORDER) if missing_order: ui.develwarn( - 'help categories missing from CATEGORY_ORDER: %s' + b'help categories missing from CATEGORY_ORDER: %s' % missing_order ) @@ -778,23 +798,23 @@ if catfns: if len(cats) > 1: catname = gettext(CATEGORY_NAMES[cat]) - rst.append("\n%s:\n" % catname) - rst.append("\n") + rst.append(b"\n%s:\n" % catname) + rst.append(b"\n") appendcmds(catfns) ex = opts.get anyopts = ex(r'keyword') or not (ex(r'command') or ex(r'extension')) if not name and anyopts: exts = listexts( - _('enabled extensions:'), + _(b'enabled extensions:'), extensions.enabled(), showdeprecated=ui.verbose, ) if exts: - rst.append('\n') + rst.append(b'\n') rst.extend(exts) - rst.append(_("\nadditional help topics:\n")) + rst.append(_(b"\nadditional help topics:\n")) # Group commands by category. topiccats = {} for topic in helptable: @@ -814,7 +834,7 @@ missing_order = set(topiccats.keys()) - set(TOPIC_CATEGORY_ORDER) if missing_order: ui.develwarn( - 'help categories missing from TOPIC_CATEGORY_ORDER: %s' + b'help categories missing from TOPIC_CATEGORY_ORDER: %s' % missing_order ) @@ -824,50 +844,50 @@ if topics: if len(topiccats) > 1: catname = gettext(TOPIC_CATEGORY_NAMES[cat]) - rst.append("\n%s:\n" % catname) - rst.append("\n") + rst.append(b"\n%s:\n" % catname) + rst.append(b"\n") for t, desc in topics: - rst.append(" :%s: %s\n" % (t, desc)) + rst.append(b" :%s: %s\n" % (t, desc)) if ui.quiet: pass elif ui.verbose: rst.append( - '\n%s\n' - % optrst(_("global options"), commands.globalopts, ui.verbose) + b'\n%s\n' + % optrst(_(b"global options"), commands.globalopts, ui.verbose) ) - if name == 'shortlist': + if name == b'shortlist': rst.append( - _("\n(use 'hg help' for the full list " "of commands)\n") + _(b"\n(use 'hg help' for the full list " b"of commands)\n") ) else: - if name == 'shortlist': + if name == b'shortlist': rst.append( _( - "\n(use 'hg help' for the full list of commands " - "or 'hg -v' for details)\n" + b"\n(use 'hg help' for the full list of commands " + b"or 'hg -v' for details)\n" ) ) elif name and not full: rst.append( - _("\n(use 'hg help %s' to show the full help " "text)\n") + _(b"\n(use 'hg help %s' to show the full help " b"text)\n") % name ) elif name and syns and name in syns.keys(): rst.append( _( - "\n(use 'hg help -v -e %s' to show built-in " - "aliases and global options)\n" + b"\n(use 'hg help -v -e %s' to show built-in " + b"aliases and global options)\n" ) % name ) else: rst.append( _( - "\n(use 'hg help -v%s' to show built-in aliases " - "and global options)\n" + b"\n(use 'hg help -v%s' to show built-in aliases " + b"and global options)\n" ) - % (name and " " + name or "") + % (name and b" " + name or b"") ) return rst @@ -893,20 +913,21 @@ # description if not doc: - rst.append(" %s\n" % _("(no help text available)")) + rst.append(b" %s\n" % _(b"(no help text available)")) if callable(doc): - rst += [" %s\n" % l for l in doc(ui).splitlines()] + rst += [b" %s\n" % l for l in doc(ui).splitlines()] if not ui.verbose: omitted = _( - '(some details hidden, use --verbose' ' to show complete help)' + b'(some details hidden, use --verbose' + b' to show complete help)' ) indicateomitted(rst, omitted) try: cmdutil.findcmd(name, commands.table) rst.append( - _("\nuse 'hg help -c %s' to see help for " "the %s command\n") + _(b"\nuse 'hg help -c %s' to see help for " b"the %s command\n") % (name, name) ) except error.UnknownCommand: @@ -916,25 +937,26 @@ def helpext(name, subtopic=None): try: mod = extensions.find(name) - doc = gettext(pycompat.getdoc(mod)) or _('no help text available') + doc = gettext(pycompat.getdoc(mod)) or _(b'no help text available') except KeyError: mod = None doc = extensions.disabledext(name) if not doc: raise error.UnknownCommand(name) - if '\n' not in doc: - head, tail = doc, "" + if b'\n' not in doc: + head, tail = doc, b"" else: - head, tail = doc.split('\n', 1) - rst = [_('%s extension - %s\n\n') % (name.rpartition('.')[-1], head)] + head, tail = doc.split(b'\n', 1) + rst = [_(b'%s extension - %s\n\n') % (name.rpartition(b'.')[-1], head)] if tail: rst.extend(tail.splitlines(True)) - rst.append('\n') + rst.append(b'\n') if not ui.verbose: omitted = _( - '(some details hidden, use --verbose' ' to show complete help)' + b'(some details hidden, use --verbose' + b' to show complete help)' ) indicateomitted(rst, omitted) @@ -943,70 +965,70 @@ ct = mod.cmdtable except AttributeError: ct = {} - modcmds = {c.partition('|')[0] for c in ct} + modcmds = {c.partition(b'|')[0] for c in ct} rst.extend(helplist(modcmds.__contains__)) else: rst.append( _( - "(use 'hg help extensions' for information on enabling" - " extensions)\n" + b"(use 'hg help extensions' for information on enabling" + b" extensions)\n" ) ) return rst def helpextcmd(name, subtopic=None): cmd, ext, doc = extensions.disabledcmd( - ui, name, ui.configbool('ui', 'strict') + ui, name, ui.configbool(b'ui', b'strict') ) doc = doc.splitlines()[0] rst = listexts( - _("'%s' is provided by the following " "extension:") % cmd, + _(b"'%s' is provided by the following " b"extension:") % cmd, {ext: doc}, indent=4, showdeprecated=True, ) - rst.append('\n') + rst.append(b'\n') rst.append( _( - "(use 'hg help extensions' for information on enabling " - "extensions)\n" + b"(use 'hg help extensions' for information on enabling " + b"extensions)\n" ) ) return rst rst = [] - kw = opts.get('keyword') + kw = opts.get(b'keyword') if kw or name is None and any(opts[o] for o in opts): - matches = topicmatch(ui, commands, name or '') + matches = topicmatch(ui, commands, name or b'') helpareas = [] - if opts.get('extension'): - helpareas += [('extensions', _('Extensions'))] - if opts.get('command'): - helpareas += [('commands', _('Commands'))] + if opts.get(b'extension'): + helpareas += [(b'extensions', _(b'Extensions'))] + if opts.get(b'command'): + helpareas += [(b'commands', _(b'Commands'))] if not helpareas: helpareas = [ - ('topics', _('Topics')), - ('commands', _('Commands')), - ('extensions', _('Extensions')), - ('extensioncommands', _('Extension Commands')), + (b'topics', _(b'Topics')), + (b'commands', _(b'Commands')), + (b'extensions', _(b'Extensions')), + (b'extensioncommands', _(b'Extension Commands')), ] for t, title in helpareas: if matches[t]: - rst.append('%s:\n\n' % title) + rst.append(b'%s:\n\n' % title) rst.extend(minirst.maketable(sorted(matches[t]), 1)) - rst.append('\n') + rst.append(b'\n') if not rst: - msg = _('no matches') - hint = _("try 'hg help' for a list of topics") + msg = _(b'no matches') + hint = _(b"try 'hg help' for a list of topics") raise error.Abort(msg, hint=hint) - elif name and name != 'shortlist': + elif name and name != b'shortlist': queries = [] if unknowncmd: queries += [helpextcmd] - if opts.get('extension'): + if opts.get(b'extension'): queries += [helpext] - if opts.get('command'): + if opts.get(b'command'): queries += [helpcmd] if not queries: queries = (helptopic, helpcmd, helpext, helpextcmd) @@ -1028,16 +1050,16 @@ hintname = subtopic else: hintname = name - msg = _('no such help topic: %s') % formatname - hint = _("try 'hg help --keyword %s'") % hintname + msg = _(b'no such help topic: %s') % formatname + hint = _(b"try 'hg help --keyword %s'") % hintname raise error.Abort(msg, hint=hint) else: # program name if not ui.quiet: - rst = [_("Mercurial Distributed SCM\n"), '\n'] + rst = [_(b"Mercurial Distributed SCM\n"), b'\n'] rst.extend(helplist(None, **pycompat.strkwargs(opts))) - return ''.join(rst) + return b''.join(rst) def formattedhelp( @@ -1055,14 +1077,14 @@ # <fullname> := <name>[.<subtopic][.<section>] name = subtopic = section = None if fullname is not None: - nameparts = fullname.split('.') + nameparts = fullname.split(b'.') name = nameparts.pop(0) if nameparts and name in subtopics: subtopic = nameparts.pop(0) if nameparts: - section = encoding.lower('.'.join(nameparts)) + section = encoding.lower(b'.'.join(nameparts)) - textwidth = ui.configint('ui', 'textwidth') + textwidth = ui.configint(b'ui', b'textwidth') termwidth = ui.termwidth() - 2 if textwidth <= 0 or termwidth < textwidth: textwidth = termwidth @@ -1078,10 +1100,10 @@ ) blocks, pruned = minirst.parse(text, keep=keep) - if 'verbose' in pruned: - keep.append('omitted') + if b'verbose' in pruned: + keep.append(b'omitted') else: - keep.append('notomitted') + keep.append(b'notomitted') blocks, pruned = minirst.parse(text, keep=keep) if section: blocks = minirst.filtersections(blocks, section) @@ -1090,6 +1112,6 @@ # to look for, or we could have simply failed to found "foo.bar" # because bar isn't a section of foo if section and not (blocks and name): - raise error.Abort(_("help section not found: %s") % fullname) + raise error.Abort(_(b"help section not found: %s") % fullname) return minirst.formatplain(blocks, textwidth)