Mercurial > hg
annotate tests/fakedirstatewritetime.py @ 51487:1a9bdd0e1c44
branchcache: write branchmap in subset inheritance order
This way, we can guarantee a valid subset has been written before touching the
branchmap of another filter.
This is especially useful as we are bout to start deleting outdated branchmap
file.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 08 Mar 2024 15:50:15 +0100 |
parents | 6000f5b25c9b |
children |
rev | line source |
---|---|
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
1 # extension to emulate invoking 'dirstate.write()' at the time |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
2 # specified by '[fakedirstatewritetime] fakenow', only when |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
3 # 'dirstate.write()' is invoked via functions below: |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
4 # |
32812
add613cddcb6
workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com>
parents:
32372
diff
changeset
|
5 # - 'workingctx._poststatusfixup()' (= 'repo.status()') |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
6 # - 'committablectx.markcommitted()' |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
7 |
27283
b38adef652fe
tests/fakedirstatewritetime.py: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26634
diff
changeset
|
8 |
b38adef652fe
tests/fakedirstatewritetime.py: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26634
diff
changeset
|
9 from mercurial import ( |
b38adef652fe
tests/fakedirstatewritetime.py: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26634
diff
changeset
|
10 context, |
47501
8b7e47802deb
dirstate: split dirstatemap in its own file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
11 dirstatemap as dirstatemapmod, |
27283
b38adef652fe
tests/fakedirstatewritetime.py: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26634
diff
changeset
|
12 extensions, |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
27283
diff
changeset
|
13 policy, |
34771
28b7034a916a
configitems: register the test 'fakedirstatewritetime.fakenow' config
Boris Feld <boris.feld@octobus.net>
parents:
32813
diff
changeset
|
14 registrar, |
27283
b38adef652fe
tests/fakedirstatewritetime.py: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26634
diff
changeset
|
15 ) |
48260
269ff8978086
dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents:
48020
diff
changeset
|
16 from mercurial.dirstateutils import timestamp |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36327
diff
changeset
|
17 from mercurial.utils import dateutil |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
18 |
42304
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
19 try: |
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
20 from mercurial import rustext |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
21 |
42304
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
22 rustext.__name__ # force actual import (see hgdemandimport) |
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
23 except ImportError: |
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
24 rustext = None |
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
25 |
34771
28b7034a916a
configitems: register the test 'fakedirstatewritetime.fakenow' config
Boris Feld <boris.feld@octobus.net>
parents:
32813
diff
changeset
|
26 configtable = {} |
28b7034a916a
configitems: register the test 'fakedirstatewritetime.fakenow' config
Boris Feld <boris.feld@octobus.net>
parents:
32813
diff
changeset
|
27 configitem = registrar.configitem(configtable) |
28b7034a916a
configitems: register the test 'fakedirstatewritetime.fakenow' config
Boris Feld <boris.feld@octobus.net>
parents:
32813
diff
changeset
|
28 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
29 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
30 b'fakedirstatewritetime', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
31 b'fakenow', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
32 default=None, |
34771
28b7034a916a
configitems: register the test 'fakedirstatewritetime.fakenow' config
Boris Feld <boris.feld@octobus.net>
parents:
32813
diff
changeset
|
33 ) |
28b7034a916a
configitems: register the test 'fakedirstatewritetime.fakenow' config
Boris Feld <boris.feld@octobus.net>
parents:
32813
diff
changeset
|
34 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
35 parsers = policy.importmod('parsers') |
48020
1194394510ba
rust: Remove the `rustext.parsers` module
Simon Sapin <simon.sapin@octobus.net>
parents:
47674
diff
changeset
|
36 has_rust_dirstate = policy.importrust('dirstate') is not None |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
27283
diff
changeset
|
37 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
38 |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
39 def pack_dirstate(orig, dmap, copymap, pl): |
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
40 return orig(dmap, copymap, pl) |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
41 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
42 |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
43 def fakewrite(ui, func): |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
44 # fake "now" of 'pack_dirstate' only if it is invoked while 'func' |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
45 |
36324
ac04f17b7041
py3: add b'' prefixes in fakedirstatewritetime.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34771
diff
changeset
|
46 fakenow = ui.config(b'fakedirstatewritetime', b'fakenow') |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
47 if not fakenow: |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
48 # Execute original one, if fakenow isn't configured. This is |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
49 # useful to prevent subrepos from executing replaced one, |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
50 # because replacing 'parsers.pack_dirstate' is also effective |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
51 # in subrepos. |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
52 return func() |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
53 |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
54 # parsing 'fakenow' in YYYYmmddHHMM format makes comparison between |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
55 # 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36327
diff
changeset
|
56 fakenow = dateutil.parsedate(fakenow, [b'%Y%m%d%H%M'])[0] |
48398
111098af6356
dirstate-item: add a "second_ambiguous` flag in the mtime tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48392
diff
changeset
|
57 fakenow = timestamp.timestamp((fakenow, 0, False)) |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
58 |
48020
1194394510ba
rust: Remove the `rustext.parsers` module
Simon Sapin <simon.sapin@octobus.net>
parents:
47674
diff
changeset
|
59 if has_rust_dirstate: |
42747
760a7851e9ba
rust-parsers: move parser bindings to their own file and Python module
Raphaël Gomès <rgomes@octobus.net>
parents:
42304
diff
changeset
|
60 # The Rust implementation does not use public parse/pack dirstate |
760a7851e9ba
rust-parsers: move parser bindings to their own file and Python module
Raphaël Gomès <rgomes@octobus.net>
parents:
42304
diff
changeset
|
61 # to prevent conversion round-trips |
47501
8b7e47802deb
dirstate: split dirstatemap in its own file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
62 orig_dirstatemap_write = dirstatemapmod.dirstatemap.write |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
63 wrapper = lambda self, tr, st: orig_dirstatemap_write(self, tr, st) |
47501
8b7e47802deb
dirstate: split dirstatemap in its own file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
64 dirstatemapmod.dirstatemap.write = wrapper |
42304
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
65 |
48379
08b060abd658
dirstate: move "get fs now" in the timestamp utility module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
66 orig_get_fs_now = timestamp.get_fs_now |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
67 wrapper = lambda *args: pack_dirstate(orig_pack_dirstate, *args) |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
68 |
42747
760a7851e9ba
rust-parsers: move parser bindings to their own file and Python module
Raphaël Gomès <rgomes@octobus.net>
parents:
42304
diff
changeset
|
69 orig_module = parsers |
760a7851e9ba
rust-parsers: move parser bindings to their own file and Python module
Raphaël Gomès <rgomes@octobus.net>
parents:
42304
diff
changeset
|
70 orig_pack_dirstate = parsers.pack_dirstate |
760a7851e9ba
rust-parsers: move parser bindings to their own file and Python module
Raphaël Gomès <rgomes@octobus.net>
parents:
42304
diff
changeset
|
71 |
42304
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
72 orig_module.pack_dirstate = wrapper |
48392
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
73 timestamp.get_fs_now = ( |
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
74 lambda *args: fakenow |
434de12918fd
dirstate: remove need_delay logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48379
diff
changeset
|
75 ) # XXX useless for this purpose now |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
76 try: |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
77 return func() |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
78 finally: |
42304
9c6c0f736e1d
rust-dirstate: call parse/pack bindings from Python
Raphaël Gomès <rgomes@octobus.net>
parents:
42295
diff
changeset
|
79 orig_module.pack_dirstate = orig_pack_dirstate |
48379
08b060abd658
dirstate: move "get fs now" in the timestamp utility module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48260
diff
changeset
|
80 timestamp.get_fs_now = orig_get_fs_now |
48020
1194394510ba
rust: Remove the `rustext.parsers` module
Simon Sapin <simon.sapin@octobus.net>
parents:
47674
diff
changeset
|
81 if has_rust_dirstate: |
47501
8b7e47802deb
dirstate: split dirstatemap in its own file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45942
diff
changeset
|
82 dirstatemapmod.dirstatemap.write = orig_dirstatemap_write |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
83 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
84 |
32813
6d73b7ff8f92
workingctx: also pass status tuple into poststatusfixup
Siddharth Agarwal <sid0@fb.com>
parents:
32812
diff
changeset
|
85 def _poststatusfixup(orig, workingctx, status, fixup): |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
86 ui = workingctx.repo().ui |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
87 return fakewrite(ui, lambda: orig(workingctx, status, fixup)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
88 |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
89 |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
90 def markcommitted(orig, committablectx, node): |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
91 ui = committablectx.repo().ui |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
92 return fakewrite(ui, lambda: orig(committablectx, node)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
93 |
25752
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
94 |
815df73abf12
tests: add extension to emulate invoking dirstate.write at the specific time
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
95 def extsetup(ui): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
96 extensions.wrapfunction( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
97 context.workingctx, '_poststatusfixup', _poststatusfixup |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
98 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42747
diff
changeset
|
99 extensions.wrapfunction(context.workingctx, 'markcommitted', markcommitted) |