sparse-revlog: new requirement enabled with format.sparse-revlog
The meaning of the new 'sparse-revlog' requirement is that the revlogs are
allowed to contain wider delta chains with larger holes between the interesting
chunks. These sparse delta chains should be read in several chunks to avoid a
potential explosion of memory usage.
Former version won't know how to read a delta chain in several chunks. They
would keep reading them in a single read, and therefore would be subject to the
potential memory explosion. Hence this new requirement: only versions having
support of sparse-revlog reading should be allowed to read such a revlog.
Implementation of this new algorithm and tools to enable or disable the
requirement will follow in the next changesets.
#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
searching for copies back to rev 1
unmatched files in local:
b
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 ..