tests/test-merge-symlinks.t
author Manuel Jacob <me@manueljacob.de>
Mon, 11 Jul 2022 01:51:20 +0200
branchstable
changeset 49378 094a5fa3cf52
parent 48876 42d2b31cee0b
permissions -rw-r--r--
procutil: make stream detection in make_line_buffered more correct and strict In make_line_buffered(), we don’t want to wrap the stream if we know that lines get flushed to the underlying raw stream already. Previously, the heuristic was too optimistic. It assumed that any stream which is not an instance of io.BufferedIOBase doesn’t need wrapping. However, there are buffered streams that aren’t instances of io.BufferedIOBase, like Mercurial’s own winstdout. The new logic is different in two ways: First, only for the check, if unwraps any combination of WriteAllWrapper and winstdout. Second, it skips wrapping the stream only if it is an instance of io.RawIOBase (or already wrapped). If it is an instance of io.BufferedIOBase, it gets wrapped. In any other case, the function raises an exception. This ensures that, if an unknown stream is passed or we add another wrapper in the future, we don’t wrap the stream if it’s already line buffered or not wrap the stream if it’s not line buffered. In fact, this was already helpful during development of this change. Without it, I possibly would have forgot that WriteAllWrapper needs to be ignored for the check, leading to unnecessary wrapping if stdout is unbuffered. The alternative would have been to always wrap unknown streams. However, I don’t think that anyone would benefit from being less strict. We can expect streams from the standard library to be subclassing either io.RawIOBase or io.BufferedIOBase, so running Mercurial in the standard way should not regress by this change. Py2exe might replace sys.stdout and sys.stderr, but that currently breaks Mercurial anyway and also these streams don’t claim to be interactive, so this function is not called for them.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
     1
  $ cat > echo.py <<EOF
32938
b6776b34e44e tests: use $PYTHON in #! so we always use the right Python
Augie Fackler <augie@google.com>
parents: 16913
diff changeset
     2
  > #!$PYTHON
33967
00658bb0dfd5 tests: update test-merge-symlinks to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 33721
diff changeset
     3
  > import os
00658bb0dfd5 tests: update test-merge-symlinks to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 33721
diff changeset
     4
  > import sys
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
     5
  > try:
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
     6
  >     import msvcrt
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
     7
  >     msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
     8
  >     msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
     9
  > except ImportError:
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    10
  >     pass
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    11
  > 
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    12
  > for k in ('HG_FILE', 'HG_MY_ISLINK', 'HG_OTHER_ISLINK', 'HG_BASE_ISLINK'):
33721
24849d53697d tests: clean up many print statements to be print functions instead
Augie Fackler <augie@google.com>
parents: 32940
diff changeset
    13
  >     print(k, os.environ[k])
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    14
  > EOF
7080
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 5408
diff changeset
    15
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    16
Create 2 heads containing the same file, once as
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    17
a file, once as a link. Bundle was generated with:
5391
786c1206a029 Test *_ISLINK merge environment vars
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    18
5408
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    19
# hg init t
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    20
# cd t
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    21
# echo a > a
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    22
# hg ci -qAm t0 -d '0 0'
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    23
# echo l > l
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    24
# hg ci -qAm t1 -d '1 0'
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    25
# hg up -C 0
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    26
# ln -s a l
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    27
# hg ci -qAm t2 -d '2 0'
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    28
# echo l2 > l2
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    29
# hg ci -qAm t3 -d '3 0'
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    30
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    31
  $ hg init t
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    32
  $ cd t
37336
5d10f41ddcc4 tests: use `hg unbundle` instead of `hg pull` in some tests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33967
diff changeset
    33
  $ hg -q unbundle "$TESTDIR/bundles/test-merge-symlinks.hg"
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    34
  $ hg up -C 3
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    35
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    36
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    37
Merge them and display *_ISLINK vars
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    38
merge heads
5391
786c1206a029 Test *_ISLINK merge environment vars
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    39
39946
2b4c8fa08504 py3: quote $PYTHON in test-merge-symlinks.t
Matt Harbison <matt_harbison@yahoo.com>
parents: 37336
diff changeset
    40
  $ hg merge --tool="\"$PYTHON\" ../echo.py"
13439
d724a69309e0 util: flush stdout before calling external processes
Mads Kiilerich <mads@kiilerich.com>
parents: 12788
diff changeset
    41
  merging l
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    42
  HG_FILE l
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    43
  HG_MY_ISLINK 1
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    44
  HG_OTHER_ISLINK 0
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    45
  HG_BASE_ISLINK 0
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    46
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    47
  (branch merge, don't forget to commit)
5408
36794dbe66a3 Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents: 5391
diff changeset
    48
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    49
Test working directory symlink bit calculation wrt copies,
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    50
especially on non-supporting systems.
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    51
merge working directory
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    52
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    53
  $ hg up -C 2
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    54
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    55
  $ hg copy l l2
39946
2b4c8fa08504 py3: quote $PYTHON in test-merge-symlinks.t
Matt Harbison <matt_harbison@yahoo.com>
parents: 37336
diff changeset
    56
  $ HGMERGE="\"$PYTHON\" ../echo.py" hg up 3
13439
d724a69309e0 util: flush stdout before calling external processes
Mads Kiilerich <mads@kiilerich.com>
parents: 12788
diff changeset
    57
  merging l2
12459
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    58
  HG_FILE l2
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    59
  HG_MY_ISLINK 1
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    60
  HG_OTHER_ISLINK 0
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    61
  HG_BASE_ISLINK 0
15f07e8e4742 tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents: 7080
diff changeset
    62
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 16907
diff changeset
    63
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 16907
diff changeset
    64
  $ cd ..