authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-27 02:48:04 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-27 02:48:04 -07:00
log810fa4e741d065e72fedf5b35fc3bf6dd26486b1
treec0d2b03b3b8c00300f397eca7f0d9a82b18a49ef
parentd80d249ebaab3ab295b5f1720f13420e1be30130
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

use nio.AllocatingWriter instead of std.ArrayListUnmanaged


1 files changed, 16 insertions(+), 16 deletions(-)

git.zig+16-16
......@@ -816,18 +816,18 @@ pub const Repository = struct {
816816 defer objfile.close();
817817 const compressed_content = try objfile.mmap();
818818 defer nfs.munmap(compressed_content);
819 var list: std.ArrayListUnmanaged(u8) = .empty;
820 errdefer list.deinit(r.gpa);
821 try list.ensureUnusedCapacity(r.gpa, 512);
819 var list: nio.AllocatingWriter = .init(r.gpa);
820 errdefer list.deinit();
821 try list.ensureUnusedCapacity(512);
822822 // try std.compress.flate.inflate.decompress(.zlib, bufr.anyReadable(), list.writer());
823 try inflate_decompress(compressed_content, &list, r.gpa);
823 try inflate_decompress(compressed_content, &list);
824824 const data = list.items;
825825 const header = data[0..std.mem.indexOfScalar(u8, data, 0).?];
826826 const _type_s = header[0..std.mem.indexOfScalar(u8, header, ' ').?];
827827 const _type = std.meta.stringToEnum(RefType, _type_s).?;
828828 const content_len = try extras.parseDigits(u64, header[_type_s.len + 1 ..], 10);
829829 list.replaceRangeAssumeCapacity(0, header.len + 1, "");
830 const content = try list.toOwnedSlice(r.gpa);
830 const content = try list.toOwnedSlice();
831831 std.debug.assert(content.len == content_len);
832832 const obj: GitObject = .{ .type = _type, .content = content };
833833 if (cache_behavior == .cache) try r.unpacked_loose_objects.put(r.gpa, oid, obj);
......@@ -959,13 +959,13 @@ pub const Repository = struct {
959959 },
960960 .commit, .tree, .blob, .tag => {
961961 const compressed_content = packedobj_fbs.rest();
962 var list: std.ArrayListUnmanaged(u8) = .empty;
963 errdefer list.deinit(r.gpa);
964 try list.ensureUnusedCapacity(r.gpa, 512);
962 var list: nio.AllocatingWriter = .init(r.gpa);
963 errdefer list.deinit();
964 try list.ensureUnusedCapacity(512);
965965 // try std.compress.flate.inflate.decompress(.zlib, bufr.anyReadable(), list.writer());
966 try inflate_decompress(compressed_content, &list, r.gpa);
966 try inflate_decompress(compressed_content, &list);
967967 const _type = std.meta.stringToEnum(RefType, @tagName(ty)).?;
968 const content = try list.toOwnedSlice(r.gpa);
968 const content = try list.toOwnedSlice();
969969 const obj: GitObject = .{ .type = _type, .content = content };
970970 if (cache_behavior == .cache) try r.unpacked_objects.put(r.gpa, key, obj);
971971 return obj;
......@@ -1001,11 +1001,11 @@ pub const Repository = struct {
10011001
10021002 fn getDeltadObject(r: *Repository, maybe_oid: ?Id, key: u64, packedobj_fbs: *nio.FixedBufferStream([]const u8), size: usize, base_obj: GitObject, cache_behavior: CacheBehavior) !GitObject {
10031003 const compressed_content = packedobj_fbs.rest();
1004 var list: std.ArrayListUnmanaged(u8) = .empty;
1005 defer list.deinit(r.gpa);
1006 try list.ensureUnusedCapacity(r.gpa, size);
1004 var list: nio.AllocatingWriter = .init(r.gpa);
1005 defer list.deinit();
1006 try list.ensureUnusedCapacity(size);
10071007 // try std.compress.flate.inflate.decompress(.zlib, bufr.anyReadable(), list.writer(r.gpa));
1008 try inflate_decompress(compressed_content, &list, r.gpa);
1008 try inflate_decompress(compressed_content, &list);
10091009 std.debug.assert(list.items.len == size);
10101010 // std.log.debug("maybe_oid={?s} size={d}", .{ maybe_oid, size });
10111011 // std.log.debug("transformation data=[{d}]{d}", .{ list.items.len, list.items });
......@@ -1640,7 +1640,7 @@ const z = @cImport({
16401640 @cInclude("zlib.h");
16411641});
16421642
1643fn inflate_decompress(in: []const u8, out: *std.ArrayListUnmanaged(u8), allocator: std.mem.Allocator) !void {
1643fn inflate_decompress(in: []const u8, out: *nio.AllocatingWriter) !void {
16441644 var strm: z.z_stream = std.mem.zeroes(z.z_stream);
16451645 {
16461646 const ret: ZlibCode = @enumFromInt(z.inflateInit(&strm));
......@@ -1672,7 +1672,7 @@ fn inflate_decompress(in: []const u8, out: *std.ArrayListUnmanaged(u8), allocato
16721672 // Z_ERRNO
16731673 // Z_VERSION_ERROR
16741674 std.debug.assert(ret == .Z_OK or ret == .Z_STREAM_END);
1675 try out.appendSlice(allocator, buf[0 .. buf.len - strm.avail_out]);
1675 try out.writeAll(buf[0 .. buf.len - strm.avail_out]);
16761676 if (ret == .Z_STREAM_END) break;
16771677 }
16781678}