╭ changed ──────────────╮ │src/ui/Repo/Patches.zig│ ╰───────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │572 const labeled = empty.label.len != 0; │ │573 const drafts_window = if (admin_moment) |admin| │ │574 if (repo_id_maybe) |repo_id| │ │588 - if (session.data.user_id != null and session.repos_dir != null) │ │575 + if (session.data.user_id != null and session.users_dir != null) │ │576 try loadDraftWindow(repo_kind, repo_opts, arena, session, admin, &repo_id, empty.selected_id, repo)│ │577 else │ │578 Window.empty │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │707 var closed_window = try thread.loadWindow(Self, .patch, repo_opts.hash, arena, admin_moment, haxy_moment, event_id_to_patch, closed_set, closed_root, conflict_set, empty.selected_id, thread_comments_start, empty.search);│ │708 var merged_window = try thread.loadWindow(Self, .patch, repo_opts.hash, arena, admin_moment, haxy_moment, event_id_to_patch, merged_set, merged_root, conflict_set, empty.selected_id, thread_comments_start, empty.search);│ │709 var conflicts_window = try thread.loadWindow(Self, .patch, repo_opts.hash, arena, admin_moment, haxy_moment, event_id_to_patch, conflict_set, conflicts_root, conflict_set, empty.selected_id, thread_comments_start, null);│ │723 - try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.repos_dir, haxy_moment, repo, &open_window); │ │724 - try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.repos_dir, haxy_moment, repo, &closed_window); │ │725 - try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.repos_dir, haxy_moment, repo, &merged_window); │ │726 - try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.repos_dir, haxy_moment, repo, &conflicts_window); │ │710 + try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.users_dir, haxy_moment, repo, &open_window); │ │711 + try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.users_dir, haxy_moment, repo, &closed_window); │ │712 + try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.users_dir, haxy_moment, repo, &merged_window); │ │713 + try setPatchDetails(repo_kind, repo_opts, io, arena, admin_moment, session.users_dir, haxy_moment, repo, &conflicts_window); │ │714 if (view == .conflicts and conflicts_window.count > 0) resolved_view = .conflicts; │ │715 │ │716 const comment_page = if (empty.comment_id.len == 0) │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────╮ │748 io: std.Io, │ │749 arena: *std.heap.ArenaAllocator, │ │750 admin_moment: ?evt.AdminDB.HashMap(.read_only), │ │764 - repos_dir: ?[]const u8, │ │751 + users_dir: ?[]const u8, │ │752 haxy_moment: evt.EventDB(repo_opts.hash).HashMap(.read_only),│ │753 repo: *rp.Repo(repo_kind, repo_opts), │ │754 target: *Window, │ ╰──────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │755 ) !void { │ │756 if (target.items.len == 0) return; │ │757 + var config = try repo.listConfig(io, arena.child_allocator); │ │758 + defer config.deinit(); │ │759 const items = try arena.allocator().dupe(PatchWithId, target.items);│ │760 for (items) |*item| { │ │761 const id = try evt.parseEventId(item.id); │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │762 const status = item.record.event.status.kind(); │ │763 // a fork-backed patch's fork lives in its forker's user repo │ │775 - if (admin_moment) |moment| if (repos_dir) |dir| if (item.record.event.source_branch == null) { │ │776 - if (try evt.readForker(arena, moment, item.record.author_email)) |forker| { │ │777 - item.forker = forker.name; │ │778 - const record = try evt.readForkById(io, arena.child_allocator, arena, dir, &forker.id, &id); │ │764 + if (admin_moment) |moment| if (users_dir) |dir| if (item.record.event.source_branch == null) { │ │765 + if (try fork.readForkerId(&config.sections, &id)) |forker_id| { │ │766 + if (try evt.User.readById(evt.AdminDB, evt.admin_repo_opts.hash, moment, arena, &forker_id)) |forker| item.forker = forker.event.name;│ │767 + const record = try evt.readForkById(io, arena.child_allocator, arena, dir, &forker_id, &id); │ │768 item.fork_exists = if (record) |value| !value.removed else false; │ │769 } │ │770 }; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────╮ │812 ) !Window { │ │813 const user_id = session.userId() orelse return .empty; │ │814 const user_name = session.data.user_name orelse return .empty;│ │826 - const repos_dir = session.repos_dir orelse return .empty; │ │815 + const users_dir = session.users_dir orelse return .empty; │ │816 const io = session.io orelse return .empty; │ │817 │ │818 // the viewer's drafts live in their user repo │ ╰───────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │830 - var user_repo = (try evt.openUserRepo(io, arena.child_allocator, repos_dir, &user_id)) orelse return .empty; │ │819 + var user_repo = (try evt.openUserRepo(io, arena.child_allocator, users_dir, &user_id)) orelse return .empty; │ │820 defer user_repo.deinit(io, arena.child_allocator); │ │821 const user_moment = (try evt.userMoment(&user_repo)) orelse return .empty; │ │822 const drafts_cursor = try user_moment.getCursor(hash.hashInt(evt.user_repo_opts.hash, evt.Fork.repo_to_draft_id_set_key)) orelse return .empty;│ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │861 next_id = try aa.dupe(u8, &id_hex); │ │862 break; │ │863 } │ │875 - const path = try fork.forkPath(aa, repos_dir, &id_hex); │ │864 + const path = try fork.forkPath(aa, users_dir, &user_id, &id); │ │865 var fork_repo = rp.Repo(.xit, .{}).open(io, arena.child_allocator, .{ .path = path, .require_repo_root = true }) catch continue; │ │866 defer fork_repo.deinit(io, arena.child_allocator); │ │867 const entry = (try loadDraftEntry(repo_kind, repo_opts, arena, io, admin_moment, &fork_repo, target_repo, id, user_name)) orelse continue;│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯