diff options
Diffstat (limited to 'src/install/install.zig')
-rw-r--r-- | src/install/install.zig | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/install/install.zig b/src/install/install.zig index bf6422cc7..30bedef0a 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -1246,7 +1246,15 @@ const PackageInstall = struct { std.os.mkdirat(destination_dir_.dir.fd, entry.path, 0o755) catch {}; }, .file => { - try std.os.linkat(entry.dir.dir.fd, entry.basename, destination_dir_.dir.fd, entry.path, 0); + std.os.linkat(entry.dir.dir.fd, entry.basename, destination_dir_.dir.fd, entry.path, 0) catch |err| { + if (err != error.PathAlreadyExists) { + return err; + } + + std.os.unlinkat(destination_dir_.dir.fd, entry.path, 0) catch {}; + try std.os.linkat(entry.dir.dir.fd, entry.basename, destination_dir_.dir.fd, entry.path, 0); + }; + real_file_count += 1; }, else => {}, |