From 7056ba9a5c750305726be862a51ff18e2318c138 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 bbe5f35ee3..59bd0a931e 100644 --- a/src/Package/Fetch.zig +++ b/src/Package/Fetch.zig @@ -1513,7 +1513,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}), @@ -1526,7 +1538,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}),