tests/test-context.py
author Gregory Szorc <gregory.szorc@gmail.com>
Thu, 03 Mar 2022 17:34:00 +0100
changeset 48875 6000f5b25c9b
parent 47718 03ef0c8fa7d5
child 49282 d7f3f745f20c
permissions -rw-r--r--
py2: remove simple from __future__ statements These were needed for Python 2 support. Now that our linter no longer mandates these, we can start deleting them. Differential Revision: https://phab.mercurial-scm.org/D12254
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'
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    45
repo[None].add([b'foo'])
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    46
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
    47
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    48
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
    49
if os.name == 'nt':
33751
3889cf955a62 hg: tolerate long vs. int in test-context.py
Tristan Seligmann <mithrandi@mithrandi.net>
parents: 32518
diff changeset
    50
    d = d[:2]
3889cf955a62 hg: tolerate long vs. int in test-context.py
Tristan Seligmann <mithrandi@mithrandi.net>
parents: 32518
diff changeset
    51
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
    52
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    53
# 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
    54
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    55
14379
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    56
def filectxfn(repo, memctx, path):
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    57
    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
    58
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    59
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    60
ctx = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    61
    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    62
    [b'tip', None],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    63
    encoding.tolocal(b"Gr\xc3\xbcezi!"),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    64
    [b"foo"],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    65
    filectxfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    66
)
14379
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    67
ctx.commit()
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    68
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
    69
    encoding.encoding = enc
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    70
    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
    71
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    72
# test performing a status
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    73
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    74
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    75
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
    76
    fctx = memctx.p1()[f]
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    77
    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
    78
    if f == b'foo':
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    79
        data += b'bar\n'
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    80
    return context.memfilectx(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    81
        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
    82
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    83
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    84
37304
feced1629f48 tests: remove dependence on repo.changectx()
Martin von Zweigbergk <martinvonz@google.com>
parents: 36781
diff changeset
    85
ctxa = repo[0]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    86
ctxb = context.memctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    87
    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    88
    [ctxa.node(), None],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    89
    b"test diff",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    90
    [b"foo"],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    91
    getfilectx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    92
    ctxa.user(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    93
    ctxa.date(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
    94
)
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    95
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
    96
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
    97
61b333b982ea test-context: add test for performing a diff on a memctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21836
diff changeset
    98
# 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
    99
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
   100
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
   101
    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
   102
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23712
diff changeset
   103
# 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
   104
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
   105
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   106
# ancestor "wcctx ~ 2"
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   107
actx2 = repo[b'.']
23700
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   108
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   109
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
   110
repo.wwrite(b'bar-r', b'bar-r\n', b'')
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   111
repo[None].add([b'bar-m', b'bar-r'])
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   112
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
   113
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   114
# ancestor "wcctx ~ 1"
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   115
actx1 = repo[b'.']
23700
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   116
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   117
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
   118
repo.wwrite(b'bar-a', b'bar-a\n', b'')
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   119
repo[None].add([b'bar-a'])
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   120
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
   121
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   122
# status at this point:
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   123
#   M bar-m
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   124
#   A bar-a
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   125
#   R bar-r
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   126
#   C foo
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
from mercurial import scmutil
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   129
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   130
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
   131
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   132
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
   133
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
   134
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   135
print('=== with "pattern match":')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   136
print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   137
    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
   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('wctx._status=%s' % (str(wctx._status)))
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
    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
   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)))
23709
33e5431684c0 context: make unknown/ignored/clean of cached status empty for equivalence
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23700
diff changeset
   144
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   145
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
   146
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
   147
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
   148
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
   149
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
   150
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   151
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
   152
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   153
wcctx = context.workingcommitctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   154
    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   155
    scmutil.status([b'bar-m'], [b'bar-a'], [], [], [], [], []),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   156
    text=b'',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   157
    date=b'0 0',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   158
)
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   159
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
   160
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   161
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
   162
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
   163
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
   164
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
   165
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
   166
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   167
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
   168
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
   169
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
   170
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
   171
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
   172
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   173
print('=== with "pattern match":')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   174
print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   175
    actx1.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   176
        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
   177
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   178
)
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   179
print('wcctx._status=%s' % (str(wcctx._status)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   180
print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   181
    actx2.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   182
        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
   183
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   184
)
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   185
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
   186
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   187
print('=== with "pattern match" and "listclean=True":')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   188
print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   189
    actx1.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   190
        other=wcctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   191
        match=scmutil.matchfiles(repo, [b'bar-r', b'foo']),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   192
        listclean=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   193
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   194
)
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   195
print('wcctx._status=%s' % (str(wcctx._status)))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   196
print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   197
    actx2.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   198
        other=wcctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   199
        match=scmutil.matchfiles(repo, [b'bar-r', b'foo']),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   200
        listclean=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   201
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   202
)
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   203
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
   204
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   205
os.chdir('..')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   206
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   207
# test manifestlog being changed
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   208
print('== commit with manifestlog invalidated')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   209
42056
4950ae4d034f tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 41397
diff changeset
   210
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
   211
os.chdir('test2')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   212
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   213
# make some commits
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   214
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
   215
    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
   216
        f.write(i)
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   217
    status = scmutil.status([], [i], [], [], [], [], [])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   218
    ctx = context.workingcommitctx(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   219
        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
   220
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   221
    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
   222
    n = repo.commitctx(ctx)
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   223
    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
   224
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   225
    # 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
   226
    # 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
   227
    st = repo.svfs.stat(b'00manifest.i')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   228
    repo.svfs.utime(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42056
diff changeset
   229
        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
   230
    )
32518
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   231
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   232
    # read the file just committed
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   233
    try:
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   234
        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
   235
            print('data mismatch')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   236
    except Exception as ex:
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   237
        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
   238
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   239
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
   240
    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
   241
        f.write(b'4')
47718
03ef0c8fa7d5 test: use `set_tracked` in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
   242
    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
   243
    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
   244
    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
   245
    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
   246
    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
   247
    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
   248
        print('changeset lost by repo.invalidate()')