##// END OF EJS Templates
repository: define manifest interfaces...
repository: define manifest interfaces The long march towards declaring interfaces for repository primitives continues. This commit essentially defines interfaces based on the following types: * manifest.manifestdict -> imanifestdict * manifest.manifestlog -> imanifestlog * manifest.memmanifestctx -> imanifestrevisionwritable * manifest.manifestctx -> imanifestrevisionstored * manifest.memtreemanifestctx -> imanifestrevisionwritable * manifest.treemanifestctx -> imanifestrevisionstored * util.dirs -> idirs The interfaces are thoroughly documented. Their documentation is now better than the documentation in manifest.py in many cases. With the exception of util.dirs, classes have been annotated with their interfaces. (I didn't feel like util.dirs needed the proper interface treatment.) Tests have been added demonstrating that all classes and instances conform to their interfaces. This work was much easier than filelogs. That's because Durham did an excellent job formalizing the manifest API a while back. There are still some minor kludges with the interfaces that should probably be addressed. But the primary goal with interface declarations is getting something established. Once we have an interface, we can modify it later easily enough. Differential Revision: https://phab.mercurial-scm.org/D3869

File last commit:

r37439:99844885 default
r38549:c82ea938 default
Show More
test-audit-path.t
240 lines | 5.0 KiB | text/troff | Tads3Lexer
/ tests / test-audit-path.t
Gregory Szorc
tests: disable test-audit-path.t with simple store...
r37439 The simple store doesn't escape paths robustly and can't store paths
with periods, etc. So much of this test fails with it.
#require no-reposimplestore
Martin Geisler
tests: unify test-audit-path
r11855 $ hg init
Mads Kiilerich
tests: convert some 'hghave symlink' to #if...
r16908 audit of .hg
Martin Geisler
tests: unify test-audit-path
r11855
$ hg add .hg/00changelog.i
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path contains illegal component: .hg/00changelog.i
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-audit-path
r11855
Mads Kiilerich
tests: convert some 'hghave symlink' to #if...
r16908 #if symlink
Symlinks
Martin Geisler
tests: unify test-audit-path
r11855 $ mkdir a
$ echo a > a/a
$ hg ci -Ama
adding a/a
$ ln -s a b
$ echo b > a/b
$ hg add b/b
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path 'b/b' traverses symbolic link 'b'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-audit-path
r11855 $ hg add b
should still fail - maybe
$ hg add b/b
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path 'b/b' traverses symbolic link 'b'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-audit-path
r11855
Pierre-Yves David
context: use a the nofsauditor when matching file in history (issue4749)...
r27234 $ hg commit -m 'add symlink b'
Test symlink traversing when accessing history:
-----------------------------------------------
(build a changeset where the path exists as a directory)
$ hg up 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ mkdir b
$ echo c > b/a
$ hg add b/a
$ hg ci -m 'add directory b'
created new head
Test that hg cat does not do anything wrong the working copy has 'b' as directory
$ hg cat b/a
c
$ hg cat -r "desc(directory)" b/a
c
$ hg cat -r "desc(symlink)" b/a
b/a: no such file in rev bc151a1f53bd
[1]
Test that hg cat does not do anything wrong the working copy has 'b' as a symlink (issue4749)
$ hg up 'desc(symlink)'
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg cat b/a
b/a: no such file in rev bc151a1f53bd
[1]
$ hg cat -r "desc(directory)" b/a
c
$ hg cat -r "desc(symlink)" b/a
b/a: no such file in rev bc151a1f53bd
[1]
Mads Kiilerich
tests: convert some 'hghave symlink' to #if...
r16908 #endif
Martin Geisler
tests: unify test-audit-path
r11855 unbundle tampered bundle
$ hg init target
$ cd target
Thomas Arendsen Hein
tests: make tests work if directory contains special characters...
r16350 $ hg unbundle "$TESTDIR/bundles/tampered.hg"
Martin Geisler
tests: unify test-audit-path
r11855 adding changesets
adding manifests
adding file changes
added 5 changesets with 6 changes to 6 files (+4 heads)
Denis Laxalde
transaction-summary: show the range of new revisions upon pull/unbundle (BC)...
r34662 new changesets b7da9bf6b037:fc1393d727bc
Martin Geisler
tests: unify test-audit-path
r11855 (run 'hg heads' to see heads, 'hg merge' to merge)
attack .hg/test
$ hg manifest -r0
.hg/test
$ hg update -Cr0
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path contains illegal component: .hg/test
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-audit-path
r11855
attack foo/.hg/test
$ hg manifest -r1
foo/.hg/test
$ hg update -Cr1
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path 'foo/.hg/test' is inside nested repo 'foo'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-audit-path
r11855
attack back/test where back symlinks to ..
$ hg manifest -r2
back
back/test
Mads Kiilerich
tests: convert some 'hghave symlink' to #if...
r16908 #if symlink
Martin Geisler
tests: unify test-audit-path
r11855 $ hg update -Cr2
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 abort: path 'back/test' traverses symbolic link 'back'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Mads Kiilerich
tests: convert some 'hghave symlink' to #if...
r16908 #else
('back' will be a file and cause some other system specific error)
$ hg update -Cr2
Matt Harbison
context: skip path conflicts by default when clearing unknown file (issue5776)...
r37119 abort: $TESTTMP/target/back/test: $ENOTDIR$
Mads Kiilerich
tests: convert some 'hghave symlink' to #if...
r16908 [255]
#endif
Martin Geisler
tests: unify test-audit-path
r11855
attack ../test
$ hg manifest -r3
../test
Mark Thomas
tests: add test demonstrating regression in path audit...
r34833 $ mkdir ../test
$ echo data > ../test/file
Martin Geisler
tests: unify test-audit-path
r11855 $ hg update -Cr3
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path contains illegal component: ../test
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Mark Thomas
tests: add test demonstrating regression in path audit...
r34833 $ cat ../test/file
Mark Thomas
context: audit paths before clearing unknown files and dirs...
r34834 data
Martin Geisler
tests: unify test-audit-path
r11855
attack /tmp/test
$ hg manifest -r4
/tmp/test
$ hg update -Cr4
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path contains illegal component: /tmp/test
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..
Yuya Nishihara
tests: show cache of audited paths is never invalidated
r33704
Test symlink traversal on merge:
--------------------------------
#if symlink
set up symlink hell
$ mkdir merge-symlink-out
$ hg init merge-symlink
$ cd merge-symlink
$ touch base
$ hg commit -qAm base
$ ln -s ../merge-symlink-out a
$ hg commit -qAm 'symlink a -> ../merge-symlink-out'
$ hg up -q 0
$ mkdir a
$ touch a/poisoned
$ hg commit -qAm 'file a/poisoned'
$ hg log -G -T '{rev}: {desc}\n'
@ 2: file a/poisoned
|
| o 1: symlink a -> ../merge-symlink-out
|/
o 0: base
try trivial merge
$ hg up -qC 1
$ hg merge 2
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 abort: path 'a/poisoned' traverses symbolic link 'a'
[255]
Yuya Nishihara
tests: show cache of audited paths is never invalidated
r33704
try rebase onto other revision: cache of audited paths should be discarded,
and the rebase should fail (issue5628)
$ hg up -qC 2
$ hg rebase -s 2 -d 1 --config extensions.rebase=
rebasing 2:e73c21d6b244 "file a/poisoned" (tip)
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 abort: path 'a/poisoned' traverses symbolic link 'a'
[255]
Yuya Nishihara
tests: show cache of audited paths is never invalidated
r33704 $ ls ../merge-symlink-out
$ cd ..
Test symlink traversal on update:
---------------------------------
$ mkdir update-symlink-out
$ hg init update-symlink
$ cd update-symlink
$ ln -s ../update-symlink-out a
$ hg commit -qAm 'symlink a -> ../update-symlink-out'
$ hg rm a
$ mkdir a && touch a/b
$ hg ci -qAm 'file a/b' a/b
$ hg up -qC 0
$ hg rm a
$ mkdir a && touch a/c
$ hg ci -qAm 'rm a, file a/c'
$ hg log -G -T '{rev}: {desc}\n'
@ 2: rm a, file a/c
|
| o 1: file a/b
|/
o 0: symlink a -> ../update-symlink-out
try linear update where symlink already exists:
$ hg up -qC 0
$ hg up 1
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 abort: path 'a/b' traverses symbolic link 'a'
Yuya Nishihara
tests: show cache of audited paths is never invalidated
r33704 [255]
try linear update including symlinked directory and its content: paths are
audited first by calculateupdates(), where no symlink is created so both
'a' and 'a/b' are taken as good paths. still applyupdates() should fail.
$ hg up -qC null
$ hg up 1
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 abort: path 'a/b' traverses symbolic link 'a'
Yuya Nishihara
pathauditor: disable cache of audited paths by default (issue5628)...
r33705 [255]
Yuya Nishihara
tests: show cache of audited paths is never invalidated
r33704 $ ls ../update-symlink-out
try branch update replacing directory with symlink, and its content: the
path 'a' is audited as a directory first, which should be audited again as
a symlink.
$ rm -f a
$ hg up -qC 2
$ hg up 1
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 abort: path 'a/b' traverses symbolic link 'a'
Yuya Nishihara
pathauditor: disable cache of audited paths by default (issue5628)...
r33705 [255]
Yuya Nishihara
tests: show cache of audited paths is never invalidated
r33704 $ ls ../update-symlink-out
$ cd ..
#endif