largefiles: handle that a found standin file doesn't exist when removing it stable
authorMads Kiilerich <madski@unity3d.com>
Thu, 27 Oct 2016 20:06:33 +0200
branchstable
changeset 30233 3afde791dce1
parent 30232 362740e05460
child 30234 34a5f6c66bc5
largefiles: handle that a found standin file doesn't exist when removing it I somehow ended up in a situation where hg crashed on an unlink I introduced in 328545c7d8a1. I don't know how it happened and can't reproduce it. It seems like it only can happen when the file is removed between the time of check in a working directory context walk that finds a standin file, and the time of use when we try to remove it because the corresponding largefile doesn't exist. But better safe than sorry: replace the plain unlink with unlinkpath with ignoremissing=True. That will also remove remaining empty directories, which arguably is more correct.
hgext/largefiles/reposetup.py
--- a/hgext/largefiles/reposetup.py	Tue Oct 25 21:49:30 2016 +0900
+++ b/hgext/largefiles/reposetup.py	Thu Oct 27 20:06:33 2016 +0200
@@ -217,7 +217,7 @@
                             # standin. Removing a file as a side effect of
                             # running status is gross, but the alternatives (if
                             # any) are worse.
-                            self.wvfs.unlink(standin)
+                            self.wvfs.unlinkpath(standin, ignoremissing=True)
 
                     # Filter result lists
                     result = list(result)