Mercurial > hg
annotate tests/test-patch.t @ 44363:f7459da77f23
nodemap: introduce an option to use mmap to read the nodemap mapping
The performance and memory benefit is much greater if we don't have to copy all
the data in memory for each information. So we introduce an option (on by
default) to read the data using mmap.
This changeset is the last one definition the API for index support nodemap
data. (they have to be able to use the mmaping).
Below are some benchmark comparing the best we currently have in 5.3 with the
final step of this series (using the persistent nodemap implementation in
Rust). The benchmark run `hg perfindex` with various revset and the following
variants:
Before:
* do not use the persistent nodemap
* use the CPython implementation of the index for nodemap
* use mmapping of the changelog index
After:
* use the MixedIndex Rust code, with the NodeTree object for nodemap access
(still in review)
* use the persistent nodemap data from disk
* access the persistent nodemap data through mmap
* use mmapping of the changelog index
The persistent nodemap greatly speed up most operation on very large
repositories. Some of the previously very fast lookup end up a bit slower because
the persistent nodemap has to be setup. However the absolute slowdown is very
small and won't matters in the big picture.
Here are some numbers (in seconds) for the reference copy of mozilla-try:
Revset Before After abs-change speedup
-10000: 0.004622 0.005532 0.000910 × 0.83
-10: 0.000050 0.000132 0.000082 × 0.37
tip 0.000052 0.000085 0.000033 × 0.61
0 + (-10000:) 0.028222 0.005337 -0.022885 × 5.29
0 0.023521 0.000084 -0.023437 × 280.01
(-10000:) + 0 0.235539 0.005308 -0.230231 × 44.37
(-10:) + :9 0.232883 0.000180 -0.232703 ×1293.79
(-10000:) + (:99) 0.238735 0.005358 -0.233377 × 44.55
:99 + (-10000:) 0.317942 0.005593 -0.312349 × 56.84
:9 + (-10:) 0.313372 0.000179 -0.313193 ×1750.68
:9 0.316450 0.000143 -0.316307 ×2212.93
On smaller repositories, the cost of nodemap related operation is not as big, so
the win is much more modest. Yet it helps shaving a handful of millisecond here
and there.
Here are some numbers (in seconds) for the reference copy of mercurial:
Revset Before After abs-change speedup
-10: 0.000065 0.000097 0.000032 × 0.67
tip 0.000063 0.000078 0.000015 × 0.80
0 0.000561 0.000079 -0.000482 × 7.10
-10000: 0.004609 0.003648 -0.000961 × 1.26
0 + (-10000:) 0.005023 0.003715 -0.001307 × 1.35
(-10:) + :9 0.002187 0.000108 -0.002079 ×20.25
(-10000:) + 0 0.006252 0.003716 -0.002536 × 1.68
(-10000:) + (:99) 0.006367 0.003707 -0.002660 × 1.71
:9 + (-10:) 0.003846 0.000110 -0.003736 ×34.96
:9 0.003854 0.000099 -0.003755 ×38.92
:99 + (-10000:) 0.007644 0.003778 -0.003866 × 2.02
Differential Revision: https://phab.mercurial-scm.org/D7894
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 11 Feb 2020 11:18:52 +0100 |
parents | 5abc47d4ca6b |
children | 42d2b31cee0b |
rev | line source |
---|---|
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
1 $ cat > patchtool.py <<EOF |
33972
b1f75d8e887a
tests: update test-patch to pass our import checker
Augie Fackler <raf@durin42.com>
parents:
32940
diff
changeset
|
2 > from __future__ import absolute_import, print_function |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
3 > import sys |
33972
b1f75d8e887a
tests: update test-patch to pass our import checker
Augie Fackler <raf@durin42.com>
parents:
32940
diff
changeset
|
4 > print('Using custom patch') |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
5 > if '--binary' in sys.argv: |
33972
b1f75d8e887a
tests: update test-patch to pass our import checker
Augie Fackler <raf@durin42.com>
parents:
32940
diff
changeset
|
6 > print('--binary found !') |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
7 > EOF |
4645
0de7e6e27fe4
Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
8 |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
9 $ echo "[ui]" >> $HGRCPATH |
39707
5abc47d4ca6b
tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents:
38305
diff
changeset
|
10 $ echo "patch=\"$PYTHON\" ../patchtool.py" >> $HGRCPATH |
4645
0de7e6e27fe4
Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
11 |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
12 $ hg init a |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
13 $ cd a |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
14 $ echo a > a |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
15 $ hg commit -Ama -d '1 0' |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
16 adding a |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
17 $ echo b >> a |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
18 $ hg commit -Amb -d '2 0' |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
19 $ cd .. |
4645
0de7e6e27fe4
Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
20 |
11815 | 21 This test checks that: |
22 - custom patch commands with arguments actually work | |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
23 - patch code does not try to add weird arguments like |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
24 --binary when custom patch commands are used. For instance |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
25 --binary is added by default under win32. |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
26 |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
27 check custom patch options are honored |
4645
0de7e6e27fe4
Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
28 |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
29 $ hg --cwd a export -o ../a.diff tip |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
30 $ hg clone -r 0 a b |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
31 adding changesets |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
32 adding manifests |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
33 adding file changes |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
34 added 1 changesets with 1 changes to 1 files |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
33972
diff
changeset
|
35 new changesets 8580ff50825a |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
36 updating to branch default |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
37 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
4645
0de7e6e27fe4
Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
38 |
11784
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
39 $ hg --cwd b import -v ../a.diff |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
40 applying ../a.diff |
8a1943685dfb
tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
4645
diff
changeset
|
41 Using custom patch |
15194
0705f2ac79d6
import: simplify status reporting logic (and make it more I18N-friendly)
Greg Ward <greg@gerg.ca>
parents:
14832
diff
changeset
|
42 applied to working directory |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
43 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
44 Issue2417: hg import with # comments in description |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
45 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
46 Prepare source repo and patch: |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
47 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
48 $ rm $HGRCPATH |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
49 $ hg init c |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
50 $ cd c |
14832
d60e4f227d75
patch: fix parsing patch files containing CRs not followed by LFs
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
12847
diff
changeset
|
51 $ printf "a\rc" > a |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
52 $ hg ci -A -m 0 a -d '0 0' |
14832
d60e4f227d75
patch: fix parsing patch files containing CRs not followed by LFs
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
12847
diff
changeset
|
53 $ printf "a\rb\rc" > a |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
54 $ cat << eof > log |
12728
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
55 > first line which can't start with '# ' |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
56 > # second line is a comment but that shouldn't be a problem. |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
57 > A patch marker like this was more problematic even after d7452292f9d3: |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
58 > # HG changeset patch |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
59 > # User lines looks like this - but it _is_ just a comment |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
60 > eof |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
61 $ hg ci -l log -d '0 0' |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
62 $ hg export -o p 1 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
63 $ cd .. |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
64 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
65 Clone and apply patch: |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
66 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
67 $ hg clone -r 0 c d |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
68 adding changesets |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
69 adding manifests |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
70 adding file changes |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
71 added 1 changesets with 1 changes to 1 files |
34661
eb586ed5d8ce
transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
33972
diff
changeset
|
72 new changesets 7fadb901d403 |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
73 updating to branch default |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
74 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
75 $ cd d |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
76 $ hg import ../c/p |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
77 applying ../c/p |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
78 $ hg log -v -r 1 |
14832
d60e4f227d75
patch: fix parsing patch files containing CRs not followed by LFs
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
12847
diff
changeset
|
79 changeset: 1:cd0bde79c428 |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
80 tag: tip |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
81 user: test |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
82 date: Thu Jan 01 00:00:00 1970 +0000 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
83 files: a |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
84 description: |
12728
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
85 first line which can't start with '# ' |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
86 # second line is a comment but that shouldn't be a problem. |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
87 A patch marker like this was more problematic even after d7452292f9d3: |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
88 # HG changeset patch |
80a3d1121c10
import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
12645
diff
changeset
|
89 # User lines looks like this - but it _is_ just a comment |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
90 |
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
91 |
37459
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
92 |
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
93 Error exit (issue4746) |
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
94 |
38292
6cc5d01a58a6
tests: fix test-patch.t on pickier /bin/sh implementations
Augie Fackler <augie@google.com>
parents:
37459
diff
changeset
|
95 $ cat >> exit1.py <<EOF |
6cc5d01a58a6
tests: fix test-patch.t on pickier /bin/sh implementations
Augie Fackler <augie@google.com>
parents:
37459
diff
changeset
|
96 > import sys |
6cc5d01a58a6
tests: fix test-patch.t on pickier /bin/sh implementations
Augie Fackler <augie@google.com>
parents:
37459
diff
changeset
|
97 > sys.exit(1) |
6cc5d01a58a6
tests: fix test-patch.t on pickier /bin/sh implementations
Augie Fackler <augie@google.com>
parents:
37459
diff
changeset
|
98 > EOF |
6cc5d01a58a6
tests: fix test-patch.t on pickier /bin/sh implementations
Augie Fackler <augie@google.com>
parents:
37459
diff
changeset
|
99 |
6cc5d01a58a6
tests: fix test-patch.t on pickier /bin/sh implementations
Augie Fackler <augie@google.com>
parents:
37459
diff
changeset
|
100 $ hg import ../c/p --config ui.patch="\"$PYTHON\" \"`pwd`/exit1.py\"" |
37459
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
101 applying ../c/p |
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
102 abort: patch command failed: exited with status 1 |
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
103 [255] |
90c5ca718781
procutil: rewrite popen() as a subprocess.Popen wrapper (issue4746) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34661
diff
changeset
|
104 |
12645
d7452292f9d3
import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents:
11815
diff
changeset
|
105 $ cd .. |