╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ──────────────╮ │src/ui/Repo/Patches.zig│ ╰───────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │398 │ │399 pub fn mergePatch(data: *const Self, session: *ui.Session, allocator: std.mem.Allocator, author: evt.CommitAuthor, id: []const u8, revision: evt.Patch.MergeRevision) !void {│ │400 const io = session.io orelse return error.NotFound; │ │408 - const repos_dir = session.repos_dir orelse return error.NotFound; │ │401 + const users_dir = session.users_dir orelse return error.NotFound; │ │402 const repo_source = data.repo_source orelse return error.NotFound; │ │403 if (repo_source.repo_kind != .xit) return error.NotFound; │ │404 const patch_id = evt.parseEventId(id) catch return error.NotFound; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ │406 const id_hex = std.fmt.bytesToHex(patch_id, .lower); │ │407 var target_repo = try rp.Repo(.xit, .{}).open(io, allocator, repo_source.localInitOpts());│ │408 defer target_repo.deinit(io, allocator); │ │416 - try pch.mergeAndRemoveFork(.{}, io, allocator, repos_dir, &target_repo, .{ │ │409 + try pch.mergeAndRemoveFork(.{}, io, allocator, users_dir, &target_repo, .{ │ │410 .id = id_hex, │ │411 .revision = revision, │ │412 .author = author, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────╮ │426 target_branch: []const u8, │ │427 ) !void { │ │428 const io = session.io orelse return error.NotFound; │ │436 - const repos_dir = session.repos_dir orelse return error.NotFound; │ │429 + const users_dir = session.users_dir orelse return error.NotFound; │ │430 const admin_repo = session.admin_repo orelse return error.NotFound;│ │431 const repo_id = data.repo_id orelse return error.NotFound; │ │432 const repo_source = data.repo_source orelse return error.NotFound; │ ╰────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │435 if (!evt.Patch.branchValid(target_branch) or !try repo_source.hasBranch(io, allocator, target_branch)) return error.InvalidTargetBranch;│ │436 │ │437 const id_hex = std.fmt.bytesToHex(patch_id, .lower); │ │445 - const fork_path = try fork.forkPath(allocator, repos_dir, &id_hex); │ │446 - defer allocator.free(fork_path); │ │447 - var user_repo = (try evt.openUserRepo(io, allocator, repos_dir, &user_id)) orelse return error.NotFound; │ │448 - defer user_repo.deinit(io, allocator); │ │449 - if (!try pch.editDraft(.{}, io, allocator, admin_repo, &user_repo, fork_path, .{ │ │438 + if (!try pch.editDraft(.{}, io, allocator, users_dir, admin_repo, .{ │ │439 .id = id_hex, │ │440 .user_id = user_id, │ │441 .repo_id = repo_id, │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │450 │ │451 pub fn removeDraft(session: *ui.Session, allocator: std.mem.Allocator, author: evt.CommitAuthor, id: *const [evt.event_id_size]u8) !void {│ │452 const io = session.io orelse return error.NotFound; │ │464 - const repos_dir = session.repos_dir orelse return error.NotFound; │ │453 + const users_dir = session.users_dir orelse return error.NotFound; │ │454 const user_id = session.userId() orelse return error.NotFound; │ │455 │ │456 const id_hex = std.fmt.bytesToHex(id.*, .lower); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │468 - var user_repo = (try evt.openUserRepo(io, allocator, repos_dir, &user_id)) orelse return error.NotFound;│ │469 - defer user_repo.deinit(io, allocator); │ │470 - try fork.remove(io, allocator, repos_dir, &user_repo, &id_hex, author); │ │457 + try fork.remove(io, allocator, users_dir, &user_id, &id_hex, author); │ │458 } │ │459 │ │460 // `status`'s windowed listing. │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │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); │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯