narrow: allow merging non-conflicting change outside of the narrow spec
We use the mergestate to carry information about these merge action and
reprocess them at commit time to apply the necessary update.
The dirstate itself is never affected and remains "pure", with content only in
the narrow-spec. This file involved in such merge are therefor not listed in `hg
status`.
The current testing is based on a modification of the previous testing, that
refused to do such merges. As a result it is a bit simple and more extensive
code and testing testing will have to be introduced later. I am planning to do
this extra testing, soon.
In addition, this only works for flat manifest. Support for tree manifest will
need more work. I am not currently planning to do this work.
Differential Revision: https://phab.mercurial-scm.org/D12119
test sparse
$ hg init myrepo
$ cd myrepo
$ cat >> $HGRCPATH <<EOF
> [extensions]
> sparse=
> purge=
> strip=
> rebase=
> EOF
$ echo a > index.html
$ echo x > data.py
$ echo z > readme.txt
$ cat > base.sparse <<EOF
> [include]
> *.sparse
> EOF
$ hg ci -Aqm 'initial'
$ cat > webpage.sparse <<EOF
> %include base.sparse
> [include]
> *.html
> EOF
$ hg ci -Aqm 'initial'
Clear rules when there are includes
$ hg debugsparse --include *.py
$ ls -A
.hg
data.py
$ hg debugsparse --clear-rules
$ ls -A
.hg
base.sparse
data.py
index.html
readme.txt
webpage.sparse
Clear rules when there are excludes
$ hg debugsparse --exclude *.sparse
$ ls -A
.hg
data.py
index.html
readme.txt
$ hg debugsparse --clear-rules
$ ls -A
.hg
base.sparse
data.py
index.html
readme.txt
webpage.sparse
Clearing rules should not alter profiles
$ hg debugsparse --enable-profile webpage.sparse
$ ls -A
.hg
base.sparse
index.html
webpage.sparse
$ hg debugsparse --include *.py
$ ls -A
.hg
base.sparse
data.py
index.html
webpage.sparse
$ hg debugsparse --clear-rules
$ ls -A
.hg
base.sparse
index.html
webpage.sparse