authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-04-28 18:40:40 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-04-28 18:40:40 -07:00
log845c968360532acd1533f6156ee9bbca3c1ef02f
treec1c74a78214c71b2117a7dd1fc2dd909fc917356
parent4ddb283ecc975d6d9aae9177d0423de2946ce58e

add getObjectSize()


1 files changed, 12 insertions(+), 0 deletions(-)

git.zig+12
......@@ -53,6 +53,18 @@ pub fn getObject(alloc: std.mem.Allocator, dir: std.fs.Dir, obj: Id) !string {
5353 return std.mem.trimRight(u8, result.stdout, "\n");
5454}
5555
56// TODO make this inspect .git/objects manually
57// https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
58// https://git-scm.com/book/en/v2/Git-Internals-Packfiles
59pub fn getObjectSize(alloc: std.mem.Allocator, dir: std.fs.Dir, obj: Id) !u64 {
60 const result = try std.ChildProcess.exec(.{
61 .allocator = alloc,
62 .cwd_dir = dir,
63 .argv = &.{ "git", "cat-file", "-s", obj },
64 });
65 return try std.fmt.parseInt(u64, std.mem.trimRight(u8, result.stdout, "\n"), 10);
66}
67
5668pub fn parseCommit(alloc: std.mem.Allocator, commitfile: string) !Commit {
5769 var iter = std.mem.split(u8, commitfile, "\n");
5870 var result: Commit = undefined;