authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-24 03:03:02 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-24 03:03:02 -07:00
log23a237c9aaa5b8f5590f0db438cc00e9e1c5e1a8
tree261570d2cfc3fe929d4ed4f7e2280edf789fc559
parentc171ea63e41ea81f9e9c973aa7cc05f45673849b
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

add raw field to Tree, Commit, Tag


1 files changed, 19 insertions(+), 4 deletions(-)

git.zig+19-4
...@@ -164,7 +164,14 @@ pub fn parseCommit(alloc: std.mem.Allocator, commitfile: string) !Commit {...@@ -164,7 +164,14 @@ pub fn parseCommit(alloc: std.mem.Allocator, commitfile: string) !Commit {
164 defer t.end();164 defer t.end();
165165
166 var iter = std.mem.splitScalar(u8, commitfile, '\n');166 var iter = std.mem.splitScalar(u8, commitfile, '\n');
167 var result: Commit = undefined;167 var result: Commit = .{
168 .raw = commitfile,
169 .tree = undefined,
170 .parents = undefined,
171 .author = undefined,
172 .committer = undefined,
173 .message = undefined,
174 };
168 var parents = std.array_list.Managed(CommitId).init(alloc);175 var parents = std.array_list.Managed(CommitId).init(alloc);
169 errdefer parents.deinit();176 errdefer parents.deinit();
170 while (true) {177 while (true) {
...@@ -570,8 +577,13 @@ pub fn parseTag(tagfile: string) !Tag {...@@ -570,8 +577,13 @@ pub fn parseTag(tagfile: string) !Tag {
570 defer t.end();577 defer t.end();
571578
572 var iter = std.mem.splitScalar(u8, tagfile, '\n');579 var iter = std.mem.splitScalar(u8, tagfile, '\n');
573 var result: Tag = undefined;580 var result: Tag = .{
574 result.tagger = null;581 .raw = tagfile,
582 .object = undefined,
583 .type = undefined,
584 .tagger = null,
585 .message = undefined,
586 };
575 const object = extras.trimPrefixEnsure(iter.next().?, "object ").?;587 const object = extras.trimPrefixEnsure(iter.next().?, "object ").?;
576 std.debug.assert(object.len == 40);588 std.debug.assert(object.len == 40);
577 result.object = object[0..40];589 result.object = object[0..40];
...@@ -1110,7 +1122,7 @@ pub const Repository = struct {...@@ -1110,7 +1122,7 @@ pub const Repository = struct {
1110 .symlink => .{ .blob = .{ .id = &item.id_bytes } },1122 .symlink => .{ .blob = .{ .id = &item.id_bytes } },
1111 .none => unreachable,1123 .none => unreachable,
1112 };1124 };
1113 const tree: Tree = .{ .children = children_slice };1125 const tree: Tree = .{ .raw = obj.content, .children = children_slice };
1114 if (cache_behavior == .cache) try r.trees.put(r.gpa, id.id, tree);1126 if (cache_behavior == .cache) try r.trees.put(r.gpa, id.id, tree);
1115 return .{ id, tree };1127 return .{ id, tree };
1116 }1128 }
...@@ -1630,6 +1642,7 @@ fn traverseTo(r: *Repository, arena: std.mem.Allocator, treestart_id: TreeId, di...@@ -1630,6 +1642,7 @@ fn traverseTo(r: *Repository, arena: std.mem.Allocator, treestart_id: TreeId, di
1630}1642}
16311643
1632pub const Tree = struct {1644pub const Tree = struct {
1645 raw: []const u8,
1633 children: []const Object,1646 children: []const Object,
16341647
1635 pub fn get(self: Tree, name: string) ?Object {1648 pub fn get(self: Tree, name: string) ?Object {
...@@ -1915,6 +1928,7 @@ pub const Tree = struct {...@@ -1915,6 +1928,7 @@ pub const Tree = struct {
1915};1928};
19161929
1917pub const Commit = struct {1930pub const Commit = struct {
1931 raw: []const u8,
1918 tree: TreeId,1932 tree: TreeId,
1919 parents: []const CommitId,1933 parents: []const CommitId,
1920 author: UserAndAt,1934 author: UserAndAt,
...@@ -1929,6 +1943,7 @@ pub const UserAndAt = struct {...@@ -1929,6 +1943,7 @@ pub const UserAndAt = struct {
1929};1943};
19301944
1931pub const Tag = struct {1945pub const Tag = struct {
1946 raw: []const u8,
1932 object: Id,1947 object: Id,
1933 type: RefType,1948 type: RefType,
1934 tagger: ?UserAndAt,1949 tagger: ?UserAndAt,