From aa32b286047d782c4aea3def44d8e20e328296d2 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 14 May 2023 16:22:15 -0700 Subject: [PATCH] add getBranches --- git.zig | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/git.zig b/git.zig index 900b27c9343d4ed15d1fbea4b611935ab06ed060..17134f1f79ea3ba8c6133a8e8b74df3495f56aa9 100644 --- a/git.zig +++ b/git.zig @@ -551,3 +551,30 @@ pub const TreeDiff = struct { content: string, }; }; + +pub fn getBranches(alloc: std.mem.Allocator, dir: std.fs.Dir) ![]const Ref { + const result = try std.ChildProcess.exec(.{ + .allocator = alloc, + .cwd_dir = dir, + .argv = &.{ "git", "show-ref", "--heads" }, + .max_output_bytes = 1024 * 1024 * 1024, + }); + std.debug.assert(result.term == .Exited and result.term.Exited == 0); + const output = std.mem.trimRight(u8, result.stdout, "\n"); + var iter = std.mem.split(u8, output, "\n"); + var list = std.ArrayList(Ref).init(alloc); + errdefer list.deinit(); + while (iter.next()) |line| { + var jter = std.mem.split(u8, line, " "); + try list.append(.{ + .commit = ensureObjId(CommitId, jter.next().?), + .label = extras.trimPrefixEnsure(jter.rest(), "refs/heads/").?, + }); + } + return list.toOwnedSlice(); +} + +pub const Ref = struct { + label: string, + commit: CommitId, +}; -- 2.54.0