Mercurial > hg
annotate contrib/perf-utils/discovery-helper.sh @ 41928:cae3f7e37623
discovery-helper: use reflink copy if available
A reflink copy will copy the files "as usual" but keep using the same data block
underneath. This is only supported by "copy on write" file system like btrfs or
zfs.
This will achieve similar performance that the existing hardlink clone that
Mercurial performs with the same initial space saving. However, it will behave
better on revlogs start being touch by strip. Instead of duplicating all data in
the touched revlogs, only the block actually affected by the strip will be
duplicated. This save a lot of space when building many variants of large
repositories.
The --reflink=always flag make sure the `cp` call fails if reflink copies are
not supported. Falling back to local clone.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 10 Mar 2019 19:01:56 +0100 |
parents | a60e9f163595 |
children |
rev | line source |
---|---|
40805
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
1 #!/bin/bash |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
2 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
3 # produces two repositories with different common and missing subsets |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
4 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
5 # $ discovery-helper.sh REPO NBHEADS DEPT |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
6 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
7 # The Goal is to produce two repositories with some common part and some |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
8 # exclusive part on each side. Provide a source repository REPO, it will |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
9 # produce two repositories REPO-left and REPO-right. |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
10 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
11 # Each repository will be missing some revisions exclusive to NBHEADS of the |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
12 # repo topological heads. These heads and revisions exclusive to them (up to |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
13 # DEPTH depth) are stripped. |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
14 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
15 # The "left" repository will use the NBHEADS first heads (sorted by |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
16 # description). The "right" use the last NBHEADS one. |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
17 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
18 # To find out how many topological heads a repo has, use: |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
19 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
20 # $ hg heads -t -T '{rev}\n' | wc -l |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
21 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
22 # Example: |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
23 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
24 # The `pypy-2018-09-01` repository has 192 heads. To produce two repositories |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
25 # with 92 common heads and ~50 exclusive heads on each side. |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
26 # |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
27 # $ ./discovery-helper.sh pypy-2018-08-01 50 10 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
28 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
29 set -euo pipefail |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
30 |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
31 printusage () { |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
32 echo "usage: `basename $0` REPO NBHEADS DEPTH [left|right]" >&2 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
33 } |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
34 |
40805
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
35 if [ $# -lt 3 ]; then |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
36 printusage |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
37 exit 64 |
40805
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
38 fi |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
39 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
40 repo="$1" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
41 shift |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
42 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
43 nbheads="$1" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
44 shift |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
45 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
46 depth="$1" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
47 shift |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
48 |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
49 doleft=1 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
50 doright=1 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
51 if [ $# -gt 1 ]; then |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
52 printusage |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
53 exit 64 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
54 elif [ $# -eq 1 ]; then |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
55 if [ "$1" == "left" ]; then |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
56 doleft=1 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
57 doright=0 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
58 elif [ "$1" == "right" ]; then |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
59 doleft=0 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
60 doright=1 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
61 else |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
62 printusage |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
63 exit 64 |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
64 fi |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
65 fi |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
66 |
41895
c1017bceb6ec
discovery-helper: reflect argument value in the name of the results
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41894
diff
changeset
|
67 leftrepo="${repo}-${nbheads}h-${depth}d-left" |
c1017bceb6ec
discovery-helper: reflect argument value in the name of the results
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41894
diff
changeset
|
68 rightrepo="${repo}-${nbheads}h-${depth}d-right" |
40805
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
69 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
70 left="first(sort(heads(all()), 'desc'), $nbheads)" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
71 right="last(sort(heads(all()), 'desc'), $nbheads)" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
72 |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
73 leftsubset="ancestors($left, $depth) and only($left, heads(all() - $left))" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
74 rightsubset="ancestors($right, $depth) and only($right, heads(all() - $right))" |
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
75 |
41894
aea6bc63884d
discovery-helper: echo the stripped revsets early
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41893
diff
changeset
|
76 echo '### creating left/right repositories with missing changesets:' |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
77 if [ $doleft -eq 1 ]; then |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
78 echo '# left revset:' '"'${leftsubset}'"' |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
79 fi |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
80 if [ $doright -eq 1 ]; then |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
81 echo '# right revset:' '"'${rightsubset}'"' |
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
82 fi |
41894
aea6bc63884d
discovery-helper: echo the stripped revsets early
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41893
diff
changeset
|
83 |
41926
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
84 buildone() { |
41927
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
85 side="$1" |
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
86 dest="$2" |
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
87 revset="$3" |
41926
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
88 echo "### building $side repository: $dest" |
41927
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
89 if [ -e "$dest" ]; then |
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
90 echo "destination repo already exists: $dest" >&2 |
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
91 exit 1 |
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
92 fi |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
93 echo '# cloning' |
41928
cae3f7e37623
discovery-helper: use reflink copy if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41927
diff
changeset
|
94 if ! cp --recursive --reflink=always ${repo} ${dest}; then |
cae3f7e37623
discovery-helper: use reflink copy if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41927
diff
changeset
|
95 hg clone --noupdate "${repo}" "${dest}" |
cae3f7e37623
discovery-helper: use reflink copy if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41927
diff
changeset
|
96 fi |
41926
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
97 echo '# stripping' '"'${revset}'"' |
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
98 hg -R "${dest}" --config extensions.strip= strip --rev "$revset" --no-backup |
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
99 } |
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
100 |
cb6c9d41a23e
discovery-helper: move repository creation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41925
diff
changeset
|
101 if [ $doleft -eq 1 ]; then |
41927
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
102 buildone left "$leftrepo" "$leftsubset" |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
103 fi |
40805
01c335afc997
contrib: add a helper script that help to build interesting repositories
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
104 |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
105 if [ $doright -eq 1 ]; then |
41927
a60e9f163595
discovery-helper: bail out if destination already exists
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41926
diff
changeset
|
106 buildone right "$rightrepo" "$rightsubset" |
41925
4f283b7dac44
discovery-helper: add an extra argument to generate only one repo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41895
diff
changeset
|
107 fi |