diff --git a/doc/docchecker b/doc/docchecker --- a/doc/docchecker +++ b/doc/docchecker @@ -15,6 +15,7 @@ try: import msvcrt + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) except ImportError: @@ -25,14 +26,18 @@ leadingline = re.compile(br'(^\s*)(\S.*)$') checks = [ - (br""":hg:`[^`]*'[^`]*`""", - b"""warning: please avoid nesting ' in :hg:`...`"""), - (br'\w:hg:`', - b'warning: please have a space before :hg:'), - (br"""(?:[^a-z][^'.])hg ([^,;"`]*'(?!hg)){2}""", - b'''warning: please use " instead of ' for hg ... "..."'''), + ( + br""":hg:`[^`]*'[^`]*`""", + b"""warning: please avoid nesting ' in :hg:`...`""", + ), + (br'\w:hg:`', b'warning: please have a space before :hg:'), + ( + br"""(?:[^a-z][^'.])hg ([^,;"`]*'(?!hg)){2}""", + b'''warning: please use " instead of ' for hg ... "..."''', + ), ] + def check(line): messages = [] for match, msg in checks: @@ -43,6 +48,7 @@ for msg in messages: stdout.write(b'%s\n' % msg) + def work(file): (llead, lline) = (b'', b'') @@ -55,8 +61,8 @@ continue lead, line = match.group(1), match.group(2) - if (lead == llead): - if (lline != b''): + if lead == llead: + if lline != b'': lline += b' ' + line else: lline = line @@ -65,6 +71,7 @@ (llead, lline) = (lead, line) check(lline) + def main(): for f in sys.argv[1:]: try: @@ -73,4 +80,5 @@ except BaseException as e: sys.stdout.write(r"failed to process %s: %s\n" % (f, e)) + main() diff --git a/doc/runrst b/doc/runrst --- a/doc/runrst +++ b/doc/runrst @@ -15,18 +15,24 @@ from __future__ import absolute_import import sys + try: import docutils.core as core import docutils.nodes as nodes import docutils.utils as utils import docutils.parsers.rst.roles as roles except ImportError: - sys.stderr.write("abort: couldn't generate documentation: docutils " - "module is missing\n") - sys.stderr.write("please install python-docutils or see " - "http://docutils.sourceforge.net/\n") + sys.stderr.write( + "abort: couldn't generate documentation: docutils " + "module is missing\n" + ) + sys.stderr.write( + "please install python-docutils or see " + "http://docutils.sourceforge.net/\n" + ) sys.exit(-1) + def role_hg(name, rawtext, text, lineno, inliner, options=None, content=None): text = "hg " + utils.unescape(text) linktext = nodes.literal(rawtext, text) @@ -46,10 +52,10 @@ refuri = "hg.1.html#%s" % args[1] else: refuri = "hg.1.html#%s" % args[0] - node = nodes.reference(rawtext, '', linktext, - refuri=refuri) + node = nodes.reference(rawtext, '', linktext, refuri=refuri) return [node], [] + roles.register_local_role("hg", role_hg) if __name__ == "__main__": diff --git a/hgweb.cgi b/hgweb.cgi --- a/hgweb.cgi +++ b/hgweb.cgi @@ -8,12 +8,15 @@ # Uncomment and adjust if Mercurial is not installed system-wide # (consult "installed modules" path from 'hg debuginstall'): -#import sys; sys.path.insert(0, "/path/to/python/lib") +# import sys; sys.path.insert(0, "/path/to/python/lib") # Uncomment to send python tracebacks to the browser if an error occurs: -#import cgitb; cgitb.enable() +# import cgitb; cgitb.enable() + +from mercurial import demandimport -from mercurial import demandimport; demandimport.enable() +demandimport.enable() from mercurial.hgweb import hgweb, wsgicgi + application = hgweb(config) wsgicgi.launch(application) diff --git a/i18n/hggettext b/i18n/hggettext --- a/i18n/hggettext +++ b/i18n/hggettext @@ -57,18 +57,22 @@ def poentry(path, lineno, s): - return ('#: %s:%d\n' % (path, lineno) + - 'msgid %s\n' % normalize(s) + - 'msgstr ""\n') + return ( + '#: %s:%d\n' % (path, lineno) + + 'msgid %s\n' % normalize(s) + + 'msgstr ""\n' + ) + doctestre = re.compile(r'^ +>>> ', re.MULTILINE) + def offset(src, doc, name, lineno, default): """Compute offset or issue a warning on stdout.""" # remove doctest part, in order to avoid backslash mismatching m = doctestre.search(doc) if m: - doc = doc[:m.start()] + doc = doc[: m.start()] # Backslashes in doc appear doubled in src. end = src.find(doc.replace('\\', '\\\\')) @@ -76,9 +80,11 @@ # This can happen if the docstring contains unnecessary escape # sequences such as \" in a triple-quoted string. The problem # is that \" is turned into " and so doc wont appear in src. - sys.stderr.write("%s:%d:warning:" - " unknown docstr offset, assuming %d lines\n" - % (name, lineno, default)) + sys.stderr.write( + "%s:%d:warning:" + " unknown docstr offset, assuming %d lines\n" + % (name, lineno, default) + ) return default else: return src.count('\n', 0, end) @@ -121,7 +127,7 @@ for func, rstrip in functions: if func.__doc__: - docobj = func # this might be a proxy to provide formatted doc + docobj = func # this might be a proxy to provide formatted doc func = getattr(func, '_origfunc', func) funcmod = inspect.getmodule(func) extra = '' @@ -155,7 +161,9 @@ # accidentally import and extract strings from a Mercurial # installation mentioned in PYTHONPATH. sys.path.insert(0, os.getcwd()) - from mercurial import demandimport; demandimport.enable() + from mercurial import demandimport + + demandimport.enable() for path in sys.argv[1:]: if path.endswith('.txt'): rawtext(path) diff --git a/i18n/posplit b/i18n/posplit --- a/i18n/posplit +++ b/i18n/posplit @@ -11,6 +11,7 @@ import re import sys + def addentry(po, entry, cache): e = cache.get(entry.msgid) if e: @@ -27,6 +28,7 @@ po.append(entry) cache[entry.msgid] = entry + def mkentry(orig, delta, msgid, msgstr): entry = polib.POEntry() entry.merge(orig) @@ -35,13 +37,14 @@ entry.occurrences = [(p, int(l) + delta) for (p, l) in orig.occurrences] return entry + if __name__ == "__main__": po = polib.pofile(sys.argv[1]) cache = {} entries = po[:] po[:] = [] - findd = re.compile(r' *\.\. (\w+)::') # for finding directives + findd = re.compile(r' *\.\. (\w+)::') # for finding directives for entry in entries: msgids = entry.msgid.split(u'\n\n') if entry.msgstr: @@ -65,7 +68,7 @@ newentry = mkentry(entry, delta, msgid, msgstr) mdirective = findd.match(msgid) if mdirective: - if not msgid[mdirective.end():].rstrip(): + if not msgid[mdirective.end() :].rstrip(): # only directive, nothing to translate here delta += 2 continue @@ -77,8 +80,10 @@ continue else: # lines following directly, unexpected - print('Warning: text follows line with directive' - ' %s' % directive) + print( + 'Warning: text follows line with directive' + ' %s' % directive + ) comment = 'do not translate: .. %s::' % directive if not newentry.comment: newentry.comment = comment diff --git a/tests/f b/tests/f --- a/tests/f +++ b/tests/f @@ -34,14 +34,18 @@ import sys # Python 3 adapters -ispy3 = (sys.version_info[0] >= 3) +ispy3 = sys.version_info[0] >= 3 if ispy3: + def iterbytes(s): for i in range(len(s)): - yield s[i:i + 1] + yield s[i : i + 1] + + else: iterbytes = iter + def visit(opts, filenames, outfile): """Process filenames in the way specified in opts, writing output to outfile.""" @@ -88,21 +92,26 @@ if opts.newer: # mtime might be in whole seconds so newer file might be same if stat.st_mtime >= os.stat(opts.newer).st_mtime: - facts.append(b'newer than %s' % opts.newer.encode( - 'utf8', 'replace')) + facts.append( + b'newer than %s' % opts.newer.encode('utf8', 'replace') + ) else: - facts.append(b'older than %s' % opts.newer.encode( - 'utf8', 'replace')) + facts.append( + b'older than %s' % opts.newer.encode('utf8', 'replace') + ) if opts.md5 and content is not None: h = hashlib.md5(content) - facts.append(b'md5=%s' % binascii.hexlify(h.digest())[:opts.bytes]) + facts.append(b'md5=%s' % binascii.hexlify(h.digest())[: opts.bytes]) if opts.sha1 and content is not None: h = hashlib.sha1(content) - facts.append(b'sha1=%s' % binascii.hexlify(h.digest())[:opts.bytes]) + facts.append( + b'sha1=%s' % binascii.hexlify(h.digest())[: opts.bytes] + ) if opts.sha256 and content is not None: h = hashlib.sha256(content) - facts.append(b'sha256=%s' % - binascii.hexlify(h.digest())[:opts.bytes]) + facts.append( + b'sha256=%s' % binascii.hexlify(h.digest())[: opts.bytes] + ) if isstdin: outfile.write(b', '.join(facts) + b'\n') elif facts: @@ -114,21 +123,25 @@ if not islink: if opts.lines: if opts.lines >= 0: - chunk = b''.join(chunk.splitlines(True)[:opts.lines]) + chunk = b''.join(chunk.splitlines(True)[: opts.lines]) else: - chunk = b''.join(chunk.splitlines(True)[opts.lines:]) + chunk = b''.join(chunk.splitlines(True)[opts.lines :]) if opts.bytes: if opts.bytes >= 0: - chunk = chunk[:opts.bytes] + chunk = chunk[: opts.bytes] else: - chunk = chunk[opts.bytes:] + chunk = chunk[opts.bytes :] if opts.hexdump: for i in range(0, len(chunk), 16): - s = chunk[i:i + 16] - outfile.write(b'%04x: %-47s |%s|\n' % - (i, b' '.join( - b'%02x' % ord(c) for c in iterbytes(s)), - re.sub(b'[^ -~]', b'.', s))) + s = chunk[i : i + 16] + outfile.write( + b'%04x: %-47s |%s|\n' + % ( + i, + b' '.join(b'%02x' % ord(c) for c in iterbytes(s)), + re.sub(b'[^ -~]', b'.', s), + ) + ) if opts.dump: if not quiet: outfile.write(b'>>>\n') @@ -142,36 +155,60 @@ assert not isstdin visit(opts, dirfiles, outfile) + if __name__ == "__main__": parser = optparse.OptionParser("%prog [options] [filenames]") - parser.add_option("-t", "--type", action="store_true", - help="show file type (file or directory)") - parser.add_option("-m", "--mode", action="store_true", - help="show file mode") - parser.add_option("-l", "--links", action="store_true", - help="show number of links") - parser.add_option("-s", "--size", action="store_true", - help="show size of file") - parser.add_option("-n", "--newer", action="store", - help="check if file is newer (or same)") - parser.add_option("-r", "--recurse", action="store_true", - help="recurse into directories") - parser.add_option("-S", "--sha1", action="store_true", - help="show sha1 hash of the content") - parser.add_option("", "--sha256", action="store_true", - help="show sha256 hash of the content") - parser.add_option("-M", "--md5", action="store_true", - help="show md5 hash of the content") - parser.add_option("-D", "--dump", action="store_true", - help="dump file content") - parser.add_option("-H", "--hexdump", action="store_true", - help="hexdump file content") - parser.add_option("-B", "--bytes", type="int", - help="number of characters to dump") - parser.add_option("-L", "--lines", type="int", - help="number of lines to dump") - parser.add_option("-q", "--quiet", action="store_true", - help="no default output") + parser.add_option( + "-t", + "--type", + action="store_true", + help="show file type (file or directory)", + ) + parser.add_option( + "-m", "--mode", action="store_true", help="show file mode" + ) + parser.add_option( + "-l", "--links", action="store_true", help="show number of links" + ) + parser.add_option( + "-s", "--size", action="store_true", help="show size of file" + ) + parser.add_option( + "-n", "--newer", action="store", help="check if file is newer (or same)" + ) + parser.add_option( + "-r", "--recurse", action="store_true", help="recurse into directories" + ) + parser.add_option( + "-S", + "--sha1", + action="store_true", + help="show sha1 hash of the content", + ) + parser.add_option( + "", + "--sha256", + action="store_true", + help="show sha256 hash of the content", + ) + parser.add_option( + "-M", "--md5", action="store_true", help="show md5 hash of the content" + ) + parser.add_option( + "-D", "--dump", action="store_true", help="dump file content" + ) + parser.add_option( + "-H", "--hexdump", action="store_true", help="hexdump file content" + ) + parser.add_option( + "-B", "--bytes", type="int", help="number of characters to dump" + ) + parser.add_option( + "-L", "--lines", type="int", help="number of lines to dump" + ) + parser.add_option( + "-q", "--quiet", action="store_true", help="no default output" + ) (opts, filenames) = parser.parse_args(sys.argv[1:]) if not filenames: filenames = ['-'] diff --git a/tests/hghave b/tests/hghave --- a/tests/hghave +++ b/tests/hghave @@ -13,11 +13,13 @@ checks = hghave.checks + def list_features(): for name, feature in sorted(checks.items()): desc = feature[1] print(name + ':', desc) + def test_features(): failed = 0 for name, feature in checks.items(): @@ -29,11 +31,15 @@ failed += 1 return failed + parser = optparse.OptionParser("%prog [options] [features]") -parser.add_option("--test-features", action="store_true", - help="test available features") -parser.add_option("--list-features", action="store_true", - help="list available features") +parser.add_option( + "--test-features", action="store_true", help="test available features" +) +parser.add_option( + "--list-features", action="store_true", help="list available features" +) + def _loadaddon(): if 'TESTDIR' in os.environ: @@ -49,13 +55,16 @@ sys.path.insert(0, path) try: import hghaveaddon + assert hghaveaddon # silence pyflakes except BaseException as inst: - sys.stderr.write('failed to import hghaveaddon.py from %r: %s\n' - % (path, inst)) + sys.stderr.write( + 'failed to import hghaveaddon.py from %r: %s\n' % (path, inst) + ) sys.exit(2) sys.path.pop(0) + if __name__ == '__main__': options, args = parser.parse_args() _loadaddon()