| ... | @@ -551,3 +551,30 @@ pub const TreeDiff = struct { | ... | @@ -551,3 +551,30 @@ pub const TreeDiff = struct { |
| 551 | content: string, | 551 | content: string, |
| 552 | }; | 552 | }; |
| 553 | }; | 553 | }; |
| | 554 | |
| | 555 | pub fn getBranches(alloc: std.mem.Allocator, dir: std.fs.Dir) ![]const Ref { |
| | 556 | const result = try std.ChildProcess.exec(.{ |
| | 557 | .allocator = alloc, |
| | 558 | .cwd_dir = dir, |
| | 559 | .argv = &.{ "git", "show-ref", "--heads" }, |
| | 560 | .max_output_bytes = 1024 * 1024 * 1024, |
| | 561 | }); |
| | 562 | std.debug.assert(result.term == .Exited and result.term.Exited == 0); |
| | 563 | const output = std.mem.trimRight(u8, result.stdout, "\n"); |
| | 564 | var iter = std.mem.split(u8, output, "\n"); |
| | 565 | var list = std.ArrayList(Ref).init(alloc); |
| | 566 | errdefer list.deinit(); |
| | 567 | while (iter.next()) |line| { |
| | 568 | var jter = std.mem.split(u8, line, " "); |
| | 569 | try list.append(.{ |
| | 570 | .commit = ensureObjId(CommitId, jter.next().?), |
| | 571 | .label = extras.trimPrefixEnsure(jter.rest(), "refs/heads/").?, |
| | 572 | }); |
| | 573 | } |
| | 574 | return list.toOwnedSlice(); |
| | 575 | } |
| | 576 | |
| | 577 | pub const Ref = struct { |
| | 578 | label: string, |
| | 579 | commit: CommitId, |
| | 580 | }; |