annotate tests/test-minifileset.py @ 49269:395f28064826

worker: avoid potential partial write of pickled data Previously, the code wrote the pickled data using os.write(). However, os.write() can write less bytes than passed to it. To trigger the problem, the pickled data had to be larger than 2147479552 bytes on my system. Instead, open a file object and pass it to pickle.dump(). This also has the advantage that it doesn’t buffer the whole pickled data in memory. Note that the opened file must be buffered because pickle doesn’t support unbuffered streams because unbuffered streams’ write() method might write less bytes than passed to it (like os.write()) but pickle.dump() relies on that all bytes are written (see https://github.com/python/cpython/issues/93050). The side effect of using a file object and a with statement is that wfd is explicitly closed now while it seems like before it was implicitly closed by process exit.
author Manuel Jacob <me@manueljacob.de>
date Sun, 22 May 2022 03:50:34 +0200
parents 6000f5b25c9b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
35616
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
1 from mercurial import minifileset
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
2
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
3
35616
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
4 def check(text, truecases, falsecases):
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
5 f = minifileset.compile(text)
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
6 for args in truecases:
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
7 if not f(*args):
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
8 print('unexpected: %r should include %r' % (text, args))
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
9 for args in falsecases:
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
10 if f(*args):
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
11 print('unexpected: %r should exclude %r' % (text, args))
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
12
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
13
37877
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
14 check(b'all()', [(b'a.php', 123), (b'b.txt', 0)], [])
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
15 check(b'none()', [], [(b'a.php', 123), (b'b.txt', 0)])
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
16 check(b'!!!!((!(!!all())))', [], [(b'a.php', 123), (b'b.txt', 0)])
35616
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
17
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
18 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
19 b'"path:a" & (**.b | **.c)', [(b'a/b.b', 0), (b'a/c.c', 0)], [(b'b/c.c', 0)]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
20 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
21 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
22 b'(path:a & **.b) | **.c', [(b'a/b.b', 0), (b'a/c.c', 0), (b'b/c.c', 0)], []
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
23 )
35616
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
24
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
25 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
26 b'**.bin - size("<20B")', [(b'b.bin', 21)], [(b'a.bin', 11), (b'b.txt', 21)]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
27 )
35616
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
28
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
29 check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
30 b'!!**.bin or size(">20B") + "path:bin" or !size(">10")',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
31 [(b'a.bin', 11), (b'b.txt', 21), (b'bin/abc', 11)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
32 [(b'a.notbin', 11), (b'b.txt', 11), (b'bin2/abc', 11)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
33 )
35616
706aa203b396 fileset: add a lightweight file filtering language
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
34
37877
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
35 check(
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
36 b'(**.php and size(">10KB")) | **.zip | ("path:bin" & !"path:bin/README") '
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
37 b' | size(">1M")',
2cdae2582d8a tests: port test-minifileset.py to Python 3
Augie Fackler <augie@google.com>
parents: 35741
diff changeset
38 [(b'a.php', 15000), (b'a.zip', 0), (b'bin/a', 0), (b'bin/README', 1e7)],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
39 [(b'a.php', 5000), (b'b.zip2', 0), (b't/bin/a', 0), (b'bin/README', 1)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 40098
diff changeset
40 )