From: patrick-scho Date: Sat, 10 Aug 2024 14:32:25 +0000 (+0200) Subject: change test repo X-Git-Url: https://gitweb.ps.run/ziggit/commitdiff_plain/9791891490de7d536c90f1ee36950ac4a01bc0f0 change test repo --- diff --git a/git.zig b/git.zig index 7d0ccdb..01518c9 100644 --- a/git.zig +++ b/git.zig @@ -34,7 +34,7 @@ const PackFile = struct { pckFile: std.fs.File, objectOffsets: std.AutoArrayHashMap(Id, u32), - pub fn open(alloc: Alloc, dir: std.fs.Dir) !PackFile { + pub fn open(alloc: Alloc, dir: std.fs.Dir) !?PackFile { var self = PackFile{ .alloc = alloc, .idxFile = undefined, @@ -45,6 +45,8 @@ const PackFile = struct { var packDir = try dir.openDir("objects/pack", .{ .iterate = true }); defer packDir.close(); + var packFileFound = false; + var packIt = packDir.iterate(); while (try packIt.next()) |f| { if (std.mem.endsWith(u8, f.name, ".idx")) { @@ -60,9 +62,14 @@ const PackFile = struct { self.pckFile = try packDir.openFile(pckFilename.constSlice(), .{}); try self.parseIndex(); + + packFileFound = true; } } + if (!packFileFound) + return null; + return self; } @@ -174,18 +181,6 @@ const PackFile = struct { }; } - fn decompress(alloc: Alloc, reader: Reader, size: usize) ![]u8 { - const outBuffer = try alloc.alloc(u8, size); - errdefer alloc.free(outBuffer); - - var outFbs = std.io.fixedBufferStream(outBuffer); - const writer = outFbs.writer(); - - try std.compress.zlib.decompress(reader, writer); - - return outBuffer; - } - fn applyDelta(alloc: Alloc, baseData: []const u8, deltData: []const u8) ![]u8 { var fbs = std.io.fixedBufferStream(deltData); const deltDataReader = fbs.reader().any(); @@ -245,7 +240,7 @@ const PackFile = struct { return result; } - fn ofsDelta(self: *PackFile, offset: i64, size: usize) anyerror!Object { + fn ofsDelta(self: *PackFile, offset: i64) anyerror!Object { const pckReader = self.pckFile.reader().any(); const pos = try self.pckFile.getPos(); @@ -255,7 +250,7 @@ const PackFile = struct { defer self.alloc.free(baseObject.data); try self.pckFile.seekTo(pos); - const deltaData = try decompress(self.alloc, pckReader, size); + const deltaData = try decompress(self.alloc, pckReader); defer self.alloc.free(deltaData); const objectData = try applyDelta(self.alloc, baseObject.data, deltaData); @@ -272,10 +267,9 @@ const PackFile = struct { const offset = try getOffset(reader); return try self.ofsDelta( @intCast(offset.offset + objectSize.bytelen + offset.bytelen), - objectSize.size, ); } else { - const objectData = try decompress(self.alloc, reader, objectSize.size); + const objectData = try decompress(self.alloc, reader); return Object.init(objectKind, objectData); } } @@ -294,7 +288,7 @@ const PackFile = struct { const Repo = struct { alloc: Alloc, dir: std.fs.Dir, - packfile: PackFile, + packfile: ?PackFile, pub fn open(alloc: Alloc, path: []const u8) !Repo { const dir = try std.fs.cwd().openDir(path, .{}); @@ -310,7 +304,9 @@ const Repo = struct { pub fn close(self: *Repo) void { self.dir.close(); - self.packfile.close(); + if (self.packfile != null) { + self.packfile.?.close(); + } } pub fn getHead(self: *Repo) !Id { @@ -363,17 +359,17 @@ test "get object" { } test "get tree" { - var repo = try Repo.open(std.testing.allocator, "../microwindows/.git"); + var repo = try Repo.open(std.testing.allocator, "../imgui/.git"); defer repo.close(); - if (try repo.getObject(0xe59b68a950b643f9ea50997b3cf359a5956e852c)) |o| { + if (try repo.getObject(0xceb2b2c62d6f8f3686dcacecd5be931839b02c77)) |o| { defer std.testing.allocator.free(o.data); std.debug.print("tree: {s}\n", .{o.data}); } } // test "list commits" { -// var repo = Repo.open(std.testing.allocator, "../microwindows/.git"); +// var repo = Repo.open(std.testing.allocator, "../imgui/.git"); // defer repo.close(); // const head = repo.getObject(repo.head); @@ -387,7 +383,7 @@ test "get tree" { // } // test "tree" { -// var repo = Repo.open(std.testing.allocator, "../microwindows/.git"); +// var repo = Repo.open(std.testing.allocator, "../imgui/.git"); // defer repo.close(); // const head = repo.getObject(repo.head); @@ -399,7 +395,7 @@ test "get tree" { // } // test "blob" { -// var repo = Repo.open(std.testing.allocator, "../microwindows/.git"); +// var repo = Repo.open(std.testing.allocator, "../imgui/.git"); // defer repo.close(); // const head = repo.getObject(repo.head);