Mercurial > hg
annotate tests/test-context.py @ 52217:96b113d22b34 stable
rust-update: handle SIGINT from long-running update threads
The current code does not respond to ^C until after the Rust bit is finished
doing its work. This is expected, since Rust holds the GIL for the duration
of the call and does not call `PyErr_CheckSignals`. Freeing the GIL to do our
work does not really improve anything since the Rust threads are still going,
and the only way of cancelling a thread is by making it cooperate.
So we do the following:
- remember the SIGINT handler in hg-cpython and reset it after the call
into core (see inline comment in `update.rs` about this)
- make all update threads watch for a global `AtomicBool` being `true`,
and if so stop their work
- reset the global bool and exit early (i.e. before writing the dirstate)
- raise SIGINT from `hg-cpython` if update returns `InterruptReceived`
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Tue, 12 Nov 2024 12:52:13 +0100 |
parents | d41960df197e |
children |
rev | line source |
---|---|
4110
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
1 import os |
36781
ffa3026d4196
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents:
35400
diff
changeset
|
2 import stat |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
3 import sys |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
4 from mercurial.node import hex |
28735
5edde05ff58e
py3: use absolute_import in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27056
diff
changeset
|
5 from mercurial import ( |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
6 context, |
38588
1c93e0237a24
diffutil: move the module out of utils package
Yuya Nishihara <yuya@tcha.org>
parents:
38587
diff
changeset
|
7 diffutil, |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
8 encoding, |
28735
5edde05ff58e
py3: use absolute_import in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27056
diff
changeset
|
9 hg, |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
10 scmutil, |
28775
67bff672ccc2
tests: alias ui as uimod in test-context
Yuya Nishihara <yuya@tcha.org>
parents:
28738
diff
changeset
|
11 ui as uimod, |
28735
5edde05ff58e
py3: use absolute_import in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27056
diff
changeset
|
12 ) |
4110
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
13 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
14 print_ = print |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
15 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
16 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
17 def print(*args, **kwargs): |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
18 """print() wrapper that flushes stdout buffers to avoid py3 buffer issues |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
19 |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
20 We could also just write directly to sys.stdout.buffer the way the |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
21 ui object will, but this was easier for porting the test. |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
22 """ |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
23 print_(*args, **kwargs) |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
24 sys.stdout.flush() |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
25 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
26 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
27 def printb(data, end=b'\n'): |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
28 out = getattr(sys.stdout, 'buffer', sys.stdout) |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
29 out.write(data + end) |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
30 out.flush() |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
31 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
32 |
42056
4950ae4d034f
tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
33 ui = uimod.ui.load() |
4110
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
34 |
42056
4950ae4d034f
tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
35 repo = hg.repository(ui, b'test1', create=1) |
4110
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
36 os.chdir('test1') |
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
37 |
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
38 # create 'foo' with fixed time stamp |
23060
4eaea93b3e5b
tests: open file in binary mode to use POSIX end-of-line style anywhere
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21837
diff
changeset
|
39 f = open('foo', 'wb') |
29187
aec5d8561be2
tests: mark test-context.py write as binary
timeless <timeless@mozdev.org>
parents:
28775
diff
changeset
|
40 f.write(b'foo\n') |
4110
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
41 f.close() |
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
42 os.utime('foo', (1000, 1000)) |
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
43 |
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
44 # add+commit 'foo' |
50040
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
45 with repo.wlock(), repo.lock(), repo.transaction(b'test-context'): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
46 with repo.dirstate.changing_files(repo): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
47 repo[None].add([b'foo']) |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
48 repo.commit(text=b'commit1', date=b"0 0") |
4110
20af6a2f0b0e
Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
49 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
50 d = repo[None][b'foo'].date() |
27056
01489fa0bbbe
test-context: conditionalize the workingfilectx date printing for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
24180
diff
changeset
|
51 if os.name == 'nt': |
33751
3889cf955a62
hg: tolerate long vs. int in test-context.py
Tristan Seligmann <mithrandi@mithrandi.net>
parents:
32518
diff
changeset
|
52 d = d[:2] |
3889cf955a62
hg: tolerate long vs. int in test-context.py
Tristan Seligmann <mithrandi@mithrandi.net>
parents:
32518
diff
changeset
|
53 print("workingfilectx.date = (%d, %d)" % d) |
14379
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
54 |
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
55 # test memctx with non-ASCII commit message |
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
56 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
57 |
14379
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
58 def filectxfn(repo, memctx, path): |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
59 return context.memfilectx(repo, memctx, b"foo", b"") |
14379
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
60 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
61 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
62 ctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
63 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
64 [b'tip', None], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
65 encoding.tolocal(b"Gr\xc3\xbcezi!"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
66 [b"foo"], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
67 filectxfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
68 ) |
14379
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
69 ctx.commit() |
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
70 for enc in "ASCII", "Latin-1", "UTF-8": |
bd23d5f28bbb
changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents:
11303
diff
changeset
|
71 encoding.encoding = enc |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
72 printb(b"%-8s: %s" % (enc.encode('ascii'), repo[b"tip"].description())) |
21836
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
73 |
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
74 # test performing a status |
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
75 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
76 |
21836
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
77 def getfilectx(repo, memctx, f): |
41397
0bd56c291359
cleanup: use p1() and p2() instead of parents()[0] and parents()[1]
Martin von Zweigbergk <martinvonz@google.com>
parents:
38658
diff
changeset
|
78 fctx = memctx.p1()[f] |
21836
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
79 data, flags = fctx.data(), fctx.flags() |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
80 if f == b'foo': |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
81 data += b'bar\n' |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
82 return context.memfilectx( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
83 repo, memctx, f, data, b'l' in flags, b'x' in flags |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
84 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
85 |
21836
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
86 |
37304
feced1629f48
tests: remove dependence on repo.changectx()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36781
diff
changeset
|
87 ctxa = repo[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
88 ctxb = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
89 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
90 [ctxa.node(), None], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
91 b"test diff", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
92 [b"foo"], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
93 getfilectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
94 ctxa.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
95 ctxa.date(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
96 ) |
21836
232038a05fdb
test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents:
21689
diff
changeset
|
97 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
98 print(ctxb.status(ctxa)) |
21837
61b333b982ea
test-context: add test for performing a diff on a memctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21836
diff
changeset
|
99 |
61b333b982ea
test-context: add test for performing a diff on a memctx
Sean Farley <sean.michael.farley@gmail.com>
parents:
21836
diff
changeset
|
100 # test performing a diff on a memctx |
38658
a75896bf5ccb
tests: add missing b prefix in test-context.py
Augie Fackler <augie@google.com>
parents:
38588
diff
changeset
|
101 diffopts = diffutil.diffallopts(repo.ui, {b'git': True}) |
38563
b9724978633e
tests: update test-context.py to use diffopts as diff argument
Boris Feld <boris.feld@octobus.net>
parents:
38519
diff
changeset
|
102 for d in ctxb.diff(ctxa, opts=diffopts): |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
103 printb(d, end=b'') |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
104 |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23712
diff
changeset
|
105 # test safeness and correctness of "ctx.status()" |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
106 print('= checking context.status():') |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
107 |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
108 # ancestor "wcctx ~ 2" |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
109 actx2 = repo[b'.'] |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
110 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
111 repo.wwrite(b'bar-m', b'bar-m\n', b'') |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
112 repo.wwrite(b'bar-r', b'bar-r\n', b'') |
50040
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
113 with repo.wlock(), repo.lock(), repo.transaction(b'test-context'): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
114 with repo.dirstate.changing_files(repo): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
115 repo[None].add([b'bar-m', b'bar-r']) |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
116 repo.commit(text=b'add bar-m, bar-r', date=b"0 0") |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
117 |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
118 # ancestor "wcctx ~ 1" |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
119 actx1 = repo[b'.'] |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
120 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
121 repo.wwrite(b'bar-m', b'bar-m bar-m\n', b'') |
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
122 repo.wwrite(b'bar-a', b'bar-a\n', b'') |
50040
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
123 with repo.wlock(), repo.lock(), repo.transaction(b'test-context'): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
124 with repo.dirstate.changing_files(repo): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
125 repo[None].add([b'bar-a']) |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
126 repo[None].forget([b'bar-r']) |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
127 |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
128 # status at this point: |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
129 # M bar-m |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
130 # A bar-a |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
131 # R bar-r |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
132 # C foo |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
133 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
134 print('== checking workingctx.status:') |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
135 |
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
136 wctx = repo[None] |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
137 print('wctx._status=%s' % (str(wctx._status))) |
23700
a4958cdb2202
context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23060
diff
changeset
|
138 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
139 print('=== with "pattern match":') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
140 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
141 actx1.status(other=wctx, match=scmutil.matchfiles(repo, [b'bar-m', b'foo'])) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
142 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
143 print('wctx._status=%s' % (str(wctx._status))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
144 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
145 actx2.status(other=wctx, match=scmutil.matchfiles(repo, [b'bar-m', b'foo'])) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
146 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
147 print('wctx._status=%s' % (str(wctx._status))) |
23709
33e5431684c0
context: make unknown/ignored/clean of cached status empty for equivalence
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23700
diff
changeset
|
148 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
149 print('=== with "always match" and "listclean=True":') |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
150 print(actx1.status(other=wctx, listclean=True)) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
151 print('wctx._status=%s' % (str(wctx._status))) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
152 print(actx2.status(other=wctx, listclean=True)) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
153 print('wctx._status=%s' % (str(wctx._status))) |
23711
1e6fb8db666e
context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
154 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
155 print("== checking workingcommitctx.status:") |
23711
1e6fb8db666e
context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
156 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
157 wcctx = context.workingcommitctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
158 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
159 scmutil.status([b'bar-m'], [b'bar-a'], [], [], [], [], []), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
160 text=b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
161 date=b'0 0', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
162 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
163 print('wcctx._status=%s' % (str(wcctx._status))) |
23711
1e6fb8db666e
context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
164 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
165 print('=== with "always match":') |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
166 print(actx1.status(other=wcctx)) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
167 print('wcctx._status=%s' % (str(wcctx._status))) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
168 print(actx2.status(other=wcctx)) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
169 print('wcctx._status=%s' % (str(wcctx._status))) |
23711
1e6fb8db666e
context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23709
diff
changeset
|
170 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
171 print('=== with "always match" and "listclean=True":') |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
172 print(actx1.status(other=wcctx, listclean=True)) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
173 print('wcctx._status=%s' % (str(wcctx._status))) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
174 print(actx2.status(other=wcctx, listclean=True)) |
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
175 print('wcctx._status=%s' % (str(wcctx._status))) |
23712
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
176 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
177 print('=== with "pattern match":') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
178 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
179 actx1.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
180 other=wcctx, match=scmutil.matchfiles(repo, [b'bar-m', b'foo']) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
181 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
182 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
183 print('wcctx._status=%s' % (str(wcctx._status))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
184 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
185 actx2.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
186 other=wcctx, match=scmutil.matchfiles(repo, [b'bar-m', b'foo']) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
187 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
188 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
189 print('wcctx._status=%s' % (str(wcctx._status))) |
23712
bfce25d25c96
context: override _dirstatestatus in workingcommitctx for correct matching
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23711
diff
changeset
|
190 |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
191 print('=== with "pattern match" and "listclean=True":') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
192 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
193 actx1.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
194 other=wcctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
195 match=scmutil.matchfiles(repo, [b'bar-r', b'foo']), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
196 listclean=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
197 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
198 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
199 print('wcctx._status=%s' % (str(wcctx._status))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
200 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
201 actx2.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
202 other=wcctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
203 match=scmutil.matchfiles(repo, [b'bar-r', b'foo']), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
204 listclean=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
205 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
206 ) |
28738
706f4ab710c8
py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
28735
diff
changeset
|
207 print('wcctx._status=%s' % (str(wcctx._status))) |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
208 |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
209 os.chdir('..') |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
210 |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
211 # test manifestlog being changed |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
212 print('== commit with manifestlog invalidated') |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
213 |
42056
4950ae4d034f
tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
41397
diff
changeset
|
214 repo = hg.repository(ui, b'test2', create=1) |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
215 os.chdir('test2') |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
216 |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
217 # make some commits |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
218 for i in [b'1', b'2', b'3']: |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
219 with open(i, 'wb') as f: |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
220 f.write(i) |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
221 status = scmutil.status([], [i], [], [], [], [], []) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
222 ctx = context.workingcommitctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
223 repo, status, text=i, user=b'test@test.com', date=(0, 0) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
224 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
225 ctx.p1().manifest() # side effect: cache manifestctx |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
226 n = repo.commitctx(ctx) |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
227 printb(b'commit %s: %s' % (i, hex(n))) |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
228 |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
229 # touch 00manifest.i mtime so storecache could expire. |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
230 # repo.__dict__['manifestlog'] is deleted by transaction releasefn. |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
231 st = repo.svfs.stat(b'00manifest.i') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
232 repo.svfs.utime( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
233 b'00manifest.i', (st[stat.ST_MTIME] + 1, st[stat.ST_MTIME] + 1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42056
diff
changeset
|
234 ) |
32518
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
235 |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
236 # read the file just committed |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
237 try: |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
238 if repo[n][i].data() != i: |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
239 print('data mismatch') |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
240 except Exception as ex: |
bb628fc85b0e
test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents:
31270
diff
changeset
|
241 print('cannot read data: %r' % ex) |
33706
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
242 |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
243 with repo.wlock(), repo.lock(), repo.transaction(b'test'): |
33706
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
244 with open(b'4', 'wb') as f: |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
245 f.write(b'4') |
50040
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
246 with repo.dirstate.changing_files(repo): |
d41960df197e
dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49282
diff
changeset
|
247 repo.dirstate.set_tracked(b'4') |
37922
0d95ad9fc5f4
tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents:
37304
diff
changeset
|
248 repo.commit(b'4') |
33706
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
249 revsbefore = len(repo.changelog) |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
250 repo.invalidate(clearfilecache=True) |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
251 revsafter = len(repo.changelog) |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
252 if revsbefore != revsafter: |
01a1c4e66816
repo: skip invalidation of changelog if it has 'delayed' changes (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32518
diff
changeset
|
253 print('changeset lost by repo.invalidate()') |