tests/test-narrow-clone-non-narrow-server.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:
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     1
Test attempting a narrow clone against a server that doesn't support narrowhg.
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     2
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     3
  $ . "$TESTDIR/narrow-library.sh"
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     4
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     5
  $ hg init master
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     6
  $ cd master
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     7
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     8
  $ for x in `$TESTDIR/seq.py 10`; do
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
     9
  >   echo $x > "f$x"
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    10
  >   hg add "f$x"
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    11
  >   hg commit -m "Add $x"
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    12
  > done
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    13
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    14
  $ hg serve -a localhost -p $HGPORT1 --config extensions.narrow=! -d \
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    15
  >    --pid-file=hg.pid
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    16
  $ cat hg.pid >> "$DAEMON_PIDS"
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    17
  $ hg serve -a localhost -p $HGPORT2 -d --pid-file=hg.pid
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    18
  $ cat hg.pid >> "$DAEMON_PIDS"
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    19
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    20
Verify that narrow is advertised in the bundle2 capabilities:
37661
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    21
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    22
  $ cat >> unquote.py <<EOF
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    23
  > import sys
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    24
  > if sys.version[0] == '3':
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    25
  >     import urllib.parse as up
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    26
  >     unquote = up.unquote_plus
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    27
  > else:
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    28
  >     import urllib
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    29
  >     unquote = urllib.unquote_plus
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    30
  > print(unquote(list(sys.stdin)[1]))
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    31
  > EOF
36103
54e2abc73686 tests: use `hello` not `capabilities` over ssh
Augie Fackler <augie@google.com>
parents: 36079
diff changeset
    32
  $ echo hello | hg -R . serve --stdio | \
39720
7d9b1b50cad5 tests: split capabilities into separate lines while searching for "narrow"
Anton Shestakov <av6@dwimlabs.net>
parents: 39707
diff changeset
    33
  >   "$PYTHON" unquote.py | tr ' ' '\n' | grep narrow
7d9b1b50cad5 tests: split capabilities into separate lines while searching for "narrow"
Anton Shestakov <av6@dwimlabs.net>
parents: 39707
diff changeset
    34
  exp-narrow-1
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    35
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    36
  $ cd ..
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    37
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    38
  $ hg clone --narrow --include f1 http://localhost:$HGPORT1/ narrowclone
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    39
  requesting all changes
39964
06e75fbf9d6b narrow: check for servers' narrow support before doing anything (BC)
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39720
diff changeset
    40
  abort: server does not support narrow clones
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    41
  [255]
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    42
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    43
Make a narrow clone (via HGPORT2), then try to narrow and widen
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    44
into it (from HGPORT1) to prove that narrowing is fine and widening fails
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    45
gracefully:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    46
  $ hg clone -r 0 --narrow --include f1 http://localhost:$HGPORT2/ narrowclone
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    47
  adding changesets
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    48
  adding manifests
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    49
  adding file changes
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    50
  added 1 changesets with 1 changes to 1 files
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    51
  new changesets * (glob)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    52
  updating to branch default
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    53
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    54
  $ cd narrowclone
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    55
  $ hg tracked --addexclude f2 http://localhost:$HGPORT1/
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    56
  comparing with http://localhost:$HGPORT1/
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    57
  searching for changes
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    58
  looking for local changes to affected paths
47026
20eba5cef2e0 narrow: add more status messages when narrowing
Martin von Zweigbergk <martinvonz@google.com>
parents: 40755
diff changeset
    59
  deleting unwanted files from working copy
40436
30a7d3b6b281 narrow: rework logic to check whether we need to widen and narrow
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39964
diff changeset
    60
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    61
  $ hg tracked --addinclude f1 http://localhost:$HGPORT1/
40436
30a7d3b6b281 narrow: rework logic to check whether we need to widen and narrow
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39964
diff changeset
    62
  nothing to widen or narrow
30a7d3b6b281 narrow: rework logic to check whether we need to widen and narrow
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39964
diff changeset
    63
30a7d3b6b281 narrow: rework logic to check whether we need to widen and narrow
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39964
diff changeset
    64
  $ hg tracked --addinclude f9 http://localhost:$HGPORT1/
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    65
  comparing with http://localhost:$HGPORT1/
39964
06e75fbf9d6b narrow: check for servers' narrow support before doing anything (BC)
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39720
diff changeset
    66
  abort: server does not support narrow clones
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    67
  [255]