tests/test-narrow-clone-non-narrow-server.t
author Pulkit Goyal <pulkit@yandex-team.ru>
Tue, 23 Oct 2018 16:24:04 +0300
changeset 40436 30a7d3b6b281
parent 39964 06e75fbf9d6b
child 40755 e3792741e3fb
permissions -rw-r--r--
narrow: rework logic to check whether we need to widen and narrow This patch reworks logic which calculates whether we need to extend or narrow our working copy or not. We filter the addincludes, removeincludes, addexcludes and removeexcludes passed from user to the actual added and removed includes and excludes. What that means is a user can pass an already included path as addincludes, a path which is not included as removeincludes etc. In such situations the old logic use to think we need to do some work, whereas we don't need to do that work. In old logic, even if we don't have anything new to include but it believes we need to call widen, this adds some good amount of work on large repository. A widen calls involves computing incomming csets, calling the narrow_widen() which in non-ellipses cases goes through all the set of csets which are available which can take ~2-3 mins on large repos. Those 2-3 minutes are spend on doing nothing which a client can prevent by checking is there really anything which needs to be included. The tests changes shows that we don't go to the server anymore in such cases which is nice. Differential Revision: https://phab.mercurial-scm.org/D5183
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
  > from __future__ import print_function
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    24
  > import sys
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    25
  > 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
    26
  >     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
    27
  >     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
    28
  > else:
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    29
  >     import urllib
afe624d78d43 py3: use urllib.parse.unquote_plus instead of urllib.unquote_plus
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36993
diff changeset
    30
  >     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
    31
  > 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
    32
  > EOF
36103
54e2abc73686 tests: use `hello` not `capabilities` over ssh
Augie Fackler <augie@google.com>
parents: 36079
diff changeset
    33
  $ 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
    34
  >   "$PYTHON" unquote.py | tr ' ' '\n' | grep narrow
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    35
  narrow=v0
39720
7d9b1b50cad5 tests: split capabilities into separate lines while searching for "narrow"
Anton Shestakov <av6@dwimlabs.net>
parents: 39707
diff changeset
    36
  exp-narrow-1
36079
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
  $ cd ..
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    39
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    40
  $ 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
    41
  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
    42
  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
    43
  [255]
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    44
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    45
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
    46
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
    47
gracefully:
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    48
  $ 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
    49
  adding changesets
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    50
  adding manifests
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    51
  adding file changes
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    52
  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
    53
  new changesets * (glob)
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    54
  updating to branch default
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    55
  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
    56
  $ cd narrowclone
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    57
  $ hg tracked --addexclude f2 http://localhost:$HGPORT1/
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    58
  comparing with http://localhost:$HGPORT1/
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    59
  searching for changes
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    60
  looking for local changes to affected paths
40436
30a7d3b6b281 narrow: rework logic to check whether we need to widen and narrow
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39964
diff changeset
    61
36079
a2a6e724d61a narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
diff changeset
    62
  $ 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
    63
  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
    64
30a7d3b6b281 narrow: rework logic to check whether we need to widen and narrow
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39964
diff changeset
    65
  $ 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
    66
  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
    67
  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
    68
  [255]