tests/test-context.py
author Kyle Lippincott <spectral@google.com>
Mon, 08 Jul 2019 13:06:46 -0700
changeset 42572 cd4f1b7c3192
parent 42056 4950ae4d034f
child 43076 2372284d9457
permissions -rw-r--r--
crecord: make KEY_ENTER usable in tests (by not updating UI) Differential Revision: https://phab.mercurial-scm.org/D6620
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
     1
from __future__ import absolute_import, print_function
4110
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
     2
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
     3
import stat
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
     4
import sys
32518
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
     5
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
     6
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
     7
    context,
38588
1c93e0237a24 diffutil: move the module out of utils package
Yuya Nishihara <yuya@tcha.org>
parents: 38587
diff changeset
     8
    diffutil,
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
     9
    encoding,
28735
5edde05ff58e py3: use absolute_import in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27056
diff changeset
    10
    hg,
32518
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
    11
    scmutil,
28775
67bff672ccc2 tests: alias ui as uimod in test-context
Yuya Nishihara <yuya@tcha.org>
parents: 28738
diff changeset
    12
    ui as uimod,
28735
5edde05ff58e py3: use absolute_import in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27056
diff changeset
    13
)
4110
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    14
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    15
print_ = print
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    16
def print(*args, **kwargs):
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    17
    """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
    18
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    19
    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
    20
    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
    21
    """
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    22
    print_(*args, **kwargs)
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    23
    sys.stdout.flush()
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    24
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    25
def printb(data, end=b'\n'):
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    26
    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
    27
    out.write(data + end)
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    28
    out.flush()
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    29
42056
4950ae4d034f tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 41397
diff changeset
    30
ui = uimod.ui.load()
4110
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    31
42056
4950ae4d034f tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 41397
diff changeset
    32
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
    33
os.chdir('test1')
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    34
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    35
# 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
    36
f = open('foo', 'wb')
29187
aec5d8561be2 tests: mark test-context.py write as binary
timeless <timeless@mozdev.org>
parents: 28775
diff changeset
    37
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
    38
f.close()
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    39
os.utime('foo', (1000, 1000))
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    40
20af6a2f0b0e Fixed workingfilectx.date() (found by Thomas Waldmann) with test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    41
# add+commit 'foo'
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    42
repo[None].add([b'foo'])
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    43
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
    44
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    45
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
    46
if os.name == 'nt':
33751
3889cf955a62 hg: tolerate long vs. int in test-context.py
Tristan Seligmann <mithrandi@mithrandi.net>
parents: 32518
diff changeset
    47
    d = d[:2]
3889cf955a62 hg: tolerate long vs. int in test-context.py
Tristan Seligmann <mithrandi@mithrandi.net>
parents: 32518
diff changeset
    48
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
    49
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    50
# 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
    51
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    52
def filectxfn(repo, memctx, path):
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    53
    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
    54
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    55
ctx = context.memctx(repo, [b'tip', None],
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    56
                     encoding.tolocal(b"Gr\xc3\xbcezi!"),
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    57
                     [b"foo"], filectxfn)
14379
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    58
ctx.commit()
bd23d5f28bbb changelog: convert user and desc from local encoding early
Martin Geisler <mg@aragost.com>
parents: 11303
diff changeset
    59
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
    60
    encoding.encoding = enc
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    61
    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
    62
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    63
# test performing a status
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    64
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    65
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
    66
    fctx = memctx.p1()[f]
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    67
    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
    68
    if f == b'foo':
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    69
        data += b'bar\n'
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    70
    return context.memfilectx(
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    71
        repo, memctx, f, data, b'l' in flags, b'x' in flags)
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    72
37304
feced1629f48 tests: remove dependence on repo.changectx()
Martin von Zweigbergk <martinvonz@google.com>
parents: 36781
diff changeset
    73
ctxa = repo[0]
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    74
ctxb = context.memctx(repo, [ctxa.node(), None], b"test diff", [b"foo"],
21837
61b333b982ea test-context: add test for performing a diff on a memctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21836
diff changeset
    75
                      getfilectx, ctxa.user(), ctxa.date())
21836
232038a05fdb test-context: add test for memctx status
Sean Farley <sean.michael.farley@gmail.com>
parents: 21689
diff changeset
    76
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
    77
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
    78
61b333b982ea test-context: add test for performing a diff on a memctx
Sean Farley <sean.michael.farley@gmail.com>
parents: 21836
diff changeset
    79
# 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
    80
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
    81
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
    82
    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
    83
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23712
diff changeset
    84
# 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
    85
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
    86
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
    87
# ancestor "wcctx ~ 2"
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    88
actx2 = repo[b'.']
23700
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
    89
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    90
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
    91
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
    92
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
    93
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
    94
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
    95
# ancestor "wcctx ~ 1"
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    96
actx1 = repo[b'.']
23700
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
    97
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
    98
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
    99
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
   100
repo[None].add([b'bar-a'])
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   101
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
   102
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   103
# status at this point:
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   104
#   M bar-m
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   105
#   A bar-a
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   106
#   R bar-r
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   107
#   C foo
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   108
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   109
from mercurial import scmutil
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   110
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   111
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
   112
a4958cdb2202 context: cache self._status correctly at workingctx.status
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23060
diff changeset
   113
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
   114
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
   115
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   116
print('=== with "pattern match":')
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   117
print(actx1.status(other=wctx,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   118
                   match=scmutil.matchfiles(repo, [b'bar-m', b'foo'])))
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   119
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
   120
print(actx2.status(other=wctx,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   121
                   match=scmutil.matchfiles(repo, [b'bar-m', b'foo'])))
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   122
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
   123
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   124
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
   125
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
   126
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
   127
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
   128
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
   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 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
   131
1e6fb8db666e context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
   132
wcctx = context.workingcommitctx(repo,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   133
                                 scmutil.status([b'bar-m'],
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   134
                                                [b'bar-a'],
23711
1e6fb8db666e context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
   135
                                                [],
1e6fb8db666e context: avoid breaking already fixed self._status at ctx.status()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23709
diff changeset
   136
                                                [], [], [], []),
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   137
                                 text=b'', date=b'0 0')
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   138
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
   139
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   140
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
   141
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
   142
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
   143
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
   144
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
   145
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   146
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
   147
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
   148
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
   149
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
   150
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
   151
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   152
print('=== with "pattern match":')
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   153
print(actx1.status(other=wcctx,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   154
                   match=scmutil.matchfiles(repo, [b'bar-m', b'foo'])))
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('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
   156
print(actx2.status(other=wcctx,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   157
                   match=scmutil.matchfiles(repo, [b'bar-m', b'foo'])))
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   158
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
   159
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   160
print('=== with "pattern 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
   161
print(actx1.status(other=wcctx,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   162
                   match=scmutil.matchfiles(repo, [b'bar-r', b'foo']),
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   163
                   listclean=True))
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   164
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
   165
print(actx2.status(other=wcctx,
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   166
                   match=scmutil.matchfiles(repo, [b'bar-r', b'foo']),
28738
706f4ab710c8 py3: lexicographical order imports and print_function in test-context.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28735
diff changeset
   167
                   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('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
   169
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   170
os.chdir('..')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   171
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   172
# test manifestlog being changed
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   173
print('== commit with manifestlog invalidated')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   174
42056
4950ae4d034f tests: rename "u" to more usual "ui" in test-context.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 41397
diff changeset
   175
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
   176
os.chdir('test2')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   177
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   178
# make some commits
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   179
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
   180
    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
   181
        f.write(i)
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   182
    status = scmutil.status([], [i], [], [], [], [], [])
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   183
    ctx = context.workingcommitctx(repo, status, text=i, user=b'test@test.com',
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   184
                                   date=(0, 0))
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   185
    ctx.p1().manifest() # side effect: cache manifestctx
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   186
    n = repo.commitctx(ctx)
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   187
    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
   188
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   189
    # 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
   190
    # 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
   191
    st = repo.svfs.stat(b'00manifest.i')
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   192
    repo.svfs.utime(b'00manifest.i',
36781
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 35400
diff changeset
   193
                    (st[stat.ST_MTIME] + 1, st[stat.ST_MTIME] + 1))
32518
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   194
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   195
    # read the file just committed
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   196
    try:
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   197
        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
   198
            print('data mismatch')
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   199
    except Exception as ex:
bb628fc85b0e test-context: add a case demonstrating manifest caching problem
Jun Wu <quark@fb.com>
parents: 31270
diff changeset
   200
        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
   201
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   202
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
   203
    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
   204
        f.write(b'4')
37922
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   205
    repo.dirstate.normal(b'4')
0d95ad9fc5f4 tests: port test-context.py to Python 3
Augie Fackler <augie@google.com>
parents: 37304
diff changeset
   206
    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
   207
    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
   208
    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
   209
    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
   210
    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
   211
        print('changeset lost by repo.invalidate()')