treesummaryrefslogcommitdiff
diff options
context:
space:
mode:
authorpatrick-scho2024-08-10 16:32:25 +0200
committerpatrick-scho2024-08-10 16:32:25 +0200
commit9791891490de7d536c90f1ee36950ac4a01bc0f0 (patch)
tree439ceafed98fe00d29d4960f3bf9bf6e65716c0f
parente3543b53185b75ba1e315974f4fe6d202fae3be9 (diff)
downloadziggit-9791891490de7d536c90f1ee36950ac4a01bc0f0.tar.gz
ziggit-9791891490de7d536c90f1ee36950ac4a01bc0f0.zip
change test repo
-rw-r--r--git.zig44
1 files changed, 20 insertions, 24 deletions
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);