stream-clone: disable gc for the entry listing section for the v2 format
This is similar to the change we did for the v3 format in 6e4c8366c5ce.
The benchmark bellow show this gives us a notable gains, especially on larger
repositories.
### benchmark.name = hg.perf.stream-locked-section
# benchmark.name = hg.perf.stream-locked-section
# bin-env-vars.hg.flavor = default
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.version = v2
## data-env-vars.name = pypy-2018-08-01-zstd-sparse-revlog
5e931bf8707c: 0.503820 ~~~~~
1106d1bf695e: 0.470078 (-6.70%, -0.03)
## data-env-vars.name = pypy-2024-03-22-zstd-sparse-revlog
5e931bf8707c: 0.535756 ~~~~~
1106d1bf695e: 0.490249 (-8.49%, -0.05)
## data-env-vars.name = heptapod-public-2024-03-25-zstd-sparse-revlog
5e931bf8707c: 1.327041 ~~~~~
1106d1bf695e: 1.174636 (-11.48%, -0.15)
## data-env-vars.name = netbeans-2018-08-01-zstd-sparse-revlog
5e931bf8707c: 2.439158 ~~~~~
1106d1bf695e: 2.220515 (-8.96%, -0.22)
## data-env-vars.name = netbeans-2019-11-07-zstd-sparse-revlog
5e931bf8707c: 2.630794 ~~~~~
1106d1bf695e: 2.261473 (-14.04%, -0.37)
## data-env-vars.name = mozilla-central-2018-08-01-zstd-sparse-revlog
5e931bf8707c: 5.769002 ~~~~~
1106d1bf695e: 5.062000 (-12.26%, -0.71)
## data-env-vars.name = mozilla-try-2019-02-18-zstd-sparse-revlog
5e931bf8707c: 13.351750 ~~~~~
1106d1bf695e: 12.346655 (-7.53%, -1.01)
## data-env-vars.name = mozilla-central-2024-03-22-zstd-sparse-revlog
5e931bf8707c: 10.772939 ~~~~~
1106d1bf695e: 9.495407 (-11.86%, -1.28)
## data-env-vars.name = mozilla-unified-2024-03-22-zstd-sparse-revlog
5e931bf8707c: 10.864297 ~~~~~
1106d1bf695e: 9.475597 (-12.78%, -1.39)
## data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
5e931bf8707c: 17.448335 ~~~~~
1106d1bf695e: 16.027474 (-8.14%, -1.42)
#require execbit
Create extension that can disable exec checks:
$ cat > noexec.py <<EOF
> from mercurial import extensions, util
> def setflags(orig, f, l, x):
> pass
> def checkexec(orig, path):
> return False
> def extsetup(ui):
> extensions.wrapfunction(util, 'setflags', setflags)
> extensions.wrapfunction(util, 'checkexec', checkexec)
> EOF
$ hg init unix-repo
$ cd unix-repo
$ touch a
$ hg add a
$ hg commit -m 'unix: add a'
$ hg clone . ../win-repo
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ chmod +x a
$ hg commit -m 'unix: chmod a'
$ hg manifest -v
755 * a
$ cd ../win-repo
$ touch b
$ hg add b
$ hg commit -m 'win: add b'
$ hg manifest -v
644 a
644 b
$ hg pull
pulling from $TESTTMP/unix-repo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 0 files (+1 heads)
new changesets 2d8bcf2dda39
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg manifest -v -r tip
755 * a
Simulate a Windows merge:
$ hg --config extensions.n=$TESTTMP/noexec.py merge --debug
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: a03b0deabf2b, local: d6fa54f68ae1+, remote: 2d8bcf2dda39
a: update permissions -> e
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Simulate a Windows commit:
$ hg --config extensions.n=$TESTTMP/noexec.py commit -m 'win: merge'
$ hg manifest -v
755 * a
644 b
$ cd ..