╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ──────────────╮ │src/ui/Repo/Patches.zig│ ╰───────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │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;│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ───────────╮ │src/ui/Repo/Undo.zig│ ╰────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │376 const moment = try evt.currentMoment(evt.admin_repo_opts, admin_repo); │ │377 const pair = ui.RoutablePage.RepoIdentity.parse(identity) orelse return error.NotFound; │ │378 const io = session.io orelse return error.NotFound; │ │379 - const repos_dir = session.repos_dir orelse return error.NotFound; │ │380 - const found = try evt.readRepoByOwnerAndName(io, session.page_arena.child_allocator, session.page_arena, moment, repos_dir, pair.owner, pair.name) orelse return error.NotFound;│ │381 - const hex = std.fmt.bytesToHex(found.event_id, .lower); │ │382 - return .{ .path = try std.fs.path.join(session.page_arena.allocator(), &.{ repos_dir, &hex }), .repo_kind = .xit }; │ │379 + const users_dir = session.users_dir orelse return error.NotFound; │ │380 + const found = try evt.readRepoByOwnerAndName(io, session.page_arena.child_allocator, session.page_arena, moment, users_dir, pair.owner, pair.name) orelse return error.NotFound;│ │381 + return .{ .path = try evt.repoPath(session.page_arena.allocator(), users_dir, found.repo.event.user_id, &found.event_id), .repo_kind = .xit }; │ │382 } │ │383 │ │384 pub const View = struct { │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──────╮ │src/ui/User.zig│ ╰───────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │62 const user = (try evt.User.readById(DB, hash_kind, haxy_moment, arena, &user_id)) orelse return error.NotFound;│ │63 │ │64 const io = session.io orelse return error.NoMoment; │ │65 - const repos_dir = session.repos_dir orelse return error.NoMoment; │ │65 + const users_dir = session.users_dir orelse return error.NoMoment; │ │66 const gpa = arena.child_allocator; │ │67 │ │68 // a user with no user repo or no events has empty lists │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────╮ │69 - var user_repo_maybe = try evt.openUserRepo(io, gpa, repos_dir, &user_id); │ │69 + var user_repo_maybe = try evt.openUserRepo(io, gpa, users_dir, &user_id); │ │70 defer if (user_repo_maybe) |*user_repo| user_repo.deinit(io, gpa); │ │71 const user_moment = if (user_repo_maybe) |*user_repo| try evt.userMoment(user_repo) else null;│ │72 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │119 │ │120 // the target lives in its owner's user repo │ │121 const owner_id = record.event.repo_user_id[0..evt.event_id_size]; │ │122 - const target_repo = (try evt.readRepoById(io, gpa, arena, repos_dir, owner_id, record.event.repo_id)) orelse continue;│ │122 + const target_repo = (try evt.readRepoById(io, gpa, arena, users_dir, owner_id, record.event.repo_id)) orelse continue;│ │123 if (evt.Repo.roleOf(target_repo, session.userId()) == .none) continue; │ │124 const owner = (try evt.User.readById(DB, hash_kind, haxy_moment, arena, owner_id)) orelse continue; │ │125 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │126 var title: []const u8 = "(unavailable)"; │ │127 - const path = try fork.forkPath(arena.allocator(), repos_dir, &fork_id_hex); │ │127 + const path = try fork.forkPath(arena.allocator(), users_dir, &user_id, &fork_id); │ │128 if (rp.Repo(.xit, .{}).open(io, gpa, .{ .path = path, .require_repo_root = true })) |opened| {│ │129 var fork_repo = opened; │ │130 defer fork_repo.deinit(io, gpa); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──╮ │src/web.zig│ ╰───────────╯ ╭────────────────────────────────────────╮ │41 local: ui.RepoSource, │ │42 server: struct { │ │43 admin_repo_path: []const u8,│ │44 - repo_root_path: []const u8, │ │44 + users_dir: []const u8, │ │45 session_store: SessionStore,│ │46 git_http_port: ?u16, │ │47 git_ssh_port: ?u16, │ ╰────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯