╭ changed ────────────╮ │src/search_commit.zig│ ╰─────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │367 const Ancestry = mrg.Ancestry(.xit, repo_opts); │ │368 var ancestry = try Ancestry.init(state, io, allocator, base, tip); │ │369 defer ancestry.deinit(); │ │370 - try ancestry.finish(); │ │370 + │ │371 + // the walk is bracketed here because it may run twice │ │372 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .start = .{ .kind = .walking_commit, .estimated_total_items = 0 } });│ │373 + defer progress.report(repo_opts, io, progress_ctx_maybe, .{ .end = .walking_commit }); │ │374 + try ancestry.finish(progress_ctx_maybe); │ │375 │ │376 // timestamps only choose the walk's order, so a commit the base reached │ │377 // can be passed before the tip turns out to reach it too. that can only │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │386 while (flagged.next()) |node| { │ │387 if (node.flags & Ancestry.both == Ancestry.one) candidates = true; │ │388 } │ │385 - if (candidates) while (try ancestry.step()) {}; │ │389 + if (candidates) while (try ancestry.step()) { │ │390 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .walking_commit });│ │391 + }; │ │392 } │ │393 │ │394 var iter = ancestry.nodes.iterator(); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │405 } else { │ │406 // a whole history has no count until it is walked, so the walk reports │ │407 // the commits it has reached so far │ │402 - progress.report(repo_opts, io, progress_ctx_maybe, .{ .text = "Walking commits" }); │ │403 - progress.report(repo_opts, io, progress_ctx_maybe, .{ .start = .{ .kind = .writing_patch, .estimated_total_items = 0 } }); │ │408 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .start = .{ .kind = .walking_commit, .estimated_total_items = 0 } });│ │409 var iter = try obj.ObjectIterator(.xit, repo_opts).init(state, io, allocator, .{ .kind = .commit }); │ │410 defer iter.deinit(); │ │411 try iter.include(tip); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │412 while (try iter.next(allocator)) |object| { │ │413 defer object.deinit(); │ │414 try added.append(aa, .{ .oid = object.oid, .timestamp = object.content.commit.metadata.timestamp });│ │410 - progress.report(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .writing_patch }); │ │415 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .walking_commit }); │ │416 } │ │412 - progress.report(repo_opts, io, progress_ctx_maybe, .{ .end = .writing_patch }); │ │417 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .end = .walking_commit }); │ │418 } │ │419 │ │420 return .{ .removed = removed.items, .added = added.items }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯