aboutsummaryrefslogtreecommitdiff
path: root/src/install/install.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/install/install.zig')
-rw-r--r--src/install/install.zig10
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 => {},