Mercurial > hg
view tests/test-clone-failure @ 9116:f90bbf1ea09f
inotify: fix issue1375, add a test.
The biggest problem was the data structure, which did not allow changing
a file into a directory or vice versa. This problem is fixed by b55d44719b47.
The walk() method also had an issue in this case:
- we know 'path' as a directory. inotify server sleeps.
- 'path' is deleted
- 'path' is recreated as a file
- the server catches up here, and see the deletion. it instantiates a scan(),
which in its turn calls for walk(repo, path).
- walk() then assumes that 'path' is a directory and calls os.listdir on it,
which raises an OSError(errno.ENOTDIR)
Catch the error, and yield the file instead of the directory contents.
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Mon, 13 Jul 2009 16:49:05 +0200 |
parents | 6c82beaaa11a |
children | 567648eab1dd |
line wrap: on
line source
#!/bin/sh # No local source hg clone a b echo $? # No remote source hg clone http://127.0.0.1:3121/a b echo $? rm -rf b # work around bug with http clone # Inaccessible source mkdir a chmod 000 a hg clone a b echo $? # Inaccessible destination mkdir b cd b hg init hg clone . ../a echo $? cd .. chmod 700 a rm -r a b # Source of wrong type if "$TESTDIR/hghave" -q fifo; then mkfifo a hg clone a b echo $? rm a else echo "abort: repository a not found!" echo 255 fi # Default destination, same directory mkdir q cd q hg init cd .. hg clone q # destination directory not empty mkdir a echo stuff > a/a hg clone q a echo $? # leave existing directory in place after clone failure hg init c cd c echo c > c hg commit -A -m test chmod -rx .hg/store/data cd .. mkdir d hg clone c d 2> err echo $? test -d d && echo "dir is still here" || echo "dir is gone" test -d d/.hg && echo "repo is still here" || echo "repo is gone" true