]> gitweb.ps.run Git - ziggit/blobdiff - git.zig
add decompress
[ziggit] / git.zig
diff --git a/git.zig b/git.zig
index 7dd1d961a95d8029fbdb6a17284e6c8f14a2a9d3..d228b50eff37afce72b3ed185e73a4dd3676da32 100644 (file)
--- a/git.zig
+++ b/git.zig
@@ -30,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,
@@ -326,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();
@@ -340,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();