mercurial/win32.py
branchstable
changeset 21226 4898c37e03c0
parent 21193 07f9825865de
child 24418 a2285e2fc949
--- a/mercurial/win32.py	Thu May 01 17:48:02 2014 -0500
+++ b/mercurial/win32.py	Sat May 03 10:33:54 2014 +0200
@@ -25,7 +25,6 @@
 # GetLastError
 _ERROR_SUCCESS = 0
 _ERROR_NO_MORE_FILES = 18
-_ERROR_SHARING_VIOLATION = 32
 _ERROR_INVALID_PARAMETER = 87
 _ERROR_INSUFFICIENT_BUFFER = 122
 
@@ -61,9 +60,7 @@
 
 _OPEN_EXISTING = 3
 
-_FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
 _FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
-_FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
 
 # SetFileAttributes
 _FILE_ATTRIBUTE_NORMAL = 0x80
@@ -424,18 +421,11 @@
 def unlink(f):
     '''try to implement POSIX' unlink semantics on Windows'''
 
-    # If we can open f exclusively, no other processes must have open handles
-    # for it and we can expect its name will be deleted immediately when we
-    # close the handle unless we have another in the same process.  We also
-    # expect we shall simply fail to open f if it is a directory.
-    fh = _kernel32.CreateFileA(f, 0, 0, None, _OPEN_EXISTING,
-        _FILE_FLAG_OPEN_REPARSE_POINT | _FILE_FLAG_DELETE_ON_CLOSE, None)
-    if fh != _INVALID_HANDLE_VALUE:
-        _kernel32.CloseHandle(fh)
-        return
-    error = _kernel32.GetLastError()
-    if error != _ERROR_SHARING_VIOLATION:
-        raise ctypes.WinError(error)
+    if os.path.isdir(f):
+        # use EPERM because it is POSIX prescribed value, even though
+        # unlink(2) on directories returns EISDIR on Linux
+        raise IOError(errno.EPERM,
+                      "Unlinking directory not permitted: '%s'" % f)
 
     # POSIX allows to unlink and rename open files. Windows has serious
     # problems with doing that: