authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2026-04-19 16:17:34-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-04-21 18:07:36+02:00
logcfde9303ff75322525746aa325026f0e12fb402c
treea5b8f0c379caa40edac7e3e5d53b6b2b342c8a2a
parentb5d8966e05926c31b16cdd18ee324cf3b6381d51

Fetch: Fix zip fetching when cache directory doesn't have tmp dir

Fixes #31964

1 files changed, 14 insertions(+), 2 deletions(-)

src/Package/Fetch.zig+14-2
...@@ -1512,7 +1512,19 @@ fn unzip(...@@ -1512,7 +1512,19 @@ fn unzip(
1512 .read = true,1512 .read = true,
1513 }) catch |err| switch (err) {1513 }) catch |err| switch (err) {
1514 error.PathAlreadyExists => continue,1514 error.PathAlreadyExists => continue,
1515 error.Canceled => return error.Canceled,1515 error.FileNotFound => {
1516 cache_root.handle.createDir(io, prefix, .default_dir) catch |dir_err| switch (dir_err) {
1517 error.Canceled => |e| return e,
1518 // error.PathAlreadyExists is considered a failure here because
1519 // it implies that the prefix is not a directory.
1520 else => |e| return f.fail(
1521 f.location_tok,
1522 try eb.printString("failed to create temporary directory: {t}", .{e}),
1523 ),
1524 };
1525 continue;
1526 },
1527 error.Canceled => |e| return e,
1516 else => |e| return f.fail(1528 else => |e| return f.fail(
1517 f.location_tok,1529 f.location_tok,
1518 try eb.printString("failed to create temporary zip file: {t}", .{e}),1530 try eb.printString("failed to create temporary zip file: {t}", .{e}),
...@@ -1525,7 +1537,7 @@ fn unzip(...@@ -1525,7 +1537,7 @@ fn unzip(
1525 var zip_file_writer = zip_file.writer(io, &zip_file_buffer);1537 var zip_file_writer = zip_file.writer(io, &zip_file_buffer);
15261538
1527 _ = reader.streamRemaining(&zip_file_writer.interface) catch |err| switch (err) {1539 _ = reader.streamRemaining(&zip_file_writer.interface) catch |err| switch (err) {
1528 error.ReadFailed => return error.ReadFailed,1540 error.ReadFailed => |e| return e,
1529 error.WriteFailed => return f.fail(1541 error.WriteFailed => return f.fail(
1530 f.location_tok,1542 f.location_tok,
1531 try eb.printString("failed writing temporary zip file: {t}", .{err}),1543 try eb.printString("failed writing temporary zip file: {t}", .{err}),