authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-12 00:04:19 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-12 00:04:19 -07:00
log273ab35efde5b9ba792f6a32e17efaa23cca5b74
tree7ec3db394f3b7eb48cb2d9f572bd51d93e3e4d7e
parentce95745420ddca38d636ea152df4698c1cc55c64
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

getGitObject is redundant now


1 files changed, 17 insertions(+), 25 deletions(-)

git.zig+17-25
...@@ -917,20 +917,18 @@ pub const BlameIterator = struct {...@@ -917,20 +917,18 @@ pub const BlameIterator = struct {
917pub const Repository = struct {917pub const Repository = struct {
918 gitdir: nfs.Dir,918 gitdir: nfs.Dir,
919 gpa: std.mem.Allocator,919 gpa: std.mem.Allocator,
920 raw_object_contents: std.StringArrayHashMapUnmanaged(RawObject),920 unpacked_objects: std.StringArrayHashMapUnmanaged(GitObject),
921 idx_content: std.StringArrayHashMapUnmanaged([]const u8),921 idx_content: std.StringArrayHashMapUnmanaged([]const u8),
922 pack_content: std.StringArrayHashMapUnmanaged([]const u8),922 pack_content: std.StringArrayHashMapUnmanaged([]const u8),
923 commits: std.StringArrayHashMapUnmanaged(Commit),923 commits: std.StringArrayHashMapUnmanaged(Commit),
924 trees: std.StringArrayHashMapUnmanaged(Tree),924 trees: std.StringArrayHashMapUnmanaged(Tree),
925 tags: std.StringArrayHashMapUnmanaged(Tag),925 tags: std.StringArrayHashMapUnmanaged(Tag),
926926
927 const RawObject = struct { RefType, []const u8 };
928
929 pub fn init(gitdir: nfs.Dir, gpa: std.mem.Allocator) Repository {927 pub fn init(gitdir: nfs.Dir, gpa: std.mem.Allocator) Repository {
930 return .{928 return .{
931 .gitdir = gitdir,929 .gitdir = gitdir,
932 .gpa = gpa,930 .gpa = gpa,
933 .raw_object_contents = .empty,931 .unpacked_objects = .empty,
934 .idx_content = .empty,932 .idx_content = .empty,
935 .pack_content = .empty,933 .pack_content = .empty,
936 .commits = .empty,934 .commits = .empty,
...@@ -940,8 +938,8 @@ pub const Repository = struct {...@@ -940,8 +938,8 @@ pub const Repository = struct {
940 }938 }
941939
942 pub fn deinit(r: *Repository) void {940 pub fn deinit(r: *Repository) void {
943 for (r.raw_object_contents.values()) |v| r.gpa.free(v[1]);941 for (r.unpacked_objects.values()) |v| r.gpa.free(v.content);
944 r.raw_object_contents.deinit(r.gpa);942 r.unpacked_objects.deinit(r.gpa);
945 for (r.idx_content.values()) |v| nfs.munmap(v);943 for (r.idx_content.values()) |v| nfs.munmap(v);
946 r.idx_content.deinit(r.gpa);944 r.idx_content.deinit(r.gpa);
947 for (r.pack_content.values()) |v| nfs.munmap(v);945 for (r.pack_content.values()) |v| nfs.munmap(v);
...@@ -952,9 +950,9 @@ pub const Repository = struct {...@@ -952,9 +950,9 @@ pub const Repository = struct {
952 r.tags.deinit(r.gpa);950 r.tags.deinit(r.gpa);
953 }951 }
954952
955 fn getObject(r: *Repository, oid: Id, arena: std.mem.Allocator) !?RawObject {953 pub fn getObject(r: *Repository, arena: std.mem.Allocator, oid: Id) !?GitObject {
956 if (r.raw_object_contents.get(oid)) |data| {954 if (r.unpacked_objects.get(oid)) |obj| {
957 return data;955 return obj;
958 }956 }
959 if (oid.len == 40) blk: { //sha1 object957 if (oid.len == 40) blk: { //sha1 object
960 var sub_path: [49:0]u8 = "objects/00/00000000000000000000000000000000000000".*;958 var sub_path: [49:0]u8 = "objects/00/00000000000000000000000000000000000000".*;
...@@ -978,8 +976,9 @@ pub const Repository = struct {...@@ -978,8 +976,9 @@ pub const Repository = struct {
978 list.replaceRangeAssumeCapacity(0, header.len + 1, "");976 list.replaceRangeAssumeCapacity(0, header.len + 1, "");
979 const content = try list.toOwnedSlice();977 const content = try list.toOwnedSlice();
980 std.debug.assert(content.len == content_len);978 std.debug.assert(content.len == content_len);
981 try r.raw_object_contents.put(r.gpa, oid, .{ _type, content });979 const obj: GitObject = .{ .type = _type, .content = content };
982 return .{ _type, content };980 try r.unpacked_objects.put(r.gpa, oid, obj);
981 return obj;
983 }982 }
984983
985 // read .idx984 // read .idx
...@@ -1043,7 +1042,7 @@ pub const Repository = struct {...@@ -1043,7 +1042,7 @@ pub const Repository = struct {
1043 return try r.getPackedObject(oid, pack_index, pack_offset);1042 return try r.getPackedObject(oid, pack_index, pack_offset);
1044 }1043 }
10451044
1046 fn getPackedObject(r: *Repository, maybe_oid: ?Id, pack_index: usize, pack_offset: usize) !RawObject {1045 fn getPackedObject(r: *Repository, maybe_oid: ?Id, pack_index: usize, pack_offset: usize) !GitObject {
1047 const pack_content = r.pack_content.values()[pack_index];1046 const pack_content = r.pack_content.values()[pack_index];
1048 if (!std.mem.eql(u8, pack_content[0..4], "PACK")) return error.InvalidGitPack;1047 if (!std.mem.eql(u8, pack_content[0..4], "PACK")) return error.InvalidGitPack;
1049 const pack_version = std.mem.readInt(u32, pack_content[4..][0..4], .big);1048 const pack_version = std.mem.readInt(u32, pack_content[4..][0..4], .big);
...@@ -1082,8 +1081,9 @@ pub const Repository = struct {...@@ -1082,8 +1081,9 @@ pub const Repository = struct {
1082 try std.compress.flate.inflate.decompress(.zlib, bufr.anyReadable(), list.writer());1081 try std.compress.flate.inflate.decompress(.zlib, bufr.anyReadable(), list.writer());
1083 const _type = std.meta.stringToEnum(RefType, @tagName(ty)).?;1082 const _type = std.meta.stringToEnum(RefType, @tagName(ty)).?;
1084 const content = try list.toOwnedSlice();1083 const content = try list.toOwnedSlice();
1085 if (maybe_oid) |oid| try r.raw_object_contents.put(r.gpa, oid, .{ _type, content });1084 const obj: GitObject = .{ .type = _type, .content = content };
1086 return .{ _type, content };1085 if (maybe_oid) |oid| try r.unpacked_objects.put(r.gpa, oid, obj);
1086 return obj;
1087 },1087 },
1088 .ofs_delta => {1088 .ofs_delta => {
1089 std.log.debug("type={s} size={d}", .{ @tagName(ty), size });1089 std.log.debug("type={s} size={d}", .{ @tagName(ty), size });
...@@ -1103,14 +1103,6 @@ pub const Repository = struct {...@@ -1103,14 +1103,6 @@ pub const Repository = struct {
1103 }1103 }
1104 }1104 }
11051105
1106 pub fn getGitObject(r: *Repository, arena: std.mem.Allocator, oid: Id) !?GitObject {
1107 if (try r.getObject(oid, arena)) |data| {
1108 const _type, const content = data;
1109 return .{ .type = _type, .content = content };
1110 }
1111 return null;
1112 }
1113
1114 const GitObject = struct {1106 const GitObject = struct {
1115 type: RefType,1107 type: RefType,
1116 content: []const u8,1108 content: []const u8,
...@@ -1120,7 +1112,7 @@ pub const Repository = struct {...@@ -1120,7 +1112,7 @@ pub const Repository = struct {
1120 if (r.commits.getPtr(id.id)) |val| {1112 if (r.commits.getPtr(id.id)) |val| {
1121 return .{ id, val.* };1113 return .{ id, val.* };
1122 }1114 }
1123 if (try r.getGitObject(arena, id.id)) |obj| {1115 if (try r.getObject(arena, id.id)) |obj| {
1124 if (obj.type == .commit) {1116 if (obj.type == .commit) {
1125 const commit = try parseCommit(arena, obj.content);1117 const commit = try parseCommit(arena, obj.content);
1126 try r.commits.put(r.gpa, id.id, commit);1118 try r.commits.put(r.gpa, id.id, commit);
...@@ -1134,7 +1126,7 @@ pub const Repository = struct {...@@ -1134,7 +1126,7 @@ pub const Repository = struct {
1134 if (r.trees.getPtr(id.id)) |val| {1126 if (r.trees.getPtr(id.id)) |val| {
1135 return .{ id, val.* };1127 return .{ id, val.* };
1136 }1128 }
1137 if (try r.getGitObject(arena, id.id)) |obj| {1129 if (try r.getObject(arena, id.id)) |obj| {
1138 if (obj.type == .tree) {1130 if (obj.type == .tree) {
1139 var children = std.ArrayList(Tree.Object).init(r.gpa);1131 var children = std.ArrayList(Tree.Object).init(r.gpa);
1140 errdefer children.deinit();1132 errdefer children.deinit();
...@@ -1181,7 +1173,7 @@ pub const Repository = struct {...@@ -1181,7 +1173,7 @@ pub const Repository = struct {
1181 if (r.tags.getPtr(id.id)) |val| {1173 if (r.tags.getPtr(id.id)) |val| {
1182 return .{ id, val.* };1174 return .{ id, val.* };
1183 }1175 }
1184 if (try r.getGitObject(arena, id.id)) |obj| {1176 if (try r.getObject(arena, id.id)) |obj| {
1185 if (obj.type == .tag) {1177 if (obj.type == .tag) {
1186 const tag = try parseTag(obj.content);1178 const tag = try parseTag(obj.content);
1187 try r.tags.put(r.gpa, id.id, tag);1179 try r.tags.put(r.gpa, id.id, tag);