tests/testlib/stream_clone_setup.sh
author Arun Kulshreshtha <akulshreshtha@janestreet.com>
Tue, 30 Aug 2022 15:29:55 -0400
changeset 49491 c6a1beba27e9
parent 48598 a6f16ec07ed7
permissions -rw-r--r--
bisect: avoid copying ancestor list for non-merge commits During a bisection, hg needs to compute a list of all ancestors for every candidate commit. This is accomplished via a bottom-up traversal of the set of candidates, during which each revision's ancestor list is populated using the ancestor list of its parent(s). Previously, this involved copying the entire list, which could be very long in if the bisection range was large. To help improve this, we can observe that each candidate commit is visited exactly once, at which point its ancestor list is copied into its children's lists and then dropped. In the case of non-merge commits, a commit's ancestor list consists exactly of its parent's list plus itself. This means that we can trivially reuse the parent's existing list for one of its non-merge children, which avoids copying entirely if that commit is the parent's only child. This makes bisections over linear ranges of commits much faster. During some informal testing in the large publicly-available `mozilla-central` repository, this noticeably sped up bisections over large ranges of history: Setup: $ cd mozilla-central $ hg bisect --reset $ hg bisect --good 0 $ hg log -r tip -T '{rev}\n' 628417 Test: $ time hg bisect --bad tip --noupdate Before: real 3m35.927s user 3m35.553s sys 0m0.319s After: real 1m41.142s user 1m40.810s sys 0m0.285s
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48598
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     1
# setup some files and commit for a good stream clone testing.
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     2
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     3
touch foo
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     4
hg -q commit -A -m initial
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     5
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     6
python3 << EOF
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     7
for i in range(1024):
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     8
    with open(str(i), 'wb') as fh:
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
     9
        fh.write(b"%d" % i) and None
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    10
EOF
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    11
hg -q commit -A -m 'add a lot of files'
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    12
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    13
# (the status call is to check for issue5130)
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    14
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    15
hg st
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    16
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    17
# add files with "tricky" name:
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    18
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    19
echo foo > 00changelog.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    20
echo foo > 00changelog.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    21
echo foo > 00changelog.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    22
echo foo > 00changelog-ab349180a0405010.nd
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    23
echo foo > 00manifest.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    24
echo foo > 00manifest.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    25
echo foo > foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    26
echo foo > foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    27
echo foo > foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    28
echo foo > undo.py
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    29
echo foo > undo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    30
echo foo > undo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    31
echo foo > undo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    32
echo foo > undo.foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    33
echo foo > undo.foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    34
echo foo > undo.foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    35
echo foo > undo.babar
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    36
mkdir savanah
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    37
echo foo > savanah/foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    38
echo foo > savanah/foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    39
echo foo > savanah/foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    40
echo foo > savanah/undo.py
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    41
echo foo > savanah/undo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    42
echo foo > savanah/undo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    43
echo foo > savanah/undo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    44
echo foo > savanah/undo.foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    45
echo foo > savanah/undo.foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    46
echo foo > savanah/undo.foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    47
echo foo > savanah/undo.babar
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    48
mkdir data
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    49
echo foo > data/foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    50
echo foo > data/foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    51
echo foo > data/foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    52
echo foo > data/undo.py
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    53
echo foo > data/undo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    54
echo foo > data/undo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    55
echo foo > data/undo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    56
echo foo > data/undo.foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    57
echo foo > data/undo.foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    58
echo foo > data/undo.foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    59
echo foo > data/undo.babar
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    60
mkdir meta
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    61
echo foo > meta/foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    62
echo foo > meta/foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    63
echo foo > meta/foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    64
echo foo > meta/undo.py
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    65
echo foo > meta/undo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    66
echo foo > meta/undo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    67
echo foo > meta/undo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    68
echo foo > meta/undo.foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    69
echo foo > meta/undo.foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    70
echo foo > meta/undo.foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    71
echo foo > meta/undo.babar
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    72
mkdir store
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    73
echo foo > store/foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    74
echo foo > store/foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    75
echo foo > store/foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    76
echo foo > store/undo.py
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    77
echo foo > store/undo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    78
echo foo > store/undo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    79
echo foo > store/undo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    80
echo foo > store/undo.foo.i
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    81
echo foo > store/undo.foo.d
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    82
echo foo > store/undo.foo.n
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    83
echo foo > store/undo.babar
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    84
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    85
# Name with special characters
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    86
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    87
echo foo > store/CélesteVille_is_a_Capital_City
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    88
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    89
# name causing issue6581
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    90
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    91
mkdir -p container/isam-build-centos7/
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    92
touch container/isam-build-centos7/bazel-coverage-generator-sandboxfs-compatibility-0758e3e4f6057904d44399bd666faba9e7f40686.patch
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    93
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    94
# Add all that
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    95
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    96
hg add .
a6f16ec07ed7 stream-clone: add a explicit test for format change during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
    97
hg ci -m 'add files with "tricky" name'