- // read file HEAD
- const head = try dir.readFileAlloc(alloc, "HEAD", 1024);
- defer alloc.free(head);
-
- // read file pointed at by HEAD
- const headPath = head[5 .. head.len - 1];
- var idBuffer: [40]u8 = undefined;
- const idStr = try dir.readFile(headPath, &idBuffer);
-
- // parse id from file
- const id = try std.fmt.parseUnsigned(u160, idStr, 16);
-
- // open any packfiles
- var packfile = PackFile.init(alloc);
- if (dir.openDir("objects/pack", .{ .iterate = true })) |packDir| {
- var packIt = packDir.iterate();
- while (try packIt.next()) |f| {
- if (std.mem.endsWith(u8, f.name, ".idx")) {
- const idxFilename = f.name;
- var pckFilenameBuffer: [64]u8 = undefined;
- const pckFilename = try std.fmt.bufPrint(&pckFilenameBuffer, "{s}.pack", .{idxFilename[0 .. idxFilename.len - 4]});
-
- const idxFile = try packDir.openFile(idxFilename, .{});
- const pckFile = try packDir.openFile(pckFilename, .{});
- defer idxFile.close();
- defer pckFile.close();
-
- const idxReader = idxFile.reader().any();
- const pckReader = pckFile.reader().any();
-
- try packfile.parse(idxReader, pckReader);
- }
- }
- } else |err| {
- std.debug.print("{}\n", .{err});
- }