╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ────╮ │src/patch.zig│ ╰─────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │275 for (patches.keys(), patches.values()) |id, record| { │ │275 - defer serve_common.reportProgress(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .writing_patch });│ │276 + defer progress.report(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .writing_patch }); │ │277 │ │278 // a branch patch opens no fork, so its checks need no lock of their own │ │279 var checks: MergeCheckInputs(repo_opts) = .{}; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │287 }; │ │288 refreshed = true; │ │289 } │ │289 - if (total > 0) serve_common.reportProgress(repo_opts, io, progress_ctx_maybe, .{ .end = .writing_patch });│ │290 + if (total > 0) progress.report(repo_opts, io, progress_ctx_maybe, .{ .end = .writing_patch }); │ │291 return refreshed; │ │292 } │ │293 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │545 } │ │546 │ │547 // start progress reporting after the patch count is known │ │547 - serve_common.reportProgress(repo_opts, io, progress_ctx_maybe, .{ .text = "Checking mergeability" }); │ │548 - serve_common.reportProgress(repo_opts, io, progress_ctx_maybe, .{ .start = .{ .kind = .writing_patch, .estimated_total_items = ids.items.len } });│ │548 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .text = "Checking mergeability" }); │ │549 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .start = .{ .kind = .writing_patch, .estimated_total_items = ids.items.len } }); │ │550 │ │551 // refresh each collected patch independently │ │552 for (ids.items) |id| { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │553 refreshMergeability(repo_opts, io, allocator, target_repo, id); │ │553 - serve_common.reportProgress(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .writing_patch });│ │554 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .complete_one = .writing_patch }); │ │555 } │ │556 │ │557 // finish progress reporting after all patches have been visited │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────╮ │557 - serve_common.reportProgress(repo_opts, io, progress_ctx_maybe, .{ .end = .writing_patch });│ │558 + progress.report(repo_opts, io, progress_ctx_maybe, .{ .end = .writing_patch }); │ │559 } │ │560 │ │561 fn refreshMergeCheck( │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ───╮ │src/push.zig│ ╰────────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │12 const fork = @import("fork.zig"); │ │13 const serve_common = @import("serve_common.zig"); │ │14 const ssh = @import("serve_ssh_protocol.zig"); │ │15 +const progress = @import("./progress.zig"); │ │16 │ │17 // prepare all reachable commits, including history received before patch│ │18 // generation was enabled. this shares the receive-pack transaction. │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │37 try iter.include(&oid); │ │38 } │ │39 } │ │39 - var progress = serve_common.SidebandProgress{ .response = response, .writer = writer };│ │40 - try xit.patch.writePatches(repo_opts, state, io, allocator, &iter, &progress); │ │40 + var sideband = progress.Sideband{ .response = response, .writer = writer }; │ │41 + try xit.patch.writePatches(repo_opts, state, io, allocator, &iter, &sideband); │ │42 } │ │43 │ │44 // the action a received push records │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │133 var updates = xit.net_server_receive_pack.AppliedRefUpdates.init(allocator); │ │134 defer updates.deinit(); │ │135 │ │135 - var progress = serve_common.SidebandProgress{ .response = &response, .writer = writer, .sess = sess };│ │136 + var sideband = progress.Sideband{ .response = &response, .writer = writer, .sess = sess }; │ │137 const Ctx = struct { │ │138 updates: *xit.net_server_receive_pack.AppliedRefUpdates, │ │139 core: *rp.Repo(.xit, repo_opts).Core, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────╮ │146 response: *xit.net_server_receive_pack.Response, │ │147 repo_root_path: []const u8, │ │148 error_writer: *std.Io.Writer, │ │148 - progress: *serve_common.SidebandProgress, │ │149 + sideband: *progress.Sideband, │ │150 │ │151 pub fn run(ctx: @This(), cursor: *DB.Cursor(.read_write)) !void {│ │152 var moment = try DB.HashMap(.read_write).init(cursor.*); │ ╰──────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │155 var receive_options = ctx.options; │ │156 receive_options.applied_ref_updates = ctx.updates; │ │157 receive_options.deferred_response = ctx.response; │ │157 - try xit.net_server_receive_pack.run(.xit, repo_opts, state, ctx.io, ctx.allocator, ctx.reader, ctx.writer, receive_options, ctx.progress);│ │158 + try xit.net_server_receive_pack.run(.xit, repo_opts, state, ctx.io, ctx.allocator, ctx.reader, ctx.writer, receive_options, ctx.sideband);│ │159 try writeReceivedPatches(repo_opts, state, ctx.io, ctx.allocator, ctx.response, ctx.writer); │ │159 - if (ctx.progress.gone) return error.ClientGone; │ │160 + if (ctx.sideband.gone) return error.ClientGone; │ │161 │ │162 // a repo without an events branch has no events to consume. a │ │163 // no-op consume must not cancel here, since the push shares the │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯