tests/test-context.py
author Raphaël Gomès <rgomes@octobus.net>
Thu, 10 Aug 2023 11:01:07 +0200
changeset 50978 27e773aa607d
parent 50040 d41960df197e
permissions -rw-r--r--
rust: implement the `Graph` trait for all revlogs This is trivial and makes all the algorithms relying on the trait usable for more use cases.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()')