authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-07-04 19:46:55 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-07-04 19:46:55 -07:00
log04c2407dfb38594184bdc40960945011a721bdcd
tree80275a06a76e6b0483f92e8ce0c22762dfd0a691
parent59d257da1f1526e5e76c00eb17d6b08553772f0b
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

revListAll: actually needs to check all history for adds-removes-adds


1 files changed, 18 insertions(+), 4 deletions(-)

git.zig+18-4
......@@ -1658,23 +1658,37 @@ pub const Repository = struct {
16581658
16591659 var prev_prev_commit: ?*Commit = null;
16601660 var prev_commit = base;
1661 var prev_tree = base_id_parent;
1661 var prev_tree: ?*Tree = base_id_parent;
16621662 var prev_obj = try r.gpa.create(Tree.Object);
16631663 prev_obj.* = base_obj.*;
16641664 defer r.gpa.destroy(prev_obj);
16651665
16661666 while (true) {
16671667 if (prev_commit.parents.len == 0) {
1668 try list.appendSlice(alloc, prev_prev_commit.?.parents[0].id ++ "\n");
1668 if (prev_tree != null) {
1669 try list.appendSlice(alloc, prev_prev_commit.?.parents[0].id ++ "\n");
1670 }
16691671 break;
16701672 }
16711673 const next_commit = try r.getCommitA(prev_commit.parents[0].id, .no_cache);
16721674 const next_commit_tree = try r.getTreeA(next_commit.tree.id, .no_cache);
16731675 const next_obj, const next_tree = try idFor(r, next_commit_tree, sub_path) orelse {
1676 if (prev_tree == null) {
1677 if (prev_prev_commit) |p| p.destroy(r);
1678 prev_prev_commit = prev_commit;
1679 prev_commit = next_commit;
1680 prev_tree = null;
1681 continue;
1682 }
16741683 try list.appendSlice(alloc, prev_prev_commit.?.parents[0].id ++ "\n");
1675 break;
1684 // break; // we don't pass --remove-empty
1685 if (prev_prev_commit) |p| p.destroy(r);
1686 prev_prev_commit = prev_commit;
1687 prev_commit = next_commit;
1688 prev_tree = null;
1689 continue;
16761690 };
1677 if (std.mem.eql(u8, &next_obj.id_bytes, &prev_obj.id_bytes) and next_obj.mode.eql(prev_obj.mode)) {
1691 if (prev_tree != null and std.mem.eql(u8, &next_obj.id_bytes, &prev_obj.id_bytes) and next_obj.mode.eql(prev_obj.mode)) {
16781692 if (prev_prev_commit) |p| p.destroy(r);
16791693 prev_prev_commit = prev_commit;
16801694 prev_commit = next_commit;