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}),