sapling/tests/test-sparse-import.t
Martijn Pieters 372c6c955f sparse: restore sparse profile on exception during import
Summary: Like _config, _import needs to restore the pre-existing profile if refreshing failed. Otherwise we have marked new rules as imported and applying without that actually being true.

Test Plan: rt test-sparse*

Reviewers: #sourcecontrol, rmcelroy, durham, simonfar

Reviewed By: simonfar

Subscribers: simonfar, mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D4985415

Tasks: 17793415

Tags: autosparse

Signature: t1:4985415:1493893462:ee4bcbf558706c3d2f58367dd7bf2533ccf1b824
2017-05-04 04:58:43 -07:00

187 lines
3.7 KiB
Perl

test sparse
$ hg init myrepo
$ cd myrepo
$ cat >> $HGRCPATH <<EOF
> [extensions]
> sparse=$TESTDIR/../hgext3rd/sparse.py
> 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'
Import a rules file against a 'blank' sparse profile
$ cat > $HGTMP/rules_to_import <<EOF
> [include]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import
$ ls
data.py
$ hg sparse --reset
$ rm .hg/sparse
$ cat > $HGTMP/rules_to_import <<EOF
> %include base.sparse
> [include]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import
$ ls
base.sparse
data.py
webpage.sparse
$ hg sparse --reset
$ rm .hg/sparse
Start against an existing profile; rules *already active* should be ignored
$ hg sparse --enable-profile webpage.sparse
$ hg sparse --include *.py
$ cat > $HGTMP/rules_to_import <<EOF
> %include base.sparse
> [include]
> *.html
> *.txt
> [exclude]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import
$ ls
base.sparse
index.html
readme.txt
webpage.sparse
$ cat .hg/sparse
%include webpage.sparse
[include]
*.py
*.txt
[exclude]
*.py
$ hg sparse --reset
$ rm .hg/sparse
Same tests, with -Tjson enabled to output summaries
$ cat > $HGTMP/rules_to_import <<EOF
> [include]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import -Tjson
[
{
"exclude_rules_added": 0,
"files_added": 0,
"files_conflicting": 0,
"files_dropped": 4,
"include_rules_added": 1,
"profiles_added": 0
}
]
$ hg sparse --reset
$ rm .hg/sparse
$ cat > $HGTMP/rules_to_import <<EOF
> %include base.sparse
> [include]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import -Tjson
[
{
"exclude_rules_added": 0,
"files_added": 0,
"files_conflicting": 0,
"files_dropped": 2,
"include_rules_added": 1,
"profiles_added": 1
}
]
$ hg sparse --reset
$ rm .hg/sparse
$ hg sparse --enable-profile webpage.sparse
$ hg sparse --include *.py
$ cat > $HGTMP/rules_to_import <<EOF
> %include base.sparse
> [include]
> *.html
> *.txt
> [exclude]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import -Tjson
[
{
"exclude_rules_added": 1,
"files_added": 1,
"files_conflicting": 0,
"files_dropped": 1,
"include_rules_added": 1,
"profiles_added": 0
}
]
If importing results in no new rules being added, no refresh should take place!
$ cat > $HGTMP/trap_sparse_refresh.py <<EOF
> from mercurial import error, extensions
> def extsetup(ui):
> def abort_refresh(ui, *args):
> raise error.Abort('sparse._refresh called!')
> def sparseloaded(loaded):
> if not loaded:
> return
> sparse = extensions.find('sparse')
> sparse._refresh = abort_refresh
> extensions.afterloaded('sparse', sparseloaded)
> EOF
$ cat >> $HGRCPATH <<EOF
> [extensions]
> trap_sparse_refresh=$HGTMP/trap_sparse_refresh.py
> EOF
$ cat > $HGTMP/rules_to_import <<EOF
> [include]
> *.py
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import
If an exception is raised during refresh, restore the existing rules again.
$ cat > $HGTMP/rules_to_import <<EOF
> [exclude]
> *.html
> EOF
$ hg sparse --import-rules $HGTMP/rules_to_import
abort: sparse._refresh called!
[255]
$ cat .hg/sparse
%include webpage.sparse
[include]
*.py
*.txt
[exclude]
*.py