##// END OF EJS Templates
phases: avoid N² behavior in `advanceboundary`...
phases: avoid N² behavior in `advanceboundary` We allowed duplicated entries in the deque, which each entry could potentially insert all its ancestors. So advancing boundary for the full repository would mean each revision would walk all its ancestors, resulting in O(N²) iteration. For repository of any decent size, N² is quickly insane. We introduce a simple set to avoid this and get back to reasonable performance.

File last commit:

r49730:6000f5b2 default
r52398:c9ceb4f6 6.7 stable
Show More
docchecker
83 lines | 1.9 KiB | text/plain | TextLexer
Gregory Szorc
global: use python3 in shebangs...
r46434 #!/usr/bin/env python3
timeless
docchecker: introduce a way to check for poor markup...
r27730 #
# docchecker - look for problematic markup
#
# Copyright 2016 timeless <timeless@mozdev.org> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Pulkit Goyal
py3: make doc/docchecker use absolute_import
r29168
Matt Harbison
py3: byteify docchecker...
r41042 import os
Pulkit Goyal
py3: make doc/docchecker use absolute_import
r29168 import re
timeless
docchecker: introduce a way to check for poor markup...
r27730 import sys
Matt Harbison
py3: byteify docchecker...
r41042 try:
import msvcrt
Gregory Szorc
black: blacken scripts...
r44089
Matt Harbison
py3: byteify docchecker...
r41042 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
except ImportError:
pass
stdout = getattr(sys.stdout, 'buffer', sys.stdout)
leadingline = re.compile(br'(^\s*)(\S.*)$')
timeless
docchecker: report context line at most once
r28810
checks = [
Gregory Szorc
black: blacken scripts...
r44089 (
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 ... "..."''',
),
timeless
docchecker: report context line at most once
r28810 ]
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 def check(line):
timeless
docchecker: report context line at most once
r28810 messages = []
for match, msg in checks:
if re.search(match, line):
messages.append(msg)
if messages:
Matt Harbison
py3: byteify docchecker...
r41042 stdout.write(b'%s\n' % line)
timeless
docchecker: report context line at most once
r28810 for msg in messages:
Matt Harbison
py3: byteify docchecker...
r41042 stdout.write(b'%s\n' % msg)
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 def work(file):
Matt Harbison
py3: byteify docchecker...
r41042 (llead, lline) = (b'', b'')
timeless
docchecker: introduce a way to check for poor markup...
r27730
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 for line in file:
# this section unwraps lines
match = leadingline.match(line)
if not match:
check(lline)
Matt Harbison
py3: byteify docchecker...
r41042 (llead, lline) = (b'', b'')
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 continue
timeless
docchecker: introduce a way to check for poor markup...
r27730
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 lead, line = match.group(1), match.group(2)
Gregory Szorc
black: blacken scripts...
r44089 if lead == llead:
if lline != b'':
Matt Harbison
py3: byteify docchecker...
r41042 lline += b' ' + line
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 else:
lline = line
else:
check(lline)
(llead, lline) = (lead, line)
check(lline)
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 def main():
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 for f in sys.argv[1:]:
try:
Matt Harbison
py3: byteify docchecker...
r41042 with open(f, 'rb') as file:
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 work(file)
except BaseException as e:
Matt Harbison
py3: byteify docchecker...
r41042 sys.stdout.write(r"failed to process %s: %s\n" % (f, e))
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 main()