╭ changed ────────╮ │src/serve_ssh.zig│ ╰─────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────╮ │238 // let page builders open on-disk repos │ │239 ui_session.io = io; │ │240 ui_session.users_dir = handler.server.users_dir; │ │241 - ui_session.dirty_repos = handler.server.dirty_repos; │ │241 ui_session.ssh_key = try authorizedKeyLine(session_arena.allocator(), sess.public_key);│ │242 try ui_session.logInWithSshKey(); │ │243 │ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │413 var sideband = progress.Sideband{ .writer = &writer.interface, .sess = sess }; │ │414 try repo.uploadPack(io, allocator, &reader.interface, &writer.interface, .{ .protocol_version = protocol_version }, &sideband); │ │415 }, │ │417 - .push => |pusher| try push.receivePackAndConsume(repo.self_repo_opts, io, allocator, repo, &reader.interface, &writer.interface, .{ .protocol_version = protocol_version, .protected_branches = pusher.protected_branches, .locked_branches = pusher.locked_branches }, pusher.author, handler.server, handler.err, sess), │ │416 + .push => |pusher| try push.receivePackAndConsume(repo.self_repo_opts, io, allocator, repo, &reader.interface, &writer.interface, .{ .protocol_version = protocol_version, .protected_branches = pusher.protected_branches, .locked_branches = pusher.locked_branches }, pusher.author, &pusher.user_id, handler.server, handler.err, sess),│ │417 }, │ │418 } │ │419 } │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │451 var repo = try rp.Repo(.xit, any_repo_opts.toRepoOptsWithHash(kind)).open(io, allocator, .{ .path = repo_path }); │ │452 defer repo.deinit(io, allocator); │ │453 // stateless since the advertisement already went out │ │455 - try push.receivePackAndConsume(repo.self_repo_opts, io, allocator, &repo, reader, writer, .{ .protocol_version = protocol_version, .is_stateless = true }, creator.owner, handler.server, handler.err, sess); │ │454 + try push.receivePackAndConsume(repo.self_repo_opts, io, allocator, &repo, reader, writer, .{ .protocol_version = protocol_version, .is_stateless = true }, creator.owner, &creator.owner_id, handler.server, handler.err, sess);│ │455 }, │ │456 } │ │457 } │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────╮ │556 │ │557 // the key holder a push acts as │ │558 const Pusher = struct { │ │559 + user_id: [evt.event_id_size]u8, │ │560 author: evt.CommitAuthor, │ │561 protected_branches: []const []const u8,│ │562 locked_branches: []const []const u8, │ ╰────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │620 // members change protected branches only by merging a patch│ │621 const owner = holder.role == .owner; │ │622 break :blk .{ .push = .{ │ │623 + .user_id = holder.id, │ │624 .author = try commitAuthor(moment, arena, &holder.id), │ │625 .protected_branches = if (owner) names else &.{}, │ │626 .locked_branches = if (owner) &.{} else names, │ ╰─────────────────────────────────────────────────────────────────────────────────╯