X-Git-Url: https://gitweb.ps.run/ziggit/blobdiff_plain/9791891490de7d536c90f1ee36950ac4a01bc0f0..93ee72996f9dd80ef2a867a96b207e78a4aad7a2:/git.zig diff --git a/git.zig b/git.zig index 01518c9..d228b50 100644 --- a/git.zig +++ b/git.zig @@ -4,6 +4,8 @@ const Alloc = std.mem.Allocator; const Reader = std.io.AnyReader; const Writer = std.io.AnyWriter; +const MaxFileSize = 1024 * 1024; + const Id = u160; const Commit = struct { author: []u8, @@ -28,6 +30,14 @@ const Object = struct { // pub fn getBlob(self: *Object) Blob {} }; +fn decompress(alloc: Alloc, r: Reader) ![]u8 { + var buffer = std.ArrayList(u8).init(alloc); + + try std.compress.zlib.decompress(r, buffer.writer().any()); + + return alloc.realloc(buffer.allocatedSlice(), buffer.items.len); +} + const PackFile = struct { alloc: Alloc, idxFile: std.fs.File, @@ -324,12 +334,15 @@ const Repo = struct { } pub fn getObject(self: *Repo, id: Id) !?Object { - return self.packfile.getObject(id); + if (self.packfile) |*packfile| { + return packfile.getObject(id); + } + return null; } }; test "print HEAD" { - var repo = try Repo.open(std.testing.allocator, "../microwindows/.git"); + var repo = try Repo.open(std.testing.allocator, "../imgui/.git"); defer repo.close(); const head = try repo.getHead(); @@ -338,15 +351,17 @@ test "print HEAD" { } test "parse idx" { - var repo = try Repo.open(std.testing.allocator, "../microwindows/.git"); + var repo = try Repo.open(std.testing.allocator, "../imgui/.git"); defer repo.close(); - std.debug.print("{}\n", .{repo.packfile.objectOffsets.keys().len}); - std.debug.print("{}\n", .{repo.packfile.objectOffsets.values().len}); + if (repo.packfile) |packfile| { + std.debug.print("{}\n", .{packfile.objectOffsets.keys().len}); + std.debug.print("{}\n", .{packfile.objectOffsets.values().len}); + } } test "get object" { - var repo = try Repo.open(std.testing.allocator, "../microwindows/.git"); + var repo = try Repo.open(std.testing.allocator, "../imgui/.git"); defer repo.close(); const head = try repo.getHead();