##// END OF EJS Templates
dockerlib: allow non-unique uid and gid of $DBUILDUSER (issue4657)...
dockerlib: allow non-unique uid and gid of $DBUILDUSER (issue4657) There are make targets for building mercurial packages for various distributions using docker. One of the preparation steps before building is to create inside the docker image a user with the same uid/gid as the current user on the host system, so that the resulting files have appropriate ownership/permissions. It's possible to run `make docker-<distro>` as a user with uid or gid that is already present in a vanilla docker container of that distibution. For example, issue4657 is about failing to build fedora packages as a user with uid=999 and gid=999 because these ids are already used in fedora, and groupadd fails. useradd would fail too, if the flow ever got to it (and there was a user with such uid already). A straightforward (maybe too much) way to fix this is to allow non-unique uid and gid for the new user and group that get created inside the image. I'm not sure of the implications of this, but marmoute encouraged me to try and send this patch for stable.

File last commit:

r26413:e0c572d4 default
r26888:271a8020 stable
Show More
gendoc.py
206 lines | 6.3 KiB | text/x-python | PythonLexer
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 """usage: %s DOC ...
where DOC is the name of a document
"""
Erik Zielke
gendoc: dedent documentation from docstrings...
r12780 import os, sys, textwrap
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # import from the live mercurial repo
sys.path.insert(0, "..")
Cédric Duval
gendoc: fall back to pure modules if C extensions are not available (issue1711)
r9130 # fall back to pure modules if required C extensions are not available
sys.path.append(os.path.join('..', 'mercurial', 'pure'))
Matt Mackall
gendoc: use demandimport
r5209 from mercurial import demandimport; demandimport.enable()
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 from mercurial import minirst
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 from mercurial.commands import table, globalopts
Takumi IINO
gendoc: make commnd __doc__ and extension __doc__ as translatable...
r19231 from mercurial.i18n import gettext, _
Takumi IINO
gendoc: add showtopic...
r19424 from mercurial.help import helptable, loaddoc
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 from mercurial import extensions
Yuya Nishihara
gendoc: use real ui in place of stdout...
r26412 from mercurial import ui as uimod
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
def get_desc(docstr):
if not docstr:
return "", ""
# sanitize
docstr = docstr.strip("\n")
docstr = docstr.rstrip()
shortdesc = docstr.splitlines()[0].strip()
i = docstr.find("\n")
if i != -1:
Matt Mackall
many, many trivial check-code fixups
r10282 desc = docstr[i + 2:]
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 else:
Erik Zielke
gendoc: dedent documentation from docstrings...
r12780 desc = shortdesc
desc = textwrap.dedent(desc)
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 return (shortdesc, desc)
def get_opts(opts):
FUJIWARA Katsunori
help: show value requirement and multiple occurrence of options...
r11321 for opt in opts:
if len(opt) == 5:
shortopt, longopt, default, desc, optlabel = opt
else:
shortopt, longopt, default, desc = opt
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 optlabel = _("VALUE")
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 allopts = []
if shortopt:
allopts.append("-%s" % shortopt)
if longopt:
allopts.append("--%s" % longopt)
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 if isinstance(default, list):
allopts[-1] += " <%s[+]>" % optlabel
elif (default is not None) and not isinstance(default, bool):
allopts[-1] += " <%s>" % optlabel
Simon Heimberg
doc: gendoc.py creates valid output for option descriptions with newlines...
r20655 if '\n' in desc:
# only remove line breaks and indentation
desc = ' '.join(l.lstrip() for l in desc.split('\n'))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 desc += default and _(" (default: %s)") % default or ""
Thomas Arendsen Hein
coding style: fix yield used as a function
r13077 yield (", ".join(allopts), desc)
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
Erik Zielke
gendoc: refactor get_cmd...
r12756 def get_cmd(cmd, cmdtable):
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 d = {}
Erik Zielke
gendoc: refactor get_cmd...
r12756 attr = cmdtable[cmd]
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 cmds = cmd.lstrip("^").split("|")
d['cmd'] = cmds[0]
d['aliases'] = cmd.split("|")[1:]
Takumi IINO
gendoc: make commnd __doc__ and extension __doc__ as translatable...
r19231 d['desc'] = get_desc(gettext(attr[0].__doc__))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 d['opts'] = list(get_opts(attr[1]))
Matt Mackall
doc: handle shortened command synopses
r7376
s = 'hg ' + cmds[0]
if len(attr) > 2:
if not attr[2].startswith('hg'):
Ori Avtalion
gendoc: add missing space in command synopsis
r8546 s += ' ' + attr[2]
Matt Mackall
doc: handle shortened command synopses
r7376 else:
s = attr[2]
Martin Geisler
gendoc: fix synopsis...
r9622 d['synopsis'] = s.strip()
Matt Mackall
doc: handle shortened command synopses
r7376
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 return d
Takumi IINO
gendoc: rename to showdoc from show_doc...
r19423 def showdoc(ui):
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # print options
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.section(_("Options")))
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 multioccur = False
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 for optstr, desc in get_opts(globalopts):
Martin Geisler
gendoc: re-add indentation to global option table...
r12812 ui.write("%s\n %s\n\n" % (optstr, desc))
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 if optstr.endswith("[+]>"):
multioccur = True
if multioccur:
ui.write(_("\n[+] marked option can be specified multiple times\n"))
ui.write("\n")
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print cmds
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.section(_("Commands")))
commandprinter(ui, table, minirst.subsection)
Erik Zielke
gendoc: refactor get_cmd...
r12756
Takumi IINO
gendoc: extract print help topics into a dedicated function...
r19233 # print help topics
# The config help topic is included in the hgrc.5 man page.
helpprinter(ui, helptable, minirst.section, exclude=['config'])
Erik Zielke
gendoc: refactor get_cmd...
r12756
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.section(_("Extensions")))
Brodie Rao
cleanup: eradicate long lines
r16683 ui.write(_("This section contains help for extensions that are "
"distributed together with Mercurial. Help for other "
"extensions is available in the help system."))
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 ui.write("\n\n"
".. contents::\n"
" :class: htmlonly\n"
" :local:\n"
" :depth: 1\n\n")
for extensionname in sorted(allextensionnames()):
mod = extensions.load(None, extensionname, None)
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.subsection(extensionname))
Takumi IINO
gendoc: make commnd __doc__ and extension __doc__ as translatable...
r19231 ui.write("%s\n\n" % gettext(mod.__doc__))
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 cmdtable = getattr(mod, 'cmdtable', None)
if cmdtable:
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.subsubsection(_('Commands')))
commandprinter(ui, cmdtable, minirst.subsubsubsection)
Erik Zielke
gendoc: automatically create help for default extensions....
r12781
Takumi IINO
gendoc: add showtopic...
r19424 def showtopic(ui, topic):
extrahelptable = [
(["common"], '', loaddoc('common')),
(["hg.1"], '', loaddoc('hg.1')),
(["hgignore.5"], '', loaddoc('hgignore.5')),
(["hgrc.5"], '', loaddoc('hgrc.5')),
(["hgignore.5.gendoc"], '', loaddoc('hgignore')),
(["hgrc.5.gendoc"], '', loaddoc('config')),
]
helpprinter(ui, helptable + extrahelptable, None, include=[topic])
Takumi IINO
gendoc: extract print help topics into a dedicated function...
r19233 def helpprinter(ui, helptable, sectionfunc, include=[], exclude=[]):
for names, sec, doc in helptable:
if exclude and names[0] in exclude:
continue
if include and names[0] not in include:
continue
for name in names:
ui.write(".. _%s:\n" % name)
ui.write("\n")
if sectionfunc:
ui.write(sectionfunc(sec))
Augie Fackler
gendoc: restore use of callable() since it was readded in Python 3.2
r21793 if callable(doc):
Yuya Nishihara
help: pass around ui to doc loader (API)...
r26413 doc = doc(ui)
Takumi IINO
gendoc: extract print help topics into a dedicated function...
r19233 ui.write(doc)
ui.write("\n")
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 def commandprinter(ui, cmdtable, sectionfunc):
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 h = {}
Erik Zielke
gendoc: refactor get_cmd...
r12756 for c, attr in cmdtable.items():
Christian Ebert
gendoc: fix indentation
r6488 f = c.split("|")[0]
f = f.lstrip("^")
h[f] = c
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 cmds = h.keys()
cmds.sort()
for f in cmds:
Matt Mackall
many, many trivial check-code fixups
r10282 if f.startswith("debug"):
continue
Erik Zielke
gendoc: refactor get_cmd...
r12756 d = get_cmd(h[f], cmdtable)
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(sectionfunc(d['cmd']))
FUJIWARA Katsunori
doc: show short description of each commands in generated documents...
r20689 # short description
ui.write(d['desc'][0])
Christian Ebert
gendoc: fix indentation
r6488 # synopsis
Martin Geisler
gendoc: support multi-line synopses
r12813 ui.write("::\n\n")
synopsislines = d['synopsis'].splitlines()
for line in synopsislines:
# some commands (such as rebase) have a multi-line
# synopsis
Martin Geisler
gendoc: do not strip 'hg ' from synopsis...
r12814 ui.write(" %s\n" % line)
Martin Geisler
gendoc: support multi-line synopses
r12813 ui.write('\n')
Christian Ebert
gendoc: fix indentation
r6488 # description
ui.write("%s\n\n" % d['desc'][1])
# options
opt_output = list(d['opts'])
if opt_output:
opts_len = max([len(line[0]) for line in opt_output])
Javi Merino
doc: Capitalize the "options" header of mercurial commands
r13345 ui.write(_("Options:\n\n"))
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 multioccur = False
Christian Ebert
gendoc: fix indentation
r6488 for optstr, desc in opt_output:
if desc:
s = "%-*s %s" % (opts_len, optstr, desc)
else:
s = optstr
Erik Zielke
gendoc: dedent documentation from docstrings...
r12780 ui.write("%s\n" % s)
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 if optstr.endswith("[+]>"):
multioccur = True
if multioccur:
ui.write(_("\n[+] marked option can be specified"
" multiple times\n"))
Christian Ebert
gendoc: fix indentation
r6488 ui.write("\n")
# aliases
if d['aliases']:
ui.write(_(" aliases: %s\n\n") % " ".join(d['aliases']))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
Matt Mackall
Generate docs for help topics
r3797
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 def allextensionnames():
Matt Mackall
extensions: drop maxlength from enabled and disabled...
r14316 return extensions.enabled().keys() + extensions.disabled().keys()
Erik Zielke
gendoc: automatically create help for default extensions....
r12781
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 if __name__ == "__main__":
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 doc = 'hg.1.gendoc'
if len(sys.argv) > 1:
doc = sys.argv[1]
Yuya Nishihara
gendoc: use real ui in place of stdout...
r26412 ui = uimod.ui()
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 if doc == 'hg.1.gendoc':
Yuya Nishihara
gendoc: use real ui in place of stdout...
r26412 showdoc(ui)
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 else:
Yuya Nishihara
gendoc: use real ui in place of stdout...
r26412 showtopic(ui, sys.argv[1])