]> gitweb.factorcode.org Git - factor.git/commitdiff
When deleting a file, if it fails with "Access is denied" then set the file
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 19 Oct 2011 09:31:48 +0000 (02:31 -0700)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 19 Oct 2011 09:28:45 +0000 (02:28 -0700)
attributes to normal and try again. Some files in the .git directory are set
to read-only, preventing the build machines from deleting old builds.

basis/io/directories/windows/windows.factor
basis/io/files/windows/windows.factor
basis/windows/kernel32/kernel32.factor

index b889f435e41addb3dcd22916299b7970f85f1a08..3d1bfddde597dccbd20a692f6e2fa3cdc87a9630 100644 (file)
@@ -19,8 +19,21 @@ M: windows move-file ( from to -- )
 
 ERROR: file-delete-failed path error ;
 
+: delete-file-throws ( path -- )
+    DeleteFile win32-error=0/f ;
+
+: delete-read-only-file ( path -- )
+    [ set-file-normal-attribute ] [ delete-file-throws ] bi ;
+
+: (delete-file) ( path -- )
+    dup DeleteFile 0 = [
+        GetLastError ERROR_ACCESS_DENIED =
+        [ delete-read-only-file ] [ win32-error ] if
+    ] [ drop ] if ;
+
 M: windows delete-file ( path -- )
-    [ normalize-path DeleteFile win32-error=0/f ]
+    normalize-path
+    [ (delete-file) ]
     [ \ file-delete-failed boa rethrow ] recover ;
 
 M: windows copy-file ( from to -- )
index f25a19df9b3cc079e0dc746406600340343c36c0..0b8c116c0f7289679920f6c81d00ee7519ea0d49 100755 (executable)
@@ -281,6 +281,15 @@ SYMBOLS: +read-only+ +hidden+ +system+
 +sparse-file+ +reparse-point+ +compressed+ +offline+
 +not-content-indexed+ +encrypted+ ;
 
+: read-only? ( file-info -- ? )
+    attributes>> +read-only+ swap member? ;
+    
+: set-file-attributes ( path flags -- )
+    SetFileAttributes win32-error=0/f ;
+    
+: set-file-normal-attribute ( path -- )
+    FILE_ATTRIBUTE_NORMAL set-file-attributes ;
+
 : win32-file-attribute ( n symbol attr -- )
     rot mask? [ , ] [ drop ] if ;
 
index be11fc66a0ad8ae871df1b917450f8623861cdd7..0ab4e5ef97a70dd55903af8b029db89f942328df 100644 (file)
@@ -1770,7 +1770,8 @@ ALIAS: SetEnvironmentVariable SetEnvironmentVariableW
 ! FUNCTION: SetFileApisToANSI
 ! FUNCTION: SetFileApisToOEM
 ! FUNCTION: SetFileAttributesA
-! FUNCTION: SetFileAttributesW
+FUNCTION: BOOL SetFileAttributesW ( LPCTSTR lpFileName, DWORD dwFileAttributes ) ;
+ALIAS: SetFileAttributes SetFileAttributesW
 FUNCTION: DWORD SetFilePointer ( HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod ) ;
 FUNCTION: DWORD SetFilePointerEx ( HANDLE hFile, LARGE_INTEGER lDistanceToMove, PLARGE_INTEGER lpDistanceToMoveHigh, DWORD dwMoveMethod ) ;
 ! FUNCTION: SetFileShortNameA