Mercurial > hg
annotate contrib/testparseutil.py @ 42377:0546ead39a7e stable
manifest: avoid corruption by dropping removed files with pure (issue5801)
Previously, removed files would simply be marked by overwriting the first byte
with NUL and dropping their entry in `self.position`. But no effort was made to
ignore them when compacting the dictionary into text form. This allowed them to
slip into the manifest revision, since the code seems to be trying to minimize
the string operations by copying as large a chunk as possible. As part of this,
compact() walks the existing text based on entries in the `positions` list, and
consumed everything up to the next position entry. This typically resulted in
a ValueError complaining about unsorted manifest entries.
Sometimes it seems that files do get dropped in large repos- it seems to
correspond to there being a new entry that would take the same slot. A much
more trivial problem is that if the only changes were removals, `_compact()`
didn't even run because `__delitem__` doesn't add anything to `self.extradata`.
Now there's an explicit variable to flag this, both to allow `_compact()` to
run, and to avoid searching the manifest in cases where there are no removals.
In practice, this behavior was mostly obscured by the check in fastdelta() which
takes a different path that explicitly drops removed files if there are fewer
than 1000 changes. However, timeless has a repo where after rebasing tens of
commits, a totally different path[1] is taken that bypasses the change count
check and hits this problem.
[1] https://www.mercurial-scm.org/repo/hg/file/2338bdea4474/mercurial/manifest.py#l1511
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 23 May 2019 21:54:24 -0400 |
parents | 99b4c6d73a72 |
children | 5364ba1f796f |
rev | line source |
---|---|
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
1 # testparseutil.py - utilities to parse test script for check tools |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
2 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
3 # Copyright 2018 FUJIWARA Katsunori <foozy@lares.dti.ne.jp> and others |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
4 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
7 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
8 from __future__ import absolute_import, print_function |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
9 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
10 import abc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
11 import re |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
12 import sys |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
13 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
14 #################### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
15 # for Python3 compatibility (almost comes from mercurial/pycompat.py) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
16 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
17 ispy3 = (sys.version_info[0] >= 3) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
18 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
19 def identity(a): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
20 return a |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
21 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
22 def _rapply(f, xs): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
23 if xs is None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
24 # assume None means non-value of optional data |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
25 return xs |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
26 if isinstance(xs, (list, set, tuple)): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
27 return type(xs)(_rapply(f, x) for x in xs) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
28 if isinstance(xs, dict): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
29 return type(xs)((_rapply(f, k), _rapply(f, v)) for k, v in xs.items()) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
30 return f(xs) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
31 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
32 def rapply(f, xs): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
33 if f is identity: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
34 # fast path mainly for py2 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
35 return xs |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
36 return _rapply(f, xs) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
37 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
38 if ispy3: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
39 import builtins |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
40 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
41 # TODO: .buffer might not exist if std streams were replaced; we'll need |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
42 # a silly wrapper to make a bytes stream backed by a unicode one. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
43 stdin = sys.stdin.buffer |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
44 stdout = sys.stdout.buffer |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
45 stderr = sys.stderr.buffer |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
46 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
47 def bytestr(s): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
48 # tiny version of pycompat.bytestr |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
49 return s.encode('latin1') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
50 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
51 def sysstr(s): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
52 if isinstance(s, builtins.str): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
53 return s |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
54 return s.decode(u'latin-1') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
55 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
56 def opentext(f): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
57 return open(f, 'rb') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
58 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
59 stdin = sys.stdin |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
60 stdout = sys.stdout |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
61 stderr = sys.stderr |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
62 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
63 bytestr = str |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
64 sysstr = identity |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
65 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
66 opentext = open |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
67 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
68 def b2s(x): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
69 # convert BYTES elements in "x" to SYSSTR recursively |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
70 return rapply(sysstr, x) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
71 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
72 def writeout(data): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
73 # write "data" in BYTES into stdout |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
74 stdout.write(data) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
75 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
76 def writeerr(data): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
77 # write "data" in BYTES into stderr |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
78 stderr.write(data) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
79 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
80 #################### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
81 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
82 class embeddedmatcher(object): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
83 """Base class to detect embedded code fragments in *.t test script |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
84 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
85 __metaclass__ = abc.ABCMeta |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
86 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
87 def __init__(self, desc): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
88 self.desc = desc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
89 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
90 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
91 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
92 """Examine whether embedded code starts at line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
93 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
94 This can return arbitrary object, and it is used as 'ctx' for |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
95 subsequent method invocations. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
96 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
97 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
98 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
99 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
100 """Examine whether embedded code ends at line""" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
101 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
102 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
103 def isinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
104 """Examine whether line is inside embedded code, if not yet endsat |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
105 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
106 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
107 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
108 def ignores(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
109 """Examine whether detected embedded code should be ignored""" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
110 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
111 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
112 def filename(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
113 """Return filename of embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
114 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
115 If filename isn't specified for embedded code explicitly, this |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
116 returns None. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
117 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
118 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
119 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
120 def codeatstart(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
121 """Return actual code at the start line of embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
122 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
123 This might return None, if the start line doesn't contain |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
124 actual code. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
125 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
126 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
127 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
128 def codeatend(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
129 """Return actual code at the end line of embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
130 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
131 This might return None, if the end line doesn't contain actual |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
132 code. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
133 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
134 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
135 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
136 def codeinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
137 """Return actual code at line inside embedded code""" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
138 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
139 def embedded(basefile, lines, errors, matchers): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
140 """pick embedded code fragments up from given lines |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
141 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
142 This is common parsing logic, which examines specified matchers on |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
143 given lines. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
144 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
145 :basefile: a name of a file, from which lines to be parsed come. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
146 :lines: to be parsed (might be a value returned by "open(basefile)") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
147 :errors: an array, into which messages for detected error are stored |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
148 :matchers: an array of embeddedmatcher objects |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
149 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
150 This function yields '(filename, starts, ends, code)' tuple. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
151 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
152 :filename: a name of embedded code, if it is explicitly specified |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
153 (e.g. "foobar" of "cat >> foobar <<EOF"). |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
154 Otherwise, this is None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
155 :starts: line number (1-origin), at which embedded code starts (inclusive) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
156 :ends: line number (1-origin), at which embedded code ends (exclusive) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
157 :code: extracted embedded code, which is single-stringified |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
158 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
159 >>> class ambigmatcher(object): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
160 ... # mock matcher class to examine implementation of |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
161 ... # "ambiguous matching" corner case |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
162 ... def __init__(self, desc, matchfunc): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
163 ... self.desc = desc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
164 ... self.matchfunc = matchfunc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
165 ... def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
166 ... return self.matchfunc(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
167 >>> ambig1 = ambigmatcher(b'ambiguous #1', |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
168 ... lambda l: l.startswith(b' $ cat ')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
169 >>> ambig2 = ambigmatcher(b'ambiguous #2', |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
170 ... lambda l: l.endswith(b'<< EOF\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
171 >>> lines = [b' $ cat > foo.py << EOF\\n'] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
172 >>> errors = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
173 >>> matchers = [ambig1, ambig2] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
174 >>> list(t for t in embedded(b'<dummy>', lines, errors, matchers)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
175 [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
176 >>> b2s(errors) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
177 ['<dummy>:1: ambiguous line for "ambiguous #1", "ambiguous #2"'] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
178 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
179 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
180 matcher = None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
181 ctx = filename = code = startline = None # for pyflakes |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
182 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
183 for lineno, line in enumerate(lines, 1): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
184 if not line.endswith(b'\n'): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
185 line += b'\n' # to normalize EOF line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
186 if matcher: # now, inside embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
187 if matcher.endsat(ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
188 codeatend = matcher.codeatend(ctx, line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
189 if codeatend is not None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
190 code.append(codeatend) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
191 if not matcher.ignores(ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
192 yield (filename, startline, lineno, b''.join(code)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
193 matcher = None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
194 # DO NOT "continue", because line might start next fragment |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
195 elif not matcher.isinside(ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
196 # this is an error of basefile |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
197 # (if matchers are implemented correctly) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
198 errors.append(b'%s:%d: unexpected line for "%s"' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
199 % (basefile, lineno, matcher.desc)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
200 # stop extracting embedded code by current 'matcher', |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
201 # because appearance of unexpected line might mean |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
202 # that expected end-of-embedded-code line might never |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
203 # appear |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
204 matcher = None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
205 # DO NOT "continue", because line might start next fragment |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
206 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
207 code.append(matcher.codeinside(ctx, line)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
208 continue |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
209 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
210 # examine whether current line starts embedded code or not |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
211 assert not matcher |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
212 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
213 matched = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
214 for m in matchers: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
215 ctx = m.startsat(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
216 if ctx: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
217 matched.append((m, ctx)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
218 if matched: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
219 if len(matched) > 1: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
220 # this is an error of matchers, maybe |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
221 errors.append(b'%s:%d: ambiguous line for %s' % |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
222 (basefile, lineno, |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
223 b', '.join([b'"%s"' % m.desc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
224 for m, c in matched]))) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
225 # omit extracting embedded code, because choosing |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
226 # arbitrary matcher from matched ones might fail to |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
227 # detect the end of embedded code as expected. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
228 continue |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
229 matcher, ctx = matched[0] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
230 filename = matcher.filename(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
231 code = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
232 codeatstart = matcher.codeatstart(ctx, line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
233 if codeatstart is not None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
234 code.append(codeatstart) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
235 startline = lineno |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
236 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
237 startline = lineno + 1 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
238 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
239 if matcher: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
240 # examine whether EOF ends embedded code, because embedded |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
241 # code isn't yet ended explicitly |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
242 if matcher.endsat(ctx, b'\n'): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
243 codeatend = matcher.codeatend(ctx, b'\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
244 if codeatend is not None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
245 code.append(codeatend) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
246 if not matcher.ignores(ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
247 yield (filename, startline, lineno + 1, b''.join(code)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
248 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
249 # this is an error of basefile |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
250 # (if matchers are implemented correctly) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
251 errors.append(b'%s:%d: unexpected end of file for "%s"' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
252 % (basefile, lineno, matcher.desc)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
253 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
254 # heredoc limit mark to ignore embedded code at check-code.py or so |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
255 heredocignorelimit = b'NO_CHECK_EOF' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
256 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
257 # the pattern to match against cases below, and to return a limit mark |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
258 # string as 'lname' group |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
259 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
260 # - << LIMITMARK |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
261 # - << "LIMITMARK" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
262 # - << 'LIMITMARK' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
263 heredoclimitpat = br'\s*<<\s*(?P<lquote>["\']?)(?P<limit>\w+)(?P=lquote)' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
264 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
265 class fileheredocmatcher(embeddedmatcher): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
266 """Detect "cat > FILE << LIMIT" style embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
267 |
41552
99b4c6d73a72
testparseutil: escape backslash in docstring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40093
diff
changeset
|
268 >>> matcher = fileheredocmatcher(b'heredoc .py file', br'[^<]+\\.py') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
269 >>> b2s(matcher.startsat(b' $ cat > file.py << EOF\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
270 ('file.py', ' > EOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
271 >>> b2s(matcher.startsat(b' $ cat >>file.py <<EOF\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
272 ('file.py', ' > EOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
273 >>> b2s(matcher.startsat(b' $ cat> \\x27any file.py\\x27<< "EOF"\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
274 ('any file.py', ' > EOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
275 >>> b2s(matcher.startsat(b" $ cat > file.py << 'ANYLIMIT'\\n")) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
276 ('file.py', ' > ANYLIMIT\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
277 >>> b2s(matcher.startsat(b' $ cat<<ANYLIMIT>"file.py"\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
278 ('file.py', ' > ANYLIMIT\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
279 >>> start = b' $ cat > file.py << EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
280 >>> ctx = matcher.startsat(start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
281 >>> matcher.codeatstart(ctx, start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
282 >>> b2s(matcher.filename(ctx)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
283 'file.py' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
284 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
285 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
286 >>> inside = b' > foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
287 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
288 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
289 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
290 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
291 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
292 'foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
293 >>> end = b' > EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
294 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
295 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
296 >>> matcher.codeatend(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
297 >>> matcher.endsat(ctx, b' > EOFEOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
298 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
299 >>> ctx = matcher.startsat(b' $ cat > file.py << NO_CHECK_EOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
300 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
301 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
302 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
303 _prefix = b' > ' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
304 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
305 def __init__(self, desc, namepat): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
306 super(fileheredocmatcher, self).__init__(desc) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
307 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
308 # build the pattern to match against cases below (and ">>" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
309 # variants), and to return a target filename string as 'name' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
310 # group |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
311 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
312 # - > NAMEPAT |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
313 # - > "NAMEPAT" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
314 # - > 'NAMEPAT' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
315 namepat = (br'\s*>>?\s*(?P<nquote>["\']?)(?P<name>%s)(?P=nquote)' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
316 % namepat) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
317 self._fileres = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
318 # "cat > NAME << LIMIT" case |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
319 re.compile(br' \$ \s*cat' + namepat + heredoclimitpat), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
320 # "cat << LIMIT > NAME" case |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
321 re.compile(br' \$ \s*cat' + heredoclimitpat + namepat), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
322 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
323 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
324 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
325 # ctx is (filename, END-LINE-OF-EMBEDDED-CODE) tuple |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
326 for filere in self._fileres: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
327 matched = filere.match(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
328 if matched: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
329 return (matched.group('name'), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
330 b' > %s\n' % matched.group('limit')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
331 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
332 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
333 return ctx[1] == line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
334 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
335 def isinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
336 return line.startswith(self._prefix) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
337 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
338 def ignores(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
339 return b' > %s\n' % heredocignorelimit == ctx[1] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
340 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
341 def filename(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
342 return ctx[0] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
343 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
344 def codeatstart(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
345 return None # no embedded code at start line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
346 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
347 def codeatend(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
348 return None # no embedded code at end line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
349 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
350 def codeinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
351 return line[len(self._prefix):] # strip prefix |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
352 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
353 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
354 # for embedded python script |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
355 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
356 class pydoctestmatcher(embeddedmatcher): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
357 """Detect ">>> code" style embedded python code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
358 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
359 >>> matcher = pydoctestmatcher() |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
360 >>> startline = b' >>> foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
361 >>> matcher.startsat(startline) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
362 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
363 >>> matcher.startsat(b' ... foo = 1\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
364 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
365 >>> ctx = matcher.startsat(startline) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
366 >>> matcher.filename(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
367 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
368 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
369 >>> b2s(matcher.codeatstart(ctx, startline)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
370 'foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
371 >>> inside = b' >>> foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
372 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
373 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
374 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
375 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
376 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
377 'foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
378 >>> inside = b' ... foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
379 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
380 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
381 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
382 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
383 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
384 'foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
385 >>> inside = b' expected output\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
386 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
387 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
388 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
389 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
390 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
391 '\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
392 >>> inside = b' \\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
393 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
394 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
395 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
396 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
397 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
398 '\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
399 >>> end = b' $ foo bar\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
400 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
401 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
402 >>> matcher.codeatend(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
403 >>> end = b'\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
404 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
405 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
406 >>> matcher.codeatend(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
407 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
408 _prefix = b' >>> ' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
409 _prefixre = re.compile(br' (>>>|\.\.\.) ') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
410 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
411 # If a line matches against not _prefixre but _outputre, that line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
412 # is "an expected output line" (= not a part of code fragment). |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
413 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
414 # Strictly speaking, a line matching against "(#if|#else|#endif)" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
415 # is also treated similarly in "inline python code" semantics by |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
416 # run-tests.py. But "directive line inside inline python code" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
417 # should be rejected by Mercurial reviewers. Therefore, this |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
418 # regexp does not matche against such directive lines. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
419 _outputre = re.compile(br' $| [^$]') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
420 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
421 def __init__(self): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
422 super(pydoctestmatcher, self).__init__(b"doctest style python code") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
423 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
424 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
425 # ctx is "True" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
426 return line.startswith(self._prefix) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
427 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
428 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
429 return not (self._prefixre.match(line) or self._outputre.match(line)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
430 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
431 def isinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
432 return True # always true, if not yet ended |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
433 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
434 def ignores(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
435 return False # should be checked always |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
436 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
437 def filename(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
438 return None # no filename |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
439 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
440 def codeatstart(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
441 return line[len(self._prefix):] # strip prefix ' >>> '/' ... ' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
442 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
443 def codeatend(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
444 return None # no embedded code at end line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
445 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
446 def codeinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
447 if self._prefixre.match(line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
448 return line[len(self._prefix):] # strip prefix ' >>> '/' ... ' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
449 return b'\n' # an expected output line is treated as an empty line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
450 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
451 class pyheredocmatcher(embeddedmatcher): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
452 """Detect "python << LIMIT" style embedded python code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
453 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
454 >>> matcher = pyheredocmatcher() |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
455 >>> b2s(matcher.startsat(b' $ python << EOF\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
456 ' > EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
457 >>> b2s(matcher.startsat(b' $ $PYTHON <<EOF\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
458 ' > EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
459 >>> b2s(matcher.startsat(b' $ "$PYTHON"<< "EOF"\\n')) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
460 ' > EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
461 >>> b2s(matcher.startsat(b" $ $PYTHON << 'ANYLIMIT'\\n")) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
462 ' > ANYLIMIT\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
463 >>> matcher.startsat(b' $ "$PYTHON" < EOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
464 >>> start = b' $ python << EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
465 >>> ctx = matcher.startsat(start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
466 >>> matcher.codeatstart(ctx, start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
467 >>> matcher.filename(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
468 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
469 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
470 >>> inside = b' > foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
471 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
472 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
473 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
474 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
475 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
476 'foo = 1\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
477 >>> end = b' > EOF\\n' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
478 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
479 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
480 >>> matcher.codeatend(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
481 >>> matcher.endsat(ctx, b' > EOFEOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
482 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
483 >>> ctx = matcher.startsat(b' $ python << NO_CHECK_EOF\\n') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
484 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
485 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
486 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
487 _prefix = b' > ' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
488 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
489 _startre = re.compile(br' \$ (\$PYTHON|"\$PYTHON"|python).*' + |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
490 heredoclimitpat) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
491 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
492 def __init__(self): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
493 super(pyheredocmatcher, self).__init__(b"heredoc python invocation") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
494 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
495 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
496 # ctx is END-LINE-OF-EMBEDDED-CODE |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
497 matched = self._startre.match(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
498 if matched: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
499 return b' > %s\n' % matched.group('limit') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
500 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
501 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
502 return ctx == line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
503 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
504 def isinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
505 return line.startswith(self._prefix) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
506 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
507 def ignores(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
508 return b' > %s\n' % heredocignorelimit == ctx |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
509 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
510 def filename(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
511 return None # no filename |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
512 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
513 def codeatstart(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
514 return None # no embedded code at start line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
515 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
516 def codeatend(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
517 return None # no embedded code at end line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
518 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
519 def codeinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
520 return line[len(self._prefix):] # strip prefix |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
521 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
522 _pymatchers = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
523 pydoctestmatcher(), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
524 pyheredocmatcher(), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
525 # use '[^<]+' instead of '\S+', in order to match against |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
526 # paths including whitespaces |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
527 fileheredocmatcher(b'heredoc .py file', br'[^<]+\.py'), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
528 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
529 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
530 def pyembedded(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
531 return embedded(basefile, lines, errors, _pymatchers) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
532 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
533 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
534 # for embedded shell script |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
535 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
536 _shmatchers = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
537 # use '[^<]+' instead of '\S+', in order to match against |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
538 # paths including whitespaces |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
539 fileheredocmatcher(b'heredoc .sh file', br'[^<]+\.sh'), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
540 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
541 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
542 def shembedded(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
543 return embedded(basefile, lines, errors, _shmatchers) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
544 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
545 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
546 # for embedded hgrc configuration |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
547 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
548 _hgrcmatchers = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
549 # use '[^<]+' instead of '\S+', in order to match against |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
550 # paths including whitespaces |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
551 fileheredocmatcher(b'heredoc hgrc file', |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
552 br'(([^/<]+/)+hgrc|\$HGRCPATH|\${HGRCPATH})'), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
553 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
554 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
555 def hgrcembedded(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
556 return embedded(basefile, lines, errors, _hgrcmatchers) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
557 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
558 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
559 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
560 if __name__ == "__main__": |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
561 import optparse |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
562 import sys |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
563 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
564 def showembedded(basefile, lines, embeddedfunc, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
565 errors = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
566 for name, starts, ends, code in embeddedfunc(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
567 if not name: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
568 name = b'<anonymous>' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
569 writeout(b"%s:%d: %s starts\n" % (basefile, starts, name)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
570 if opts.verbose and code: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
571 writeout(b" |%s\n" % |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
572 b"\n |".join(l for l in code.splitlines())) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
573 writeout(b"%s:%d: %s ends\n" % (basefile, ends, name)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
574 for e in errors: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
575 writeerr(b"%s\n" % e) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
576 return len(errors) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
577 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
578 def applyembedded(args, embeddedfunc, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
579 ret = 0 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
580 if args: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
581 for f in args: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
582 with opentext(f) as fp: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
583 if showembedded(bytestr(f), fp, embeddedfunc, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
584 ret = 1 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
585 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
586 lines = [l for l in stdin.readlines()] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
587 if showembedded(b'<stdin>', lines, embeddedfunc, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
588 ret = 1 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
589 return ret |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
590 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
591 commands = {} |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
592 def command(name, desc): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
593 def wrap(func): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
594 commands[name] = (desc, func) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
595 return wrap |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
596 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
597 @command("pyembedded", "detect embedded python script") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
598 def pyembeddedcmd(args, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
599 return applyembedded(args, pyembedded, opts) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
600 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
601 @command("shembedded", "detect embedded shell script") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
602 def shembeddedcmd(args, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
603 return applyembedded(args, shembedded, opts) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
604 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
605 @command("hgrcembedded", "detect embedded hgrc configuration") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
606 def hgrcembeddedcmd(args, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
607 return applyembedded(args, hgrcembedded, opts) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
608 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
609 availablecommands = "\n".join([" - %s: %s" % (key, value[0]) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
610 for key, value in commands.items()]) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
611 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
612 parser = optparse.OptionParser("""%prog COMMAND [file ...] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
613 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
614 Pick up embedded code fragments from given file(s) or stdin, and list |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
615 up start/end lines of them in standard compiler format |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
616 ("FILENAME:LINENO:"). |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
617 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
618 Available commands are: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
619 """ + availablecommands + """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
620 """) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
621 parser.add_option("-v", "--verbose", |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
622 help="enable additional output (e.g. actual code)", |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
623 action="store_true") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
624 (opts, args) = parser.parse_args() |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
625 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
626 if not args or args[0] not in commands: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
627 parser.print_help() |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
628 sys.exit(255) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
629 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
630 sys.exit(commands[args[0]][1](args[1:], opts)) |