Package: handle Windows PathAlreadyExists error code

Unfortunately, error.AccessDenied is ambiguous on Windows when it is
returned from fs.rename.
This commit is contained in:
Andrew Kelley 2023-01-11 17:54:34 -08:00
parent 2de0863380
commit f4d6b37068
2 changed files with 4 additions and 1 deletions

View file

@ -2414,6 +2414,9 @@ pub fn unlinkatW(dirfd: fd_t, sub_path_w: []const u16, flags: u32) UnlinkatError
pub const RenameError = error{ pub const RenameError = error{
/// In WASI, this error may occur when the file descriptor does /// In WASI, this error may occur when the file descriptor does
/// not hold the required rights to rename a resource by path relative to it. /// not hold the required rights to rename a resource by path relative to it.
///
/// On Windows, this error may be returned instead of PathAlreadyExists when
/// renaming a directory over an existing directory.
AccessDenied, AccessDenied,
FileBusy, FileBusy,
DiskQuota, DiskQuota,

View file

@ -570,7 +570,7 @@ fn renameTmpIntoCache(
}; };
continue; continue;
}, },
error.PathAlreadyExists => { error.PathAlreadyExists, error.AccessDenied => {
// Package has been already downloaded and may already be in use on the system. // Package has been already downloaded and may already be in use on the system.
cache_dir.deleteTree(tmp_dir_sub_path) catch |del_err| { cache_dir.deleteTree(tmp_dir_sub_path) catch |del_err| {
std.log.warn("unable to delete temp directory: {s}", .{@errorName(del_err)}); std.log.warn("unable to delete temp directory: {s}", .{@errorName(del_err)});