Mercurial > hg
annotate tests/f @ 42943:5fadf6103790
remotefilelog: replace repack lock to solve race condition
2c74337e6483 reduced the probability of race-conditions when starting
background repack and prefetch and we saw the difference in our CI instance
with all failures disappearing except one where one call to waitonrepack seems
to returns too early.
I'm not sure what exactly goes wrong but I realized that while the prefetch
operation uses a standard Mercurial lock, the repack operation is using a
custom lock based on `fcntl.flock` on available platforms. As `extutil.flock`
fallback on traditional Mercurial locks on other platforms and the tests are
stable on my laptop, our CI environment and GCC112, I'm sending this patch to
standardize the behavior across environments.
Differential Revision: https://phab.mercurial-scm.org/D6844
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 11 Sep 2019 17:41:13 +0200 |
parents | da1629c7dda1 |
children | 47ef023d0165 |
rev | line source |
---|---|
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
2 |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
3 """ |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
4 Utility for inspecting files in various ways. |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
5 |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
6 This tool is like the collection of tools found in a unix environment but are |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
7 cross platform and stable and suitable for our needs in the test suite. |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
8 |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
9 This can be used instead of tools like: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
10 [ |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
11 dd |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
12 find |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
13 head |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
14 hexdump |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
15 ls |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
16 md5sum |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
17 readlink |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
18 sha1sum |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
19 stat |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
20 tail |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
21 test |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
22 readlink.py |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
23 md5sum.py |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
24 """ |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
25 |
29160
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
26 from __future__ import absolute_import |
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
27 |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
28 import binascii |
29160
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
29 import glob |
29233
318534bb5dfd
tests: make 'f' utility import hashlib unconditionally
Yuya Nishihara <yuya@tcha.org>
parents:
29230
diff
changeset
|
30 import hashlib |
29160
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
31 import optparse |
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
32 import os |
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
33 import re |
0362605b82cf
py3: make tests/f use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28046
diff
changeset
|
34 import sys |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
35 |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
36 # Python 3 adapters |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
37 ispy3 = (sys.version_info[0] >= 3) |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
38 if ispy3: |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
39 def iterbytes(s): |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
40 for i in range(len(s)): |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
41 yield s[i:i + 1] |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
42 else: |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
43 iterbytes = iter |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
44 |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
45 def visit(opts, filenames, outfile): |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
46 """Process filenames in the way specified in opts, writing output to |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
47 outfile.""" |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
48 for f in sorted(filenames): |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
49 isstdin = f == '-' |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
50 if not isstdin and not os.path.lexists(f): |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
51 outfile.write(b'%s: file not found\n' % f.encode('utf-8')) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
52 continue |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
53 quiet = opts.quiet and not opts.recurse or isstdin |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
54 isdir = os.path.isdir(f) |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
55 islink = os.path.islink(f) |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
56 isfile = os.path.isfile(f) and not islink |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
57 dirfiles = None |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
58 content = None |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
59 facts = [] |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
60 if isfile: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
61 if opts.type: |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
62 facts.append(b'file') |
35472
c1f7037c2ded
tests: teach `f` to handle sha256 checksums
Matt Harbison <matt_harbison@yahoo.com>
parents:
35471
diff
changeset
|
63 if any((opts.hexdump, opts.dump, opts.md5, opts.sha1, opts.sha256)): |
36948
0585337ea787
cleanup: fix some latent open(path).read() et al calls we previously missed
Augie Fackler <augie@google.com>
parents:
36261
diff
changeset
|
64 with open(f, 'rb') as fobj: |
0585337ea787
cleanup: fix some latent open(path).read() et al calls we previously missed
Augie Fackler <augie@google.com>
parents:
36261
diff
changeset
|
65 content = fobj.read() |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
66 elif islink: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
67 if opts.type: |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
68 facts.append(b'link') |
40246
be0a5d2d5c78
tests: fix last failure in test-tools.t
Augie Fackler <augie@google.com>
parents:
38364
diff
changeset
|
69 content = os.readlink(f).encode('utf8') |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
70 elif isstdin: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
71 content = getattr(sys.stdin, 'buffer', sys.stdin).read() |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
72 if opts.size: |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
73 facts.append(b'size=%d' % len(content)) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
74 elif isdir: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
75 if opts.recurse or opts.type: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
76 dirfiles = glob.glob(f + '/*') |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
77 facts.append(b'directory with %d files' % len(dirfiles)) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
78 elif opts.type: |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
79 facts.append(b'type unknown') |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
80 if not isstdin: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
81 stat = os.lstat(f) |
23911
593a5cd709a2
tests: teach f not to report directory size
Matt Mackall <mpm@selenic.com>
parents:
23860
diff
changeset
|
82 if opts.size and not isdir: |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
83 facts.append(b'size=%d' % stat.st_size) |
23912
7d0aa6269ece
tests: teach f not to report symlink mode bits
Matt Mackall <mpm@selenic.com>
parents:
23911
diff
changeset
|
84 if opts.mode and not islink: |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
85 facts.append(b'mode=%o' % (stat.st_mode & 0o777)) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
86 if opts.links: |
38364
06c85cbd6824
py3: use '%d' for os.stat_result.st_nlink instead of '%s'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36948
diff
changeset
|
87 facts.append(b'links=%d' % stat.st_nlink) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
88 if opts.newer: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
89 # mtime might be in whole seconds so newer file might be same |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
90 if stat.st_mtime >= os.stat(opts.newer).st_mtime: |
40306
da1629c7dda1
f: fix a Python 3 bytes/string issue
Augie Fackler <augie@google.com>
parents:
40246
diff
changeset
|
91 facts.append(b'newer than %s' % opts.newer.encode( |
da1629c7dda1
f: fix a Python 3 bytes/string issue
Augie Fackler <augie@google.com>
parents:
40246
diff
changeset
|
92 'utf8', 'replace')) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
93 else: |
40306
da1629c7dda1
f: fix a Python 3 bytes/string issue
Augie Fackler <augie@google.com>
parents:
40246
diff
changeset
|
94 facts.append(b'older than %s' % opts.newer.encode( |
da1629c7dda1
f: fix a Python 3 bytes/string issue
Augie Fackler <augie@google.com>
parents:
40246
diff
changeset
|
95 'utf8', 'replace')) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
96 if opts.md5 and content is not None: |
29233
318534bb5dfd
tests: make 'f' utility import hashlib unconditionally
Yuya Nishihara <yuya@tcha.org>
parents:
29230
diff
changeset
|
97 h = hashlib.md5(content) |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
98 facts.append(b'md5=%s' % binascii.hexlify(h.digest())[:opts.bytes]) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
99 if opts.sha1 and content is not None: |
29233
318534bb5dfd
tests: make 'f' utility import hashlib unconditionally
Yuya Nishihara <yuya@tcha.org>
parents:
29230
diff
changeset
|
100 h = hashlib.sha1(content) |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
101 facts.append(b'sha1=%s' % binascii.hexlify(h.digest())[:opts.bytes]) |
35472
c1f7037c2ded
tests: teach `f` to handle sha256 checksums
Matt Harbison <matt_harbison@yahoo.com>
parents:
35471
diff
changeset
|
102 if opts.sha256 and content is not None: |
c1f7037c2ded
tests: teach `f` to handle sha256 checksums
Matt Harbison <matt_harbison@yahoo.com>
parents:
35471
diff
changeset
|
103 h = hashlib.sha256(content) |
36261
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
104 facts.append(b'sha256=%s' % |
c69e78ef2b54
py3: port f to Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35472
diff
changeset
|
105 binascii.hexlify(h.digest())[:opts.bytes]) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
106 if isstdin: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
107 outfile.write(b', '.join(facts) + b'\n') |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
108 elif facts: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
109 outfile.write(b'%s: %s\n' % (f.encode('utf-8'), b', '.join(facts))) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
110 elif not quiet: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
111 outfile.write(b'%s:\n' % f.encode('utf-8')) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
112 if content is not None: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
113 chunk = content |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
114 if not islink: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
115 if opts.lines: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
116 if opts.lines >= 0: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
117 chunk = b''.join(chunk.splitlines(True)[:opts.lines]) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
118 else: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
119 chunk = b''.join(chunk.splitlines(True)[opts.lines:]) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
120 if opts.bytes: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
121 if opts.bytes >= 0: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
122 chunk = chunk[:opts.bytes] |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
123 else: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
124 chunk = chunk[opts.bytes:] |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
125 if opts.hexdump: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
126 for i in range(0, len(chunk), 16): |
28044
e4f70e79a65f
f: add whitespace around operator
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26950
diff
changeset
|
127 s = chunk[i:i + 16] |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
128 outfile.write(b'%04x: %-47s |%s|\n' % |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
129 (i, b' '.join( |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
130 b'%02x' % ord(c) for c in iterbytes(s)), |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
131 re.sub(b'[^ -~]', b'.', s))) |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
132 if opts.dump: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
133 if not quiet: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
134 outfile.write(b'>>>\n') |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
135 outfile.write(chunk) |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
136 if not quiet: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
137 if chunk.endswith(b'\n'): |
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
138 outfile.write(b'<<<\n') |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
139 else: |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
140 outfile.write(b'\n<<< no trailing newline\n') |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
141 if opts.recurse and dirfiles: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
142 assert not isstdin |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
143 visit(opts, dirfiles, outfile) |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
144 |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
145 if __name__ == "__main__": |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
146 parser = optparse.OptionParser("%prog [options] [filenames]") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
147 parser.add_option("-t", "--type", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
148 help="show file type (file or directory)") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
149 parser.add_option("-m", "--mode", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
150 help="show file mode") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
151 parser.add_option("-l", "--links", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
152 help="show number of links") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
153 parser.add_option("-s", "--size", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
154 help="show size of file") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
155 parser.add_option("-n", "--newer", action="store", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
156 help="check if file is newer (or same)") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
157 parser.add_option("-r", "--recurse", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
158 help="recurse into directories") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
159 parser.add_option("-S", "--sha1", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
160 help="show sha1 hash of the content") |
35472
c1f7037c2ded
tests: teach `f` to handle sha256 checksums
Matt Harbison <matt_harbison@yahoo.com>
parents:
35471
diff
changeset
|
161 parser.add_option("", "--sha256", action="store_true", |
c1f7037c2ded
tests: teach `f` to handle sha256 checksums
Matt Harbison <matt_harbison@yahoo.com>
parents:
35471
diff
changeset
|
162 help="show sha256 hash of the content") |
23860
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
163 parser.add_option("-M", "--md5", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
164 help="show md5 hash of the content") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
165 parser.add_option("-D", "--dump", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
166 help="dump file content") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
167 parser.add_option("-H", "--hexdump", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
168 help="hexdump file content") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
169 parser.add_option("-B", "--bytes", type="int", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
170 help="number of characters to dump") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
171 parser.add_option("-L", "--lines", type="int", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
172 help="number of lines to dump") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
173 parser.add_option("-q", "--quiet", action="store_true", |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
174 help="no default output") |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
175 (opts, filenames) = parser.parse_args(sys.argv[1:]) |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
176 if not filenames: |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
177 filenames = ['-'] |
bead0c7b4f68
tests: add 'f' tool for cross platform file operations in the tests
Mads Kiilerich <madski@unity3d.com>
parents:
diff
changeset
|
178 |
34270
3db2365d43e4
tests: update `f` helper script to work on Python 3
Augie Fackler <augie@google.com>
parents:
32898
diff
changeset
|
179 visit(opts, filenames, getattr(sys.stdout, 'buffer', sys.stdout)) |