Despite the size, this is pretty straightforward.
Details
Details
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Lint Skipped - Unit
Unit Tests Skipped
( )
| hg-reviewers |
Despite the size, this is pretty straightforward.
| Lint Skipped |
| Unit Tests Skipped |
| Path | Packages | |||
|---|---|---|---|---|
| M | tests/test-fncache.t (153 lines) |
| Status | Author | Revision | |
|---|---|---|---|
| Abandoned | indygreg | ||
| Abandoned | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg | ||
| Closed | indygreg |
| Init repo1: | Init repo1: | ||||
| $ hg init repo1 | $ hg init repo1 | ||||
| $ cd repo1 | $ cd repo1 | ||||
| $ echo "some text" > a | $ echo "some text" > a | ||||
| $ hg add | $ hg add | ||||
| adding a | adding a | ||||
| $ hg ci -m first | $ hg ci -m first | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/a.i | data/a.i (reporevlogstore !) | ||||
| data/a/f62022d3d590043fa311a6f49c238b13c9d12709 (reposimplestore !) | |||||
| data/a/index (reposimplestore !) | |||||
| Testing a.i/b: | Testing a.i/b: | ||||
| $ mkdir a.i | $ mkdir a.i | ||||
| $ echo "some other text" > a.i/b | $ echo "some other text" > a.i/b | ||||
| $ hg add | $ hg add | ||||
| adding a.i/b | adding a.i/b | ||||
| $ hg ci -m second | $ hg ci -m second | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/a.i | data/a.i (reporevlogstore !) | ||||
| data/a.i.hg/b.i | data/a.i.hg/b.i (reporevlogstore !) | ||||
| data/a.i.hg/b/87213410d500fe45662db2a54f759a46c27192bb (reposimplestore !) | |||||
| data/a.i.hg/b/index (reposimplestore !) | |||||
| data/a/f62022d3d590043fa311a6f49c238b13c9d12709 (reposimplestore !) | |||||
| data/a/index (reposimplestore !) | |||||
| Testing a.i.hg/c: | Testing a.i.hg/c: | ||||
| $ mkdir a.i.hg | $ mkdir a.i.hg | ||||
| $ echo "yet another text" > a.i.hg/c | $ echo "yet another text" > a.i.hg/c | ||||
| $ hg add | $ hg add | ||||
| adding a.i.hg/c | adding a.i.hg/c | ||||
| $ hg ci -m third | $ hg ci -m third | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/a.i | data/a.i (reporevlogstore !) | ||||
| data/a.i.hg.hg/c.i | data/a.i.hg.hg/c.i (reporevlogstore !) | ||||
| data/a.i.hg/b.i | data/a.i.hg/b.i (reporevlogstore !) | ||||
| data/a.i.hg.hg/c/d81723aa78f2dd2d77884d165313984fcc9e5893 (reposimplestore !) | |||||
| data/a.i.hg.hg/c/index (reposimplestore !) | |||||
| data/a.i.hg/b/87213410d500fe45662db2a54f759a46c27192bb (reposimplestore !) | |||||
| data/a.i.hg/b/index (reposimplestore !) | |||||
| data/a/f62022d3d590043fa311a6f49c238b13c9d12709 (reposimplestore !) | |||||
| data/a/index (reposimplestore !) | |||||
| Testing verify: | Testing verify: | ||||
| $ hg verify | $ hg verify | ||||
| checking changesets | checking changesets | ||||
| checking manifests | checking manifests | ||||
| crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
| checking files | checking files | ||||
| 3 files, 3 changesets, 3 total revisions | 3 files, 3 changesets, 3 total revisions | ||||
| $ rm .hg/store/fncache | $ rm .hg/store/fncache | ||||
| $ hg verify | $ hg verify | ||||
| checking changesets | checking changesets | ||||
| checking manifests | checking manifests | ||||
| crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
| checking files | checking files | ||||
| warning: revlog 'data/a.i' not in fncache! | warning: revlog 'data/a.i' not in fncache! (reporevlogstore !) | ||||
| warning: revlog 'data/a.i.hg/c.i' not in fncache! | warning: revlog 'data/a.i.hg/c.i' not in fncache! (reporevlogstore !) | ||||
| warning: revlog 'data/a.i/b.i' not in fncache! | warning: revlog 'data/a.i/b.i' not in fncache! (reporevlogstore !) | ||||
| warning: revlog 'data/a/f62022d3d590043fa311a6f49c238b13c9d12709' not in fncache! (reposimplestore !) | |||||
| warning: revlog 'data/a/index' not in fncache! (reposimplestore !) | |||||
| warning: revlog 'data/a.i.hg/c/index' not in fncache! (reposimplestore !) | |||||
| warning: revlog 'data/a.i.hg/c/d81723aa78f2dd2d77884d165313984fcc9e5893' not in fncache! (reposimplestore !) | |||||
| warning: revlog 'data/a.i/b/87213410d500fe45662db2a54f759a46c27192bb' not in fncache! (reposimplestore !) | |||||
| warning: revlog 'data/a.i/b/index' not in fncache! (reposimplestore !) | |||||
| 3 files, 3 changesets, 3 total revisions | 3 files, 3 changesets, 3 total revisions | ||||
| 3 warnings encountered! | 3 warnings encountered! (reporevlogstore !) | ||||
| 6 warnings encountered! (reposimplestore !) | |||||
| hint: run "hg debugrebuildfncache" to recover from corrupt fncache | hint: run "hg debugrebuildfncache" to recover from corrupt fncache | ||||
| Follow the hint to make sure it works | Follow the hint to make sure it works | ||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| adding data/a.i | adding data/a.i (reporevlogstore !) | ||||
| adding data/a.i.hg/c.i | adding data/a.i.hg/c.i (reporevlogstore !) | ||||
| adding data/a.i/b.i | adding data/a.i/b.i (reporevlogstore !) | ||||
| 3 items added, 0 removed from fncache | adding data/a.i.hg/c/d81723aa78f2dd2d77884d165313984fcc9e5893 (reposimplestore !) | ||||
| adding data/a.i.hg/c/index (reposimplestore !) | |||||
| adding data/a.i/b/87213410d500fe45662db2a54f759a46c27192bb (reposimplestore !) | |||||
| adding data/a.i/b/index (reposimplestore !) | |||||
| adding data/a/f62022d3d590043fa311a6f49c238b13c9d12709 (reposimplestore !) | |||||
| adding data/a/index (reposimplestore !) | |||||
| 3 items added, 0 removed from fncache (reporevlogstore !) | |||||
| 6 items added, 0 removed from fncache (reposimplestore !) | |||||
| $ hg verify | $ hg verify | ||||
| checking changesets | checking changesets | ||||
| checking manifests | checking manifests | ||||
| crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
| checking files | checking files | ||||
| 3 files, 3 changesets, 3 total revisions | 3 files, 3 changesets, 3 total revisions | ||||
| .hg/00changelog.i | .hg/00changelog.i | ||||
| .hg/00manifest.i | .hg/00manifest.i | ||||
| .hg/cache | .hg/cache | ||||
| .hg/cache/branch2-served | .hg/cache/branch2-served | ||||
| .hg/cache/rbc-names-v1 | .hg/cache/rbc-names-v1 | ||||
| .hg/cache/rbc-revs-v1 | .hg/cache/rbc-revs-v1 | ||||
| .hg/data | .hg/data | ||||
| .hg/data/tst.d.hg | .hg/data/tst.d.hg | ||||
| .hg/data/tst.d.hg/foo.i | .hg/data/tst.d.hg/foo.i (reporevlogstore !) | ||||
| .hg/data/tst.d.hg/foo (reposimplestore !) | |||||
| .hg/data/tst.d.hg/foo/2ed2a3912a0b24502043eae84ee4b279c18b90dd (reposimplestore !) | |||||
| .hg/data/tst.d.hg/foo/index (reposimplestore !) | |||||
| .hg/dirstate | .hg/dirstate | ||||
| .hg/fsmonitor.state (fsmonitor !) | .hg/fsmonitor.state (fsmonitor !) | ||||
| .hg/last-message.txt | .hg/last-message.txt | ||||
| .hg/phaseroots | .hg/phaseroots | ||||
| .hg/requires | .hg/requires | ||||
| .hg/undo | .hg/undo | ||||
| .hg/undo.backup.dirstate | .hg/undo.backup.dirstate | ||||
| .hg/undo.backupfiles | .hg/undo.backupfiles | ||||
| .hg/fsmonitor.state (fsmonitor !) | .hg/fsmonitor.state (fsmonitor !) | ||||
| .hg/last-message.txt | .hg/last-message.txt | ||||
| .hg/requires | .hg/requires | ||||
| .hg/store | .hg/store | ||||
| .hg/store/00changelog.i | .hg/store/00changelog.i | ||||
| .hg/store/00manifest.i | .hg/store/00manifest.i | ||||
| .hg/store/data | .hg/store/data | ||||
| .hg/store/data/tst.d.hg | .hg/store/data/tst.d.hg | ||||
| .hg/store/data/tst.d.hg/_foo.i | .hg/store/data/tst.d.hg/_foo.i (reporevlogstore !) | ||||
| .hg/store/data/tst.d.hg/_foo (reposimplestore !) | |||||
| .hg/store/data/tst.d.hg/_foo/2ed2a3912a0b24502043eae84ee4b279c18b90dd (reposimplestore !) | |||||
| .hg/store/data/tst.d.hg/_foo/index (reposimplestore !) | |||||
| .hg/store/phaseroots | .hg/store/phaseroots | ||||
| .hg/store/undo | .hg/store/undo | ||||
| .hg/store/undo.backupfiles | .hg/store/undo.backupfiles | ||||
| .hg/store/undo.phaseroots | .hg/store/undo.phaseroots | ||||
| .hg/undo.backup.dirstate | .hg/undo.backup.dirstate | ||||
| .hg/undo.bookmarks | .hg/undo.bookmarks | ||||
| .hg/undo.branch | .hg/undo.branch | ||||
| .hg/undo.desc | .hg/undo.desc | ||||
| > +++ b/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider | > +++ b/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider | ||||
| > @@ -0,0 +1,1 @@ | > @@ -0,0 +1,1 @@ | ||||
| > +foo | > +foo | ||||
| > EOF | > EOF | ||||
| $ find .hg/store -name *.i | sort | $ find .hg/store -name *.i | sort | ||||
| .hg/store/00changelog.i | .hg/store/00changelog.i | ||||
| .hg/store/00manifest.i | .hg/store/00manifest.i | ||||
| .hg/store/data/bla.aux/pr~6e/_p_r_n/lpt/co~6d3/nu~6c/coma/foo._n_u_l/normal.c.i | .hg/store/data/bla.aux/pr~6e/_p_r_n/lpt/co~6d3/nu~6c/coma/foo._n_u_l/normal.c.i (reporevlogstore !) | ||||
| .hg/store/dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxx168e07b38e65eff86ab579afaaa8e30bfbe0f35f.i | .hg/store/dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxx168e07b38e65eff86ab579afaaa8e30bfbe0f35f.i (reporevlogstore !) | ||||
| .hg/store/dh/au~78/second/x.prn/fourth/fi~3afth/sixth/seventh/eighth/nineth/tenth/loremia20419e358ddff1bf8751e38288aff1d7c32ec05.i | .hg/store/dh/au~78/second/x.prn/fourth/fi~3afth/sixth/seventh/eighth/nineth/tenth/loremia20419e358ddff1bf8751e38288aff1d7c32ec05.i (reporevlogstore !) | ||||
| .hg/store/dh/enterpri/openesba/contrib-/corba-bc/netbeans/wsdlexte/src/main/java/org.net7018f27961fdf338a598a40c4683429e7ffb9743.i | .hg/store/dh/enterpri/openesba/contrib-/corba-bc/netbeans/wsdlexte/src/main/java/org.net7018f27961fdf338a598a40c4683429e7ffb9743.i (reporevlogstore !) | ||||
| .hg/store/dh/project_/resource/anotherl/followed/andanoth/andthenanextremelylongfilename0d8e1f4187c650e2f1fdca9fd90f786bc0976b6b.i | .hg/store/dh/project_/resource/anotherl/followed/andanoth/andthenanextremelylongfilename0d8e1f4187c650e2f1fdca9fd90f786bc0976b6b.i (reporevlogstore !) | ||||
| $ cd .. | $ cd .. | ||||
| Aborting lock does not prevent fncache writes | Aborting lock does not prevent fncache writes | ||||
| $ cat > exceptionext.py <<EOF | $ cat > exceptionext.py <<EOF | ||||
| > from __future__ import absolute_import | > from __future__ import absolute_import | ||||
| > import os | > import os | ||||
| $ extpath=`pwd`/exceptionext.py | $ extpath=`pwd`/exceptionext.py | ||||
| $ hg init fncachetxn | $ hg init fncachetxn | ||||
| $ cd fncachetxn | $ cd fncachetxn | ||||
| $ printf "[extensions]\nexceptionext=$extpath\n" >> .hg/hgrc | $ printf "[extensions]\nexceptionext=$extpath\n" >> .hg/hgrc | ||||
| $ touch y | $ touch y | ||||
| $ hg ci -qAm y | $ hg ci -qAm y | ||||
| abort: forced lock failure | abort: forced lock failure | ||||
| [255] | [255] | ||||
| $ cat .hg/store/fncache | $ cat .hg/store/fncache | sort | ||||
| data/y.i | data/y.i (reporevlogstore !) | ||||
| data/y/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !) | |||||
| data/y/index (reposimplestore !) | |||||
| Aborting transaction prevents fncache change | Aborting transaction prevents fncache change | ||||
| $ cat > ../exceptionext.py <<EOF | $ cat > ../exceptionext.py <<EOF | ||||
| > from __future__ import absolute_import | > from __future__ import absolute_import | ||||
| > import os | > import os | ||||
| > from mercurial import commands, error, extensions, localrepo | > from mercurial import commands, error, extensions, localrepo | ||||
| > | > | ||||
| $ rm -Rf "`dirname $extpath`/__pycache__" | $ rm -Rf "`dirname $extpath`/__pycache__" | ||||
| $ touch z | $ touch z | ||||
| $ hg ci -qAm z | $ hg ci -qAm z | ||||
| transaction abort! | transaction abort! | ||||
| rollback completed | rollback completed | ||||
| abort: forced transaction failure | abort: forced transaction failure | ||||
| [255] | [255] | ||||
| $ cat .hg/store/fncache | $ cat .hg/store/fncache | sort | ||||
| data/y.i | data/y.i (reporevlogstore !) | ||||
| data/y/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !) | |||||
| data/y/index (reposimplestore !) | |||||
| Aborted transactions can be recovered later | Aborted transactions can be recovered later | ||||
| $ cat > ../exceptionext.py <<EOF | $ cat > ../exceptionext.py <<EOF | ||||
| > from __future__ import absolute_import | > from __future__ import absolute_import | ||||
| > import os | > import os | ||||
| > from mercurial import ( | > from mercurial import ( | ||||
| > commands, | > commands, | ||||
| $ rm -f "${extpath}c" | $ rm -f "${extpath}c" | ||||
| $ rm -Rf "`dirname $extpath`/__pycache__" | $ rm -Rf "`dirname $extpath`/__pycache__" | ||||
| $ hg up -q 1 | $ hg up -q 1 | ||||
| $ touch z | $ touch z | ||||
| $ hg ci -qAm z 2>/dev/null | $ hg ci -qAm z 2>/dev/null | ||||
| [255] | [255] | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/y.i | data/y.i (reporevlogstore !) | ||||
| data/z.i | data/z.i (reporevlogstore !) | ||||
| data/y/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !) | |||||
| data/y/index (reposimplestore !) | |||||
| $ hg recover | $ hg recover | ||||
| rolling back interrupted transaction | rolling back interrupted transaction | ||||
| checking changesets | checking changesets | ||||
| checking manifests | checking manifests | ||||
| crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
| checking files | checking files | ||||
| 1 files, 1 changesets, 1 total revisions | 1 files, 1 changesets, 1 total revisions | ||||
| $ cat .hg/store/fncache | $ cat .hg/store/fncache | sort | ||||
| data/y.i | data/y.i (reporevlogstore !) | ||||
| data/y/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !) | |||||
| data/y/index (reposimplestore !) | |||||
| $ cd .. | $ cd .. | ||||
| debugrebuildfncache does nothing unless repo has fncache requirement | debugrebuildfncache does nothing unless repo has fncache requirement | ||||
| $ hg --config format.usefncache=false init nofncache | $ hg --config format.usefncache=false init nofncache | ||||
| $ cd nofncache | $ cd nofncache | ||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| $ cd repo | $ cd repo | ||||
| $ echo initial > foo | $ echo initial > foo | ||||
| $ echo initial > .bar | $ echo initial > .bar | ||||
| $ hg commit -A -m initial | $ hg commit -A -m initial | ||||
| adding .bar | adding .bar | ||||
| adding foo | adding foo | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/.bar.i | data/.bar.i (reporevlogstore !) | ||||
| data/foo.i | data/foo.i (reporevlogstore !) | ||||
| data/.bar/bb212e613448bd83ecb63be18e3e59f509e15664 (reposimplestore !) | |||||
| data/.bar/index (reposimplestore !) | |||||
| data/foo/bb212e613448bd83ecb63be18e3e59f509e15664 (reposimplestore !) | |||||
| data/foo/index (reposimplestore !) | |||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| fncache already up to date | fncache already up to date | ||||
| debugrebuildfncache restores deleted fncache file | debugrebuildfncache restores deleted fncache file | ||||
| $ rm -f .hg/store/fncache | $ rm -f .hg/store/fncache | ||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| adding data/.bar.i | adding data/.bar.i (reporevlogstore !) | ||||
| adding data/foo.i | adding data/foo.i (reporevlogstore !) | ||||
| 2 items added, 0 removed from fncache | adding data/.bar/bb212e613448bd83ecb63be18e3e59f509e15664 (reposimplestore !) | ||||
| adding data/.bar/index (reposimplestore !) | |||||
| adding data/foo/bb212e613448bd83ecb63be18e3e59f509e15664 (reposimplestore !) | |||||
| adding data/foo/index (reposimplestore !) | |||||
| 2 items added, 0 removed from fncache (reporevlogstore !) | |||||
| 4 items added, 0 removed from fncache (reposimplestore !) | |||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/.bar.i | data/.bar.i (reporevlogstore !) | ||||
| data/foo.i | data/foo.i (reporevlogstore !) | ||||
| data/.bar/bb212e613448bd83ecb63be18e3e59f509e15664 (reposimplestore !) | |||||
| data/.bar/index (reposimplestore !) | |||||
| data/foo/bb212e613448bd83ecb63be18e3e59f509e15664 (reposimplestore !) | |||||
| data/foo/index (reposimplestore !) | |||||
| Rebuild after rebuild should no-op | Rebuild after rebuild should no-op | ||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| fncache already up to date | fncache already up to date | ||||
| A single missing file should get restored, an extra file should be removed | A single missing file should get restored, an extra file should be removed | ||||
| #if reporevlogstore | |||||
| $ cat > .hg/store/fncache << EOF | $ cat > .hg/store/fncache << EOF | ||||
| > data/foo.i | > data/foo.i | ||||
| > data/bad-entry.i | > data/bad-entry.i | ||||
| > EOF | > EOF | ||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| removing data/bad-entry.i | removing data/bad-entry.i | ||||
| adding data/.bar.i | adding data/.bar.i | ||||
| 1 items added, 1 removed from fncache | 1 items added, 1 removed from fncache | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/.bar.i | data/.bar.i | ||||
| data/foo.i | data/foo.i | ||||
| #endif | |||||
| #if reposimplestore | |||||
| $ cat > .hg/store/fncache << EOF | |||||
| > data/.bar/index | |||||
| > data/.bar/bb212e613448bd83ecb63be18e3e59f509e15664 | |||||
| > data/bad-entry | |||||
| > EOF | |||||
| $ hg debugrebuildfncache | |||||
| removing data/bad-entry | |||||
| adding data/foo/bb212e613448bd83ecb63be18e3e59f509e15664 | |||||
| adding data/foo/index | |||||
| 2 items added, 1 removed from fncache | |||||
| $ cat .hg/store/fncache | sort | |||||
| data/.bar/bb212e613448bd83ecb63be18e3e59f509e15664 | |||||
| data/.bar/index | |||||
| data/foo/bb212e613448bd83ecb63be18e3e59f509e15664 | |||||
| data/foo/index | |||||
| #endif | |||||
| $ cd .. | $ cd .. | ||||
| Try a simple variation without dotencode to ensure fncache is ignorant of encoding | Try a simple variation without dotencode to ensure fncache is ignorant of encoding | ||||
| #if reporevlogstore | |||||
| $ hg --config format.dotencode=false init nodotencode | $ hg --config format.dotencode=false init nodotencode | ||||
| $ cd nodotencode | $ cd nodotencode | ||||
| $ echo initial > foo | $ echo initial > foo | ||||
| $ echo initial > .bar | $ echo initial > .bar | ||||
| $ hg commit -A -m initial | $ hg commit -A -m initial | ||||
| adding .bar | adding .bar | ||||
| adding foo | adding foo | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/.bar.i | data/.bar.i | ||||
| data/foo.i | data/foo.i | ||||
| $ rm .hg/store/fncache | $ rm .hg/store/fncache | ||||
| $ hg debugrebuildfncache | $ hg debugrebuildfncache | ||||
| adding data/.bar.i | adding data/.bar.i | ||||
| adding data/foo.i | adding data/foo.i | ||||
| 2 items added, 0 removed from fncache | 2 items added, 0 removed from fncache | ||||
| $ cat .hg/store/fncache | sort | $ cat .hg/store/fncache | sort | ||||
| data/.bar.i | data/.bar.i | ||||
| data/foo.i | data/foo.i | ||||
| #endif | |||||