##// END OF EJS Templates
httprepo: long arguments support (issue2126)...
httprepo: long arguments support (issue2126) Send the command arguments in the HTTP headers. The command is still part of the URL. If the server does not have the 'httpheader' capability, the client will send the command arguments in the URL as it did previously. Web servers typically allow more data to be placed within the headers than in the URL, so this approach will: - Avoid HTTP errors due to using a URL that is too large. - Allow Mercurial to implement a more efficient wire protocol. An alternate approach is to send the arguments as part of the request body. This approach has been rejected because it requires the use of POST requests, so it would break any existing configuration that relies on the request type for authentication or caching. Extensibility: - The header size is provided by the server, which makes it possible to introduce an hgrc setting for it. - The client ignores the capability value after the first comma, which allows more information to be included in the future.

File last commit:

r14044:0528b69f default
r14093:ce99d887 default
Show More
help.py
135 lines | 4.3 KiB | text/x-python | PythonLexer
Matt Mackall
Add basic support for help topics and a dates topic
r3795 # help.py - help data for mercurial
#
# Copyright 2006 Matt Mackall <mpm@selenic.com>
#
Martin Geisler
updated license to be explicit about GPL version 2
r8225 # This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Matt Mackall
Add basic support for help topics and a dates topic
r3795
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 from i18n import gettext, _
import sys, os
Benoit Boissinot
remove unused imports
r9678 import extensions
Cédric Duval
help: adding a new help topic about extensions...
r8863
def moduledoc(file):
Cédric Duval
help: more improvements for the extensions topic...
r8879 '''return the top-level python documentation for the given file
Matt Mackall
many, many trivial check-code fixups
r10282 Loosely inspired by pydoc.source_synopsis(), but rewritten to
handle triple quotes and to return the whole text instead of just
the synopsis'''
Cédric Duval
help: adding a new help topic about extensions...
r8863 result = []
line = file.readline()
while line[:1] == '#' or not line.strip():
line = file.readline()
Matt Mackall
many, many trivial check-code fixups
r10282 if not line:
break
Cédric Duval
help: adding a new help topic about extensions...
r8863
start = line[:3]
Matt Mackall
backout most of 4f8067c94729
r12401 if start == '"""' or start == "'''":
Cédric Duval
help: adding a new help topic about extensions...
r8863 line = line[3:]
while line:
if line.rstrip().endswith(start):
line = line.split(start)[0]
if line:
result.append(line)
break
elif not line:
return None # unmatched delimiter
result.append(line)
line = file.readline()
else:
return None
return ''.join(result)
Brodie Rao
dispatch: provide help for disabled extensions and commands...
r10364 def listexts(header, exts, maxlength, indent=1):
Cédric Duval
help: more improvements for the extensions topic...
r8879 '''return a text listing of the given extensions'''
if not exts:
return ''
result = '\n%s\n\n' % header
for name, desc in sorted(exts.iteritems()):
Brodie Rao
dispatch: provide help for disabled extensions and commands...
r10364 result += '%s%-*s %s\n' % (' ' * indent, maxlength + 2,
':%s:' % name, desc)
Cédric Duval
help: refactor extensions listing, and show enabled ones in the dedicated topic
r8864 return result
Cédric Duval
help: more improvements for the extensions topic...
r8879 def extshelp():
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 doc = loaddoc('extensions')()
Cédric Duval
help: adding a new help topic about extensions...
r8863
Cédric Duval
extensions: move extensions listing functions from mercurial.help...
r8871 exts, maxlength = extensions.enabled()
Cédric Duval
help: more improvements for the extensions topic...
r8879 doc += listexts(_('enabled extensions:'), exts, maxlength)
Cédric Duval
help: refactor extensions listing, and show enabled ones in the dedicated topic
r8864
Cédric Duval
extensions: move extensions listing functions from mercurial.help...
r8871 exts, maxlength = extensions.disabled()
Cédric Duval
help: more improvements for the extensions topic...
r8879 doc += listexts(_('disabled extensions:'), exts, maxlength)
Cédric Duval
help: adding a new help topic about extensions...
r8863
return doc
Martin Geisler
i18n: mark help strings for translation...
r7013
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 def loaddoc(topic):
"""Return a delayed loader for help/topic.txt."""
Matt Mackall
move environment topic
r3798
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 def loader():
if hasattr(sys, 'frozen'):
module = sys.executable
else:
module = __file__
base = os.path.dirname(module)
Dirkjan Ochtman
help: add a topic on git diffs (issue1352)
r7293
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 for dir in ('.', '..'):
docdir = os.path.join(base, dir, 'help')
if os.path.isdir(docdir):
break
Alexander Solovyov
help: add a topic about some of the templating features
r7677
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 path = os.path.join(docdir, topic + ".txt")
Patrick Mezard
help: add topic rewriting hooks...
r12820 doc = gettext(open(path).read())
for rewriter in helphooks.get(topic, []):
doc = rewriter(topic, doc)
return doc
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 return loader
Alexander Solovyov
help: add a topic about some of the templating features
r7677
Yun Lee
help: sort help topics to make the output more readable (issue2751)
r13888 helptable = sorted([
Martin Geisler
help: make "hg help hgrc" an alias for "hg help config"
r12145 (["config", "hgrc"], _("Configuration Files"), loaddoc('config')),
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 (["dates"], _("Date Formats"), loaddoc('dates')),
(["patterns"], _("File Name Patterns"), loaddoc('patterns')),
Matt Mackall
many, many trivial check-code fixups
r10282 (['environment', 'env'], _('Environment Variables'),
loaddoc('environment')),
(['revs', 'revisions'], _('Specifying Single Revisions'),
loaddoc('revisions')),
(['mrevs', 'multirevs'], _('Specifying Multiple Revisions'),
loaddoc('multirevs')),
Martin Geisler
help: add "revset" alias for "revsets" help topic
r12818 (['revset', 'revsets'], _("Specifying Revision Sets"), loaddoc('revsets')),
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 (['diffs'], _('Diff Formats'), loaddoc('diffs')),
Erik Zielke
help: help topic for merge tools...
r12771 (['merge-tools'], _('Merge Tools'), loaddoc('merge-tools')),
Matt Mackall
many, many trivial check-code fixups
r10282 (['templating', 'templates'], _('Template Usage'),
loaddoc('templates')),
Martin Geisler
help: move help topics from mercurial/help.py to help/*.txt...
r9539 (['urls'], _('URL Paths'), loaddoc('urls')),
Cédric Duval
help: more improvements for the extensions topic...
r8879 (["extensions"], _("Using additional features"), extshelp),
Yun Lee
help: move hgignore man page into built-in help (issue2769)
r14044 (["subrepo", "subrepos"], _("Subrepositories"), loaddoc('subrepos')),
(["hgweb"], _("Configuring hgweb"), loaddoc('hgweb')),
(["glossary"], _("Glossary"), loaddoc('glossary')),
(["hgignore", "ignore"], _("syntax for Mercurial ignore files"),
loaddoc('hgignore')),
Yun Lee
help: sort help topics to make the output more readable (issue2751)
r13888 ])
Patrick Mezard
help: add topic rewriting hooks...
r12820
# Map topics to lists of callable taking the current topic help and
# returning the updated version
helphooks = {
}
def addtopichook(topic, rewriter):
helphooks.setdefault(topic, []).append(rewriter)
Patrick Mezard
help: extract items doc generation function
r13593
def makeitemsdoc(topic, doc, marker, items):
"""Extract docstring from the items key to function mapping, build a
.single documentation block and use it to overwrite the marker in doc
"""
entries = []
for name in sorted(items):
text = (items[name].__doc__ or '').rstrip()
if not text:
continue
text = gettext(text)
lines = text.splitlines()
lines[1:] = [(' ' + l.strip()) for l in lines[1:]]
entries.append('\n'.join(lines))
entries = '\n\n'.join(entries)
return doc.replace(marker, entries)