tests/test-bad-pull.t
author Siddharth Agarwal <sid0@fb.com>
Fri, 29 Mar 2013 19:54:06 -0700
changeset 18851 a60963c02f92
parent 17019 5d0538599428
child 22046 7a9cbb315d84
permissions -rw-r--r--
pull: list bookmarks before pulling changesets (issue3873) Consider a bookmark B that exists both locally and remotely. If B is updated remotely, and then a pull is performed where the pull set contains the new location of B, the bookmark is updated locally. However, if remote B is updated in the middle of a pull to a location not in the pull set, the bookmark won't be updated locally at all. To fix this, list bookmarks before pulling in changesets, not after. This still leaves a race open if B gets moved in between listing bookmarks and pulling in changesets, but the race window is much smaller. Fixing the race properly would require a bundle format upgrade. test-hook.t's output changes because we no longer do two listkeys calls during pull, just one. test-pull-http.t's output changes because we now search for bookmarks before searching for changes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15446
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 12376
diff changeset
     1
  $ "$TESTDIR/hghave" serve || exit 80
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 12376
diff changeset
     2
17019
5d0538599428 test-bad-pull: partially adjust for Windows
Adrian Buehlmann <adrian@cadifra.com>
parents: 16496
diff changeset
     3
#if windows
5d0538599428 test-bad-pull: partially adjust for Windows
Adrian Buehlmann <adrian@cadifra.com>
parents: 16496
diff changeset
     4
  $ hg clone http://localhost:$HGPORT/ copy
5d0538599428 test-bad-pull: partially adjust for Windows
Adrian Buehlmann <adrian@cadifra.com>
parents: 16496
diff changeset
     5
  abort: * (glob)
5d0538599428 test-bad-pull: partially adjust for Windows
Adrian Buehlmann <adrian@cadifra.com>
parents: 16496
diff changeset
     6
  [255]
5d0538599428 test-bad-pull: partially adjust for Windows
Adrian Buehlmann <adrian@cadifra.com>
parents: 16496
diff changeset
     7
#else
11859
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
     8
  $ hg clone http://localhost:$HGPORT/ copy
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
     9
  abort: error: Connection refused
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 11859
diff changeset
    10
  [255]
17019
5d0538599428 test-bad-pull: partially adjust for Windows
Adrian Buehlmann <adrian@cadifra.com>
parents: 16496
diff changeset
    11
#endif
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents:
diff changeset
    12
15515
21766d5531cb tests: remove hacks for testing if file or directory exists
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
    13
  $ test -d copy
21766d5531cb tests: remove hacks for testing if file or directory exists
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
    14
  [1]
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents:
diff changeset
    15
11859
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    16
  $ cat > dumb.py <<EOF
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    17
  > import BaseHTTPServer, SimpleHTTPServer, os, signal
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    18
  > def run(server_class=BaseHTTPServer.HTTPServer,
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    19
  >         handler_class=SimpleHTTPServer.SimpleHTTPRequestHandler):
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    20
  >     server_address = ('localhost', int(os.environ['HGPORT']))
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    21
  >     httpd = server_class(server_address, handler_class)
16334
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    22
  >     open("listening", "w")
16296
4343d5226149 tests: eliminate daemon race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 15515
diff changeset
    23
  >     httpd.handle_request()
11859
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    24
  > run()
f48178034569 tests: unify test-bad-pull
Martin Geisler <mg@lazybytes.net>
parents: 10154
diff changeset
    25
  > EOF
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents:
diff changeset
    26
16334
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    27
  $ python dumb.py 2> log &
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    28
  $ P=$!
16496
abbabbbe4ec2 tests: use 'do sleep 0' instead of 'do true', also on first line of command
Mads Kiilerich <mads@kiilerich.com>
parents: 16341
diff changeset
    29
  $ while [ ! -f listening ]; do sleep 0; done
16334
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    30
  $ hg clone http://localhost:$HGPORT/foo copy2
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    31
  abort: HTTP Error 404: * (glob)
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    32
  [255]
b9bd95e61b49 tests: fix shutdown race in test-bad-pull
Matt Mackall <mpm@selenic.com>
parents: 16296
diff changeset
    33
  $ wait $P