##// 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
check-seclevel.py
165 lines | 5.7 KiB | text/x-python | PythonLexer
/ doc / check-seclevel.py
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 #!/usr/bin/env python
#
timeless@mozdev.org
check-seclevel: fix file description grammar
r26192 # checkseclevel - checking section title levels in each online help document
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648
import sys, os
import optparse
# import from the live mercurial repo
sys.path.insert(0, "..")
# fall back to pure modules if required C extensions are not available
sys.path.append(os.path.join('..', 'mercurial', 'pure'))
from mercurial import demandimport; demandimport.enable()
from mercurial.commands import table
from mercurial.help import helptable
from mercurial import extensions
from mercurial import minirst
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 from mercurial import ui as uimod
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648
level2mark = ['"', '=', '-', '.', '#']
reservedmarks = ['"']
mark2level = {}
for m, l in zip(level2mark, xrange(len(level2mark))):
if m not in reservedmarks:
mark2level[m] = l
initlevel_topic = 0
initlevel_cmd = 1
initlevel_ext = 1
initlevel_ext_cmd = 3
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 def showavailables(ui, initlevel):
ui.warn((' available marks and order of them in this help: %s\n') %
(', '.join(['%r' % (m * 4) for m in level2mark[initlevel + 1:]])))
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 def checkseclevel(ui, doc, name, initlevel):
ui.note(('checking "%s"\n') % name)
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 blocks, pruned = minirst.parse(doc, 0, ['verbose'])
errorcnt = 0
curlevel = initlevel
for block in blocks:
if block['type'] != 'section':
continue
mark = block['underline']
title = block['lines'][0]
if (mark not in mark2level) or (mark2level[mark] <= initlevel):
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui.warn(('invalid section mark %r for "%s" of %s\n') %
(mark * 4, title, name))
showavailables(ui, initlevel)
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 errorcnt += 1
continue
nextlevel = mark2level[mark]
if curlevel < nextlevel and curlevel + 1 != nextlevel:
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui.warn(('gap of section level at "%s" of %s\n') %
(title, name))
showavailables(ui, initlevel)
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 errorcnt += 1
continue
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui.note(('appropriate section level for "%s %s"\n') %
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 (mark * (nextlevel * 2), title))
curlevel = nextlevel
return errorcnt
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 def checkcmdtable(ui, cmdtable, namefmt, initlevel):
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 errorcnt = 0
for k, entry in cmdtable.items():
name = k.split("|")[0].lstrip("^")
if not entry[0].__doc__:
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui.note(('skip checking %s: no help document\n') %
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 (namefmt % name))
continue
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 errorcnt += checkseclevel(ui, entry[0].__doc__,
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 namefmt % name,
initlevel)
return errorcnt
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 def checkhghelps(ui):
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 errorcnt = 0
for names, sec, doc in helptable:
Augie Fackler
check-seclevel: restore use of callable() since it was readded in Python 3.2
r21792 if callable(doc):
Yuya Nishihara
help: pass around ui to doc loader (API)...
r26413 doc = doc(ui)
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 errorcnt += checkseclevel(ui, doc,
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 '%s help topic' % names[0],
initlevel_topic)
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 errorcnt += checkcmdtable(ui, table, '%s command', initlevel_cmd)
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648
for name in sorted(extensions.enabled().keys() +
extensions.disabled().keys()):
mod = extensions.load(None, name, None)
if not mod.__doc__:
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui.note(('skip checking %s extension: no help document\n') % name)
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 continue
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 errorcnt += checkseclevel(ui, mod.__doc__,
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 '%s extension' % name,
initlevel_ext)
cmdtable = getattr(mod, 'cmdtable', None)
if cmdtable:
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 errorcnt += checkcmdtable(ui, cmdtable,
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 '%s command of ' + name + ' extension',
initlevel_ext_cmd)
return errorcnt
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 def checkfile(ui, filename, initlevel):
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 if filename == '-':
filename = 'stdin'
doc = sys.stdin.read()
else:
fp = open(filename)
try:
doc = fp.read()
finally:
fp.close()
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui.note(('checking input from %s with initlevel %d\n') %
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 (filename, initlevel))
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 return checkseclevel(ui, doc, 'input from %s' % filename, initlevel)
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648
Yuya Nishihara
check-seclevel: wrap entry point by function...
r26398 def main():
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 optparser = optparse.OptionParser("""%prog [options]
This checks all help documents of Mercurial (topics, commands,
extensions and commands of them), if no file is specified by --file
option.
""")
optparser.add_option("-v", "--verbose",
help="enable additional output",
action="store_true")
optparser.add_option("-f", "--file",
help="filename to read in (or '-' for stdin)",
action="store", default="")
optparser.add_option("-t", "--topic",
help="parse file as help topic",
action="store_const", dest="initlevel", const=0)
optparser.add_option("-c", "--command",
help="parse file as help of core command",
action="store_const", dest="initlevel", const=1)
optparser.add_option("-e", "--extension",
help="parse file as help of extension",
action="store_const", dest="initlevel", const=1)
optparser.add_option("-C", "--extension-command",
help="parse file as help of extension command",
action="store_const", dest="initlevel", const=3)
optparser.add_option("-l", "--initlevel",
help="set initial section level manually",
action="store", type="int", default=0)
(options, args) = optparser.parse_args()
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 ui = uimod.ui()
ui.setconfig('ui', 'verbose', options.verbose, '--verbose')
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648
if options.file:
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 if checkfile(ui, options.file, options.initlevel):
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 sys.exit(1)
else:
Yuya Nishihara
check-seclevel: use ui to show status and error messages...
r26411 if checkhghelps(ui):
FUJIWARA Katsunori
doc: add the tool to check section marks in help documents...
r17648 sys.exit(1)
Yuya Nishihara
check-seclevel: wrap entry point by function...
r26398
if __name__ == "__main__":
main()