From cfde9303ff75322525746aa325026f0e12fb402c Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Sun, 19 Apr 2026 16:17:34 -0700 Subject: [PATCH] Fetch: Fix zip fetching when cache directory doesn't have tmp dir Fixes #31964 --- src/Package/Fetch.zig | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Package/Fetch.zig b/src/Package/Fetch.zig index 0ab9540566e71bb0d3b0e7c1396e9f1ea53627a3..d657a133ac167b997b8dd1efdb6c1474a9520271 100644 --- a/src/Package/Fetch.zig +++ b/src/Package/Fetch.zig @@ -1512,7 +1512,19 @@ fn unzip( .read = true, }) catch |err| switch (err) { error.PathAlreadyExists => continue, - error.Canceled => return error.Canceled, + error.FileNotFound => { + cache_root.handle.createDir(io, prefix, .default_dir) catch |dir_err| switch (dir_err) { + error.Canceled => |e| return e, + // error.PathAlreadyExists is considered a failure here because + // it implies that the prefix is not a directory. + else => |e| return f.fail( + f.location_tok, + try eb.printString("failed to create temporary directory: {t}", .{e}), + ), + }; + continue; + }, + error.Canceled => |e| return e, else => |e| return f.fail( f.location_tok, try eb.printString("failed to create temporary zip file: {t}", .{e}), @@ -1525,7 +1537,7 @@ fn unzip( var zip_file_writer = zip_file.writer(io, &zip_file_buffer); _ = reader.streamRemaining(&zip_file_writer.interface) catch |err| switch (err) { - error.ReadFailed => return error.ReadFailed, + error.ReadFailed => |e| return e, error.WriteFailed => return f.fail( f.location_tok, try eb.printString("failed writing temporary zip file: {t}", .{err}), -- 2.54.0