╭ changed ───╮ │src/push.zig│ ╰────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────╮ │123 author: evt.CommitAuthor, │ │124 pusher_id: *const [evt.event_id_size]u8,│ │125 server: evt.Host.Server, │ │126 + max_repo_size: ?u64, │ │127 error_writer: *std.Io.Writer, │ │128 sess: ?*ssh.SessionCtx, │ │129 ) !void { │ ╰─────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │136 var updates = xit.net_server_receive_pack.AppliedRefUpdates.init(allocator); │ │137 defer updates.deinit(); │ │138 │ │138 - var sideband = progress.Sideband{ .response = &response, .writer = writer, .sess = sess }; │ │139 + var sideband = progress.Sideband{ │ │140 + .response = &response, │ │141 + .writer = writer, │ │142 + .sess = sess, │ │143 + .size_limit = if (max_repo_size) |max| .{ .file = repo.core.db_file, .max = max } else null,│ │144 + }; │ │145 // the moment index the pushed events were consumed into │ │146 var moment_index: ?u64 = null; │ │147 const Ctx = struct { │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │199 _ = try srch_cmmt.refreshInTransaction(repo_opts, state, &moment, ctx.io, ctx.allocator, moves.items, ctx.sideband);│ │200 │ │201 try writeUndo(repo_opts, state, ctx.io, ctx.allocator, ctx.author, ctx.updates.items.items); │ │202 + // the indexes count against the limit too │ │203 + try ctx.sideband.checkSize(ctx.io); │ │204 } │ │205 }; │ │206 │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────╮ │278 timestamp: u64, │ │279 reader: *std.Io.Reader, │ │280 writer: *std.Io.Writer, │ │281 + max_repo_size: ?u64, │ │282 error_writer: *std.Io.Writer,│ │283 sess: ?*ssh.SessionCtx, │ │284 ) !void { │ ╰──────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │313 var revision_id_maybe: ?[evt.event_id_size]u8 = null; │ │314 var response = xit.net_server_receive_pack.Response.init(allocator); │ │315 defer response.deinit(); │ │307 - var sideband = progress.Sideband{ .response = &response, .writer = writer, .sess = sess }; │ │316 + var sideband = progress.Sideband{ │ │317 + .response = &response, │ │318 + .writer = writer, │ │319 + .sess = sess, │ │320 + .size_limit = if (max_repo_size) |max| .{ .file = fork_repo.core.db_file, .max = max } else null,│ │321 + }; │ │322 │ │323 // execute a transaction that receives the push and materializes its revision │ │324 const result = blk: { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │414 │ │415 // a fork push tracks no ref updates, so it records no ranges │ │416 try writeUndo(repo_opts, state, ctx.io, ctx.allocator, ctx.author, &.{});│ │417 + // the copied target history and the index count against the limit too │ │418 + try ctx.sideband.checkSize(ctx.io); │ │419 } │ │420 }; │ │421 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯