authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-14 16:32:35 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-04-14 16:32:35 -07:00
logaab76ed99df4ae89826b4ab5dc120d560daeb4cc
treec192f1f99e8e65657017ffbbe97e53a09a46fc89
parentccc66e62cea05f084b9704c8ea99375d16ee5ac5
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

migrate tests


2 files changed, 75 insertions(+), 24 deletions(-)

git.zig+34
......@@ -1016,6 +1016,7 @@ pub const Repository = struct {
10161016 }
10171017 const base_pack_offset = pack_offset - offset;
10181018 const base_obj = try r.getPackedObject(arena, null, pack_index, base_pack_offset);
1019 defer r.gpa.free(base_obj.content);
10191020 // std.log.debug("base: type={s} content=[{d}]", .{ @tagName(base_obj.type), base_obj.content.len });
10201021 return r.getDeltadObject(maybe_oid, &packedobj_fbs, size, base_obj);
10211022 },
......@@ -1103,11 +1104,32 @@ pub const Repository = struct {
11031104 return obj;
11041105 }
11051106
1107 pub fn getObjectA(r: *Repository, arena: std.mem.Allocator, oid: Id) !GitObject {
1108 return (try r.getObject(arena, oid)).?;
1109 }
1110
1111 pub fn getObjectC(r: *Repository, arena: std.mem.Allocator, oid: Id) ![]const u8 {
1112 return (try r.getObjectA(arena, oid)).content;
1113 }
1114
11061115 const GitObject = struct {
11071116 type: RefType,
11081117 content: []const u8,
11091118 };
11101119
1120 pub fn getBlob(r: *Repository, arena: std.mem.Allocator, id: BlobId) !?[]const u8 {
1121 if (try r.getObject(arena, id.id)) |obj| {
1122 if (obj.type == .blob) {
1123 return obj.content;
1124 }
1125 }
1126 return null;
1127 }
1128
1129 pub fn getBlobA(r: *Repository, arena: std.mem.Allocator, id: Id) ![]const u8 {
1130 return (try r.getBlob(arena, .{ .id = id })).?;
1131 }
1132
11111133 pub fn getCommit(r: *Repository, arena: std.mem.Allocator, id: CommitId) !?struct { CommitId, Commit } {
11121134 const t = tracer.trace(@src(), " {s}", .{id.id});
11131135 defer t.end();
......@@ -1125,6 +1147,10 @@ pub const Repository = struct {
11251147 return null;
11261148 }
11271149
1150 pub fn getCommitA(r: *Repository, arena: std.mem.Allocator, id: Id) !Commit {
1151 return (try r.getCommit(arena, .{ .id = id })).?.@"1";
1152 }
1153
11281154 pub fn getTree(r: *Repository, arena: std.mem.Allocator, id: TreeId) !?struct { TreeId, Tree } {
11291155 const t = tracer.trace(@src(), " {s}", .{id.id});
11301156 defer t.end();
......@@ -1175,6 +1201,10 @@ pub const Repository = struct {
11751201 return null;
11761202 }
11771203
1204 pub fn getTreeA(r: *Repository, arena: std.mem.Allocator, id: Id) !Tree {
1205 return (try r.getTree(arena, .{ .id = id })).?.@"1";
1206 }
1207
11781208 pub fn getTag(r: *Repository, arena: std.mem.Allocator, id: TagId) !?struct { TagId, Tag } {
11791209 const t = tracer.trace(@src(), " {s}", .{id.id});
11801210 defer t.end();
......@@ -1192,6 +1222,10 @@ pub const Repository = struct {
11921222 return null;
11931223 }
11941224
1225 pub fn getTagA(r: *Repository, arena: std.mem.Allocator, id: Id) !Tag {
1226 return (try r.getTag(arena, .{ .id = id })).?.@"1";
1227 }
1228
11951229 pub fn getHeads(r: *Repository, arena: std.mem.Allocator) ![]Ref {
11961230 const t = tracer.trace(@src(), "", .{});
11971231 defer t.end();
test.zig+41-24
......@@ -5,30 +5,29 @@ const expect = @import("expect").expect;
55const nfs = @import("nfs");
66
77test {
8 _ = &git.version;
9 _ = &git.getHEAD;
10 _ = &git.getTags;
11 _ = &git.revList;
12}
13
14test {
8 const gpa = std.testing.allocator;
159 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
1610 defer arena.deinit();
1711 const alloc = arena.allocator();
1812 const git_dir = try nfs.cwd().openDir(".git", .{});
1913 defer git_dir.close();
20 const branch_refs = try git.getBranches(alloc, git_dir);
14 var repo: git.Repository = .init(git_dir, gpa);
15 defer repo.deinit();
16 const branch_refs = try repo.getHeads(alloc);
2117 const branch_names = try extras.mapBy(alloc, branch_refs, .label);
2218 try expect(branch_names).toEqualStringSlice(&.{"master"});
2319}
2420
2521test {
22 const gpa = std.testing.allocator;
2623 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
2724 defer arena.deinit();
2825 const alloc = arena.allocator();
2926 const git_dir = try nfs.cwd().openDir(".git", .{});
3027 defer git_dir.close();
31 try expect(try git.getObjectContent(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).toEqualString(
28 var repo: git.Repository = .init(git_dir, gpa);
29 defer repo.deinit();
30 try expect(try repo.getObjectC(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).toEqualString(
3231 \\tree 5403fecad0fde9120535321f222a061abc2849d9
3332 \\parent c39f57f6bb01664a7146ddbfc3debe76ec135f44
3433 \\author Meghan Denny <hello@nektro.net> 1692246864 -0700
......@@ -40,43 +39,55 @@ test {
4039}
4140
4241test {
42 const gpa = std.testing.allocator;
4343 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
4444 defer arena.deinit();
4545 const alloc = arena.allocator();
4646 const git_dir = try nfs.cwd().openDir(".git", .{});
4747 defer git_dir.close();
48 try expect(try git.getObjectSize(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).toEqual(229);
49 try expect(try git.getObjectSize(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).toEqual(45 + 47 + 55 + 58 + 0 + 18 + 6);
48 var repo: git.Repository = .init(git_dir, gpa);
49 defer repo.deinit();
50 try expect((try repo.getObjectC(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).len).toEqual(229);
51 try expect((try repo.getObjectC(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).len).toEqual(45 + 47 + 55 + 58 + 0 + 18 + 6);
5052}
5153
5254test {
55 const gpa = std.testing.allocator;
5356 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
5457 defer arena.deinit();
5558 const alloc = arena.allocator();
5659 const git_dir = try nfs.cwd().openDir(".git", .{});
5760 defer git_dir.close();
58 try expect(try git.isType(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e", .blob)).toEqual(false);
59 try expect(try git.isType(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e", .tree)).toEqual(false);
60 try expect(try git.isType(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e", .commit)).toEqual(true);
61 try expect(try git.isType(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e", .tag)).toEqual(false);
61 var repo: git.Repository = .init(git_dir, gpa);
62 defer repo.deinit();
63 try expect((try repo.getObjectA(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).type == .blob).toEqual(false);
64 try expect((try repo.getObjectA(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).type == .tree).toEqual(false);
65 try expect((try repo.getObjectA(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).type == .commit).toEqual(true);
66 try expect((try repo.getObjectA(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).type == .tag).toEqual(false);
6267}
6368
6469test {
70 const gpa = std.testing.allocator;
6571 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
6672 defer arena.deinit();
6773 const alloc = arena.allocator();
6874 const git_dir = try nfs.cwd().openDir(".git", .{});
6975 defer git_dir.close();
70 try expect(try git.getType(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).toEqual(.commit);
76 var repo: git.Repository = .init(git_dir, gpa);
77 defer repo.deinit();
78 try expect((try repo.getObjectA(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e")).type).toEqual(.commit);
7179}
7280
7381test {
82 const gpa = std.testing.allocator;
7483 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
7584 defer arena.deinit();
7685 const alloc = arena.allocator();
7786 const git_dir = try nfs.cwd().openDir(".git", .{});
7887 defer git_dir.close();
79 const c = try git.parseCommit(alloc, try git.getObjectContent(alloc, git_dir, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e"));
88 var repo: git.Repository = .init(git_dir, gpa);
89 defer repo.deinit();
90 const c = try repo.getCommitA(alloc, "a542da41f1f0c59fdd0e1527cf5ff9de3f6a0c8e");
8091 try expect(c.tree.id).toEqualString("5403fecad0fde9120535321f222a061abc2849d9");
8192 try expect(c.parents.len).toEqual(1);
8293 try expect(c.parents[0].id).toEqualString("c39f57f6bb01664a7146ddbfc3debe76ec135f44");
......@@ -93,30 +104,36 @@ test {
93104}
94105
95106test {
107 const gpa = std.testing.allocator;
96108 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
97109 defer arena.deinit();
98110 const alloc = arena.allocator();
99111 const git_dir = try nfs.cwd().openDir(".git", .{});
100112 defer git_dir.close();
101 try expect(try git.getObjectContent(alloc, git_dir, "5403fecad0fde9120535321f222a061abc2849d9")).toEqualString(
113 var repo: git.Repository = .init(git_dir, gpa);
114 defer repo.deinit();
115 try expect(try repo.getObjectC(alloc, "5403fecad0fde9120535321f222a061abc2849d9")).toEqualString(
102116 // zig fmt: off
103 "100644 blob 8e8d2ceba4b327ce9db93f988492d0e21a461012\t.gitattributes\n" ++
104 "100644 blob bb2a57bd81d13975f2a74ae5dd0e652de07bb8a7\t.gitignore\n" ++
105 "100644 blob 37be0c1cfa4f097edbb1fb5c0585cd18cb08df13\tLICENSE\n" ++
106 "100644 blob b229eadbd5d6655c2dfbaca5a5f68f2f8f3c5454\tgit.zig\n" ++
107 "100644 blob bb3f1c135632cfca760bd84fb18acdab8dae8ec3\tzig.mod\n" ++
117 "100644 .gitattributes\x00" ++ .{0x8e,0x8d,0x2c,0xeb,0xa4,0xb3,0x27,0xce,0x9d,0xb9,0x3f,0x98,0x84,0x92,0xd0,0xe2,0x1a,0x46,0x10,0x12} ++
118 "100644 .gitignore\x00" ++ .{0xbb,0x2a,0x57,0xbd,0x81,0xd1,0x39,0x75,0xf2,0xa7,0x4a,0xe5,0xdd,0x0e,0x65,0x2d,0xe0,0x7b,0xb8,0xa7} ++
119 "100644 LICENSE\x00" ++ .{0x37,0xbe,0x0c,0x1c,0xfa,0x4f,0x09,0x7e,0xdb,0xb1,0xfb,0x5c,0x05,0x85,0xcd,0x18,0xcb,0x08,0xdf,0x13} ++
120 "100644 git.zig\x00" ++ .{0xb2,0x29,0xea,0xdb,0xd5,0xd6,0x65,0x5c,0x2d,0xfb,0xac,0xa5,0xa5,0xf6,0x8f,0x2f,0x8f,0x3c,0x54,0x54} ++
121 "100644 zig.mod\x00" ++ .{0xbb,0x3f,0x1c,0x13,0x56,0x32,0xcf,0xca,0x76,0x0b,0xd8,0x4f,0xb1,0x8a,0xcd,0xab,0x8d,0xae,0x8e,0xc3} ++
108122 ""
109123 // zig fmt: on
110124 );
111125}
112126
113127test {
128 const gpa = std.testing.allocator;
114129 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
115130 defer arena.deinit();
116131 const alloc = arena.allocator();
117132 const git_dir = try nfs.cwd().openDir(".git", .{});
118133 defer git_dir.close();
119 const t = try git.parseTree(alloc, try git.getObjectContent(alloc, git_dir, "5403fecad0fde9120535321f222a061abc2849d9"));
134 var repo: git.Repository = .init(git_dir, gpa);
135 defer repo.deinit();
136 const t = try repo.getTreeA(alloc, "5403fecad0fde9120535321f222a061abc2849d9");
120137 // TODO: test fields when we upgrade to 0.14 and have decl literals
121138 // try expect(try extras.mapBy(alloc, t.children, .id)).toEqualSlice(&.{
122139 // .{ .blob = .{ .id = "8e8d2ceba4b327ce9db93f988492d0e21a461012" } },