sidedatacopies: fast path data fetching if revision has no sidedata
When using the side data mode, we know their won't be any copy information
sidedata. Skipping revision restoration give an important speed boost.
In the future, there will be other user of sidedata, reducing the efficiency of
this. We should consider adding a dedicated flag in revlog V2 to preserve this
optimisation. The current situation is good enough for now.
revision: large amount; added files: large amount; rename small amount;
c3b14617fbd7 9ba6ab77fd29
before: ! wall 2.401569 comb 2.400000 user 2.390000 sys 0.010000 (median of 10)
after: ! wall 1.429294 comb 1.430000 user 1.410000 sys 0.020000 (median of 10)
revision: large amount; added files: small amount; rename small amount;
c3b14617fbd7 f650a9b140d2
before: ! wall 3.519140 comb 3.520000 user 3.470000 sys 0.050000 (median of 10)
after: ! wall 1.963332 comb 1.960000 user 1.960000 sys 0.000000 (median of 10)
revision: large amount; added files: large amount; rename large amount;
08ea3258278e d9fa043f30c0
before: ! wall 0.593880 comb 0.600000 user 0.590000 sys 0.010000 (median of 15)
after: ! wall 0.251679 comb 0.250000 user 0.250000 sys 0.000000 (median of 38)
revision: small amount; added files: large amount; rename large amount;
df6f7a526b60 a83dc6a2d56f
before: ! wall 0.013414 comb 0.020000 user 0.020000 sys 0.000000 (median of 220)
after: ! wall 0.013222 comb 0.020000 user 0.020000 sys 0.000000 (median of 223)
revision: small amount; added files: large amount; rename small amount;
4aa4e1f8e19a 169138063d63
before: ! wall 0.002711 comb 0.000000 user 0.000000 sys 0.000000 (median of 1000)
after: ! wall 0.001631 comb 0.000000 user 0.000000 sys 0.000000 (median of 1000)
revision: small amount; added files: small amount; rename small amount;
4bc173b045a6 964879152e2e
before: ! wall 0.000077 comb 0.000000 user 0.000000 sys 0.000000 (median of 12208)
after: ! wall 0.000078 comb 0.000000 user 0.000000 sys 0.000000 (median of 12012)
revision: medium amount; added files: large amount; rename medium amount;
c95f1ced15f2 2c68e87c3efe
before: ! wall 0.410067 comb 0.410000 user 0.410000 sys 0.000000 (median of 23)
after: ! wall 0.207786 comb 0.200000 user 0.200000 sys 0.000000 (median of 46)
revision: medium amount; added files: medium amount; rename small amount;
d343da0c55a8 d7746d32bf9d
before: ! wall 0.097004 comb 0.090000 user 0.090000 sys 0.000000 (median of 100)
after: ! wall 0.038495 comb 0.030000 user 0.030000 sys 0.000000 (median of 100)
Differential Revision: https://phab.mercurial-scm.org/D7074
#require serve
$ hg init test
$ cd test
$ for i in 0 1 2 3 4 5 6 7 8; do
> echo $i >> foo
> hg commit -A -m $i
> done
adding foo
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
checked 9 changesets with 9 changes to 1 files
$ hg serve -p $HGPORT -d --pid-file=hg.pid
$ cat hg.pid >> $DAEMON_PIDS
$ cd ..
$ hg init new
http incoming
$ hg -R new incoming http://localhost:$HGPORT/
comparing with http://localhost:$HGPORT/
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
changeset: 2:d9f42cd1a1ec
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
changeset: 3:376476025137
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 3
changeset: 4:70d7eb252d49
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 4
changeset: 5:ad284ee3b5ee
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 5
changeset: 6:e9229f2de384
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 6
changeset: 7:d152815bb8db
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 7
changeset: 8:e4feb4ac9035
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 8
$ hg -R new incoming -r 4 http://localhost:$HGPORT/
comparing with http://localhost:$HGPORT/
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
changeset: 2:d9f42cd1a1ec
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
changeset: 3:376476025137
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 3
changeset: 4:70d7eb252d49
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 4
local incoming
$ hg -R new incoming test
comparing with test
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
changeset: 2:d9f42cd1a1ec
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
changeset: 3:376476025137
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 3
changeset: 4:70d7eb252d49
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 4
changeset: 5:ad284ee3b5ee
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 5
changeset: 6:e9229f2de384
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 6
changeset: 7:d152815bb8db
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 7
changeset: 8:e4feb4ac9035
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 8
$ hg -R new incoming -r 4 test
comparing with test
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
changeset: 2:d9f42cd1a1ec
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
changeset: 3:376476025137
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 3
changeset: 4:70d7eb252d49
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 4
limit to 2 changesets
$ hg -R new incoming -l 2 test
comparing with test
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
limit to 2 changesets, test with -p --git
$ hg -R new incoming -l 2 -p --git test
comparing with test
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
diff --git a/foo b/foo
new file mode 100644
--- /dev/null
+++ b/foo
@@ -0,0 +1,1 @@
+0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
diff --git a/foo b/foo
--- a/foo
+++ b/foo
@@ -1,1 +1,2 @@
0
+1
test with --bundle
$ hg -R new incoming --bundle test.hg http://localhost:$HGPORT/
comparing with http://localhost:$HGPORT/
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
changeset: 2:d9f42cd1a1ec
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
changeset: 3:376476025137
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 3
changeset: 4:70d7eb252d49
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 4
changeset: 5:ad284ee3b5ee
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 5
changeset: 6:e9229f2de384
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 6
changeset: 7:d152815bb8db
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 7
changeset: 8:e4feb4ac9035
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 8
$ hg -R new incoming --bundle test2.hg test
comparing with test
changeset: 0:00a43fa82f62
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
changeset: 1:5460a410df01
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
changeset: 2:d9f42cd1a1ec
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
changeset: 3:376476025137
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 3
changeset: 4:70d7eb252d49
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 4
changeset: 5:ad284ee3b5ee
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 5
changeset: 6:e9229f2de384
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 6
changeset: 7:d152815bb8db
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 7
changeset: 8:e4feb4ac9035
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 8
test the resulting bundles
$ hg init temp
$ hg init temp2
$ hg -R temp unbundle test.hg
adding changesets
adding manifests
adding file changes
added 9 changesets with 9 changes to 1 files
new changesets 00a43fa82f62:e4feb4ac9035 (9 drafts)
(run 'hg update' to get a working copy)
$ hg -R temp2 unbundle test2.hg
adding changesets
adding manifests
adding file changes
added 9 changesets with 9 changes to 1 files
new changesets 00a43fa82f62:e4feb4ac9035 (9 drafts)
(run 'hg update' to get a working copy)
$ hg -R temp tip
changeset: 8:e4feb4ac9035
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 8
$ hg -R temp2 tip
changeset: 8:e4feb4ac9035
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 8
$ rm -r temp temp2 new
test outgoing
$ hg clone test test-dev
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd test-dev
$ for i in 9 10 11 12 13; do
> echo $i >> foo
> hg commit -A -m $i
> done
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
checked 14 changesets with 14 changes to 1 files
$ cd ..
$ hg -R test-dev outgoing test
comparing with test
searching for changes
changeset: 9:d89d4abea5bc
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 9
changeset: 10:820095aa7158
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 10
changeset: 11:09ede2f3a638
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 11
changeset: 12:e576b1bed305
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 12
changeset: 13:96bbff09a7cc
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 13
test outgoing with secret changesets
$ hg -R test-dev phase --force --secret 9
$ hg -R test-dev outgoing test
comparing with test
searching for changes
no changes found (ignored 5 secret changesets)
[1]
$ hg -R test-dev phase --draft -r 'head()'
limit to 3 changesets
$ hg -R test-dev outgoing -l 3 test
comparing with test
searching for changes
changeset: 9:d89d4abea5bc
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 9
changeset: 10:820095aa7158
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 10
changeset: 11:09ede2f3a638
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 11
$ hg -R test-dev outgoing http://localhost:$HGPORT/
comparing with http://localhost:$HGPORT/
searching for changes
changeset: 9:d89d4abea5bc
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 9
changeset: 10:820095aa7158
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 10
changeset: 11:09ede2f3a638
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 11
changeset: 12:e576b1bed305
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 12
changeset: 13:96bbff09a7cc
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 13
$ hg -R test-dev outgoing -r 11 http://localhost:$HGPORT/
comparing with http://localhost:$HGPORT/
searching for changes
changeset: 9:d89d4abea5bc
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 9
changeset: 10:820095aa7158
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 10
changeset: 11:09ede2f3a638
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 11
incoming from empty remote repository
$ hg init r1
$ hg init r2
$ echo a > r1/foo
$ hg -R r1 ci -Ama
adding foo
$ hg -R r1 incoming r2 --bundle x.hg
comparing with r2
searching for changes
no changes found
[1]
Create a "split" repo that pulls from r1 and pushes to r2, using default-push
$ hg clone r1 split
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat > split/.hg/hgrc << EOF
> [paths]
> default = $TESTTMP/r3
> default-push = $TESTTMP/r2
> EOF
$ hg -R split outgoing
comparing with $TESTTMP/r2
searching for changes
changeset: 0:3e92d79f743a
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
Use default:pushurl instead of default-push
Windows needs a leading slash to make a URL that passes all of the checks
$ WD=`pwd`
#if windows
$ WD="/$WD"
#endif
$ cat > split/.hg/hgrc << EOF
> [paths]
> default = $WD/r3
> default:pushurl = file://$WD/r2
> EOF
$ hg -R split outgoing
comparing with file:/*/$TESTTMP/r2 (glob)
searching for changes
changeset: 0:3e92d79f743a
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
Push and then double-check outgoing
$ echo a >> split/foo
$ hg -R split commit -Ama
$ hg -R split push
pushing to file:/*/$TESTTMP/r2 (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
$ hg -R split outgoing
comparing with file:/*/$TESTTMP/r2 (glob)
searching for changes
no changes found
[1]