sapling/tests/test-sparse-import.t
Martijn Pieters 05d97a9461 sparse: provide a change summary on file and rule count deltas
Summary:
This allows a third-party tool like Buck report more detail on what a sparse
command actually achieved.

Test Plan: Run the test suite.

Reviewers: #sourcecontrol, durham, rmcelroy, ikostia

Reviewed By: ikostia

Subscribers: mjpieters

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

Tasks: 17150508

Tags: autosparse

Signature: t1:4962550:1493307403:d14e16d079121688a4eb69f0d69cd02ab55c4936
2017-04-27 08:37:13 -07:00

170 lines
3.3 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