From f0cc6f17a00ac119568c6ff6a7ae50a6ced22240 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 8 Oct 2023 17:21:08 -0700 Subject: [PATCH] Package.Fetch: fix not making directory paths for symlinks --- src/Package/Fetch.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Package/Fetch.zig b/src/Package/Fetch.zig index d241474cb9..ed82c0006a 100644 --- a/src/Package/Fetch.zig +++ b/src/Package/Fetch.zig @@ -1181,7 +1181,13 @@ fn recursiveDirectoryCopy(f: *Fetch, dir: fs.IterableDir, tmp_dir: fs.Dir) anyer const link_name = try dir.dir.readLink(entry.path, &buf); // TODO: if this would create a symlink to outside // the destination directory, fail with an error instead. - try tmp_dir.symLink(link_name, entry.path, .{}); + tmp_dir.symLink(link_name, entry.path, .{}) catch |err| switch (err) { + error.FileNotFound => { + if (fs.path.dirname(entry.path)) |dirname| try tmp_dir.makePath(dirname); + try tmp_dir.symLink(link_name, entry.path, .{}); + }, + else => |e| return e, + }; }, else => return error.IllegalFileTypeInPackage, }