Mercurial > hgrepos > DevTools > mercurial-extensions
annotate tests/lib-stat.py @ 413:0ad9dff8835d
Ignore .testtimes in every folder
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 01 Feb 2020 14:54:54 +0100 |
| parents | 379050873141 |
| children |
| rev | line source |
|---|---|
|
278
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
1 """Cross-platform file modification check. |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
2 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
3 This is because the stat(1) utility has incompatible cross-platform usage. |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
4 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
5 Usage: lib-stat.py [ OPTIONS ] FILE ... |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
6 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
7 Options: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
8 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
9 -c TS, --check=TS Assert that the given timestamp TS matches the given |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
10 FILE's modtime |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
11 -d TS, --differs=TS Assert that the given timestamp TS differs from the |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
12 given FILE's modtime |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
13 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
14 If no option is given print the modification time for each FILE to stdout. |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
15 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
16 """ |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
17 |
|
273
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
18 from __future__ import absolute_import, print_function |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
19 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
20 |
|
278
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
21 import datetime |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
22 import getopt |
|
273
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
23 import os |
|
278
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
24 import sys |
|
273
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
25 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
26 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
27 class FloatTimesInStat(object): |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
28 """Context manager to ensure that stat returns float values. |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
29 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
30 For 3.7 <= Mercurial < 4.6: Mercurial calls :func:`os.stat_float_times` |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
31 for `stat` and friends to return :class:`int` values. |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
32 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
33 Temporarily fix this. |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
34 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
35 """ |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
36 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
37 __slots__ = ("_do_reset",) |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
38 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
39 def __init__(self): |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
40 self._do_reset = False |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
41 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
42 def __enter__(self): |
|
408
379050873141
PY3: Later PY3 versions do not have os.stat_float_times(): check whether it exists before using it
Franz Glasner <fzglas.hg@dom66.de>
parents:
278
diff
changeset
|
43 if hasattr(os, "stat_float_times"): |
|
379050873141
PY3: Later PY3 versions do not have os.stat_float_times(): check whether it exists before using it
Franz Glasner <fzglas.hg@dom66.de>
parents:
278
diff
changeset
|
44 if not os.stat_float_times(): |
|
379050873141
PY3: Later PY3 versions do not have os.stat_float_times(): check whether it exists before using it
Franz Glasner <fzglas.hg@dom66.de>
parents:
278
diff
changeset
|
45 os.stat_float_times(True) |
|
379050873141
PY3: Later PY3 versions do not have os.stat_float_times(): check whether it exists before using it
Franz Glasner <fzglas.hg@dom66.de>
parents:
278
diff
changeset
|
46 self._do_reset = True |
|
273
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
47 return self |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
48 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
49 def __exit__(self, *args): |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
50 if self._do_reset: |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
51 os.stat_float_times(False) |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
52 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
53 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
54 def to_isoformat(t): |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
55 """Return the POSIX timestamp `t` formatted in full ISO format. |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
56 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
57 `t` is expected to be in the UTC timezone. |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
58 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
59 """ |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
60 dt = datetime.datetime.utcfromtimestamp(t) |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
61 if dt.utcoffset() is None: |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
62 return dt.isoformat() + "Z" |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
63 else: |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
64 return dt.isoformat() |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
65 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
66 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
67 def main(): |
|
278
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
68 opt_check = None |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
69 opt_differs = None |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
70 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
71 opts, args = getopt.getopt(sys.argv[1:], |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
72 "c:d:", |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
73 ["check=", |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
74 "differs="]) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
75 for opt, val in opts: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
76 if opt in ("-c", "--check"): |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
77 opt_check = val |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
78 elif opt in ("-d", "--differs"): |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
79 opt_differs = val |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
80 else: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
81 assert False |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
82 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
83 if opt_check: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
84 with FloatTimesInStat(): |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
85 for f in args: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
86 st = os.lstat(f) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
87 tss = to_isoformat(st.st_mtime) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
88 if tss != opt_check: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
89 print( |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
90 "mtime does not match for file `{filename}': expected {expected}, current: {current}".format( |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
91 filename=f, |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
92 expected=opt_check, |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
93 current=tss), |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
94 file=sys.stderr) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
95 return 1 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
96 elif opt_differs: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
97 with FloatTimesInStat(): |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
98 for f in args: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
99 st = os.lstat(f) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
100 tss = to_isoformat(st.st_mtime) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
101 if tss == opt_differs: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
102 print( |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
103 "mtime does not differ for file `{filename}': {timestamp}".format( |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
104 filename=f, |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
105 timestamp=tss), |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
106 file=sys.stderr) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
107 return 1 |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
108 else: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
109 with FloatTimesInStat(): |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
110 for f in args: |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
111 st = os.lstat(f) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
112 print(to_isoformat(st.st_mtime)) |
|
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
113 return 0 |
|
273
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
114 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
115 |
|
6abd41f7d879
Unit-tests for almost all currently implemented features of the timestamps extension.
Franz Glasner <hg@dom66.de>
parents:
diff
changeset
|
116 if __name__ == "__main__": |
|
278
7ec353866f70
Extend the lib-stat.py script to be able to assert timestamp differences.
Franz Glasner <hg@dom66.de>
parents:
273
diff
changeset
|
117 sys.exit(main()) |
