From a76cb9d698e9f03b1e00b0b35b9c480901fe95e7 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Mon, 15 Jun 2026 21:11:34 -0700 Subject: [PATCH] add getObjectPackIndex, move this block into its own function --- git.zig | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/git.zig b/git.zig index 4021fef37f1272778ec70a6b8cc567599e0e36fb..a7c5054bc7d8f33d1362fd58f26786a9bb80c4ac 100644 --- a/git.zig +++ b/git.zig @@ -793,9 +793,16 @@ pub const Repository = struct { ); } } - const t4 = tracer.trace(@src(), " find pack_index/pack_offset", .{}); - errdefer t4.end(); - const pack_index, const pack_offset = blk: for (r.idx_content.keys(), r.idx_content.values()) |idx_path, idx_content| { + const pack_index, const pack_offset = try r.getObjectPackIndex(oid) orelse return null; + // parse .pack + return try r.getPackedObject(arena, oid, pack_index, pack_offset); + } + + fn getObjectPackIndex(r: *Repository, oid: Id) !?[2]usize { + const t = tracer.trace(@src(), " {s}", .{oid}); + defer t.end(); + + for (r.idx_content.keys(), r.idx_content.values()) |idx_path, idx_content| { if (std.mem.startsWith(u8, idx_content, "\xfftOc")) { var idx_fbs: nio.FixedBufferStream([]const u8) = .init(idx_content); _ = idx_fbs.takeSlice(4); @@ -843,15 +850,11 @@ pub const Repository = struct { try r.pack_content.put(r.gpa, idx_path, pack_content); break :clk r.pack_content.count() - 1; }; - break :blk .{ pack_index, pack_offset }; - } else { - return error.Version1Idx; + return .{ pack_index, pack_offset }; } - } else return null; - t4.end(); - - // parse .pack - return try r.getPackedObject(arena, oid, pack_index, pack_offset); + return error.UnexpectedIdxVersion; + } + return null; } fn getPackedObject(r: *Repository, arena: std.mem.Allocator, maybe_oid: ?Id, pack_index: usize, pack_offset: usize) !GitObject { -- 2.54.0