largefiles: fix 'hg clone . ../foo' OSError abort
Operating on a non-existant file can cause both IOError and OSError,
depending on the function used: open raises IOError, os.lstat raises
OSError.
The largefiles code called dirstate.normal, which in turn calls
os.lstat, so OSError is the right exception to catch here.
--- a/hgext/largefiles/lfutil.py Sun Nov 20 23:09:32 2011 +0100
+++ b/hgext/largefiles/lfutil.py Tue Nov 22 17:51:43 2011 +0100
@@ -158,7 +158,7 @@
try:
if hash == hashfile(lfile):
lfdirstate.normal(lfile)
- except IOError, err:
+ except OSError, err:
if err.errno != errno.ENOENT:
raise
--- a/tests/test-largefiles.t Sun Nov 20 23:09:32 2011 +0100
+++ b/tests/test-largefiles.t Tue Nov 22 17:51:43 2011 +0100
@@ -252,13 +252,12 @@
Clone a largefiles repo.
- $ cd ..
- $ hg clone a b
+ $ hg clone . ../b
updating to branch default
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
getting changed largefiles
3 largefiles updated, 0 removed
- $ cd b
+ $ cd ../b
$ hg log --template '{rev}:{node|short} {desc|firstline}\n'
7:daea875e9014 add/edit more largefiles
6:4355d653f84f edit files yet again