Mercurial > hg
view tests/test-audit-path.t @ 14927:2aa3e07b2f07
posix, windows: introduce cachestat
This class contains a stat result, and possibly other file info to reliably
determine between two points in time whether a file has changed.
Uniquely identifying a file gives us that reliability because we either
atomic rename or append. So one of two will happen: the file 'id' will change,
or the size of the file will change.
posix implements it simply by calling os.stat() and checking if the result
has st_ino.
For now on Windows we always assume the path is uncacheable. This can be
improved on NTFS due to file IDs: http://msdn.microsoft.com/en-us/library/aa363788(v=vs.85).aspx
So we need to find out if a file path is on an NTFS drive, for that we have:
- GetVolumeInformation, which unfortunately only works with a root path (but is available on XP)
- GetVolumeInformationByHandleW, works on a full file path but requires Vista or higher
author | Idan Kamara <idankk86@gmail.com> |
---|---|
date | Mon, 25 Jul 2011 15:03:02 +0300 |
parents | cd3032437064 |
children | e0348815e806 |
line wrap: on
line source
$ hg init should fail $ hg add .hg/00changelog.i abort: path contains illegal component: .hg/00changelog.i [255] $ mkdir a $ echo a > a/a $ hg ci -Ama adding a/a $ ln -s a b $ echo b > a/b should fail $ hg add b/b abort: path 'b/b' traverses symbolic link 'b' [255] should succeed $ hg add b should still fail - maybe $ hg add b/b abort: path 'b/b' traverses symbolic link 'b' [255] unbundle tampered bundle $ hg init target $ cd target $ hg unbundle $TESTDIR/bundles/tampered.hg adding changesets adding manifests adding file changes added 5 changesets with 6 changes to 6 files (+4 heads) (run 'hg heads' to see heads, 'hg merge' to merge) attack .hg/test $ hg manifest -r0 .hg/test $ hg update -Cr0 abort: path contains illegal component: .hg/test [255] attack foo/.hg/test $ hg manifest -r1 foo/.hg/test $ hg update -Cr1 abort: path 'foo/.hg/test' is inside nested repo 'foo' [255] attack back/test where back symlinks to .. $ hg manifest -r2 back back/test $ hg update -Cr2 abort: path 'back/test' traverses symbolic link 'back' [255] attack ../test $ hg manifest -r3 ../test $ hg update -Cr3 abort: path contains illegal component: ../test [255] attack /tmp/test $ hg manifest -r4 /tmp/test $ hg update -Cr4 abort: No such file or directory: $TESTTMP/target//tmp/test [255]