╭ changed ──╮ │src/web.zig│ ╰───────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────╮ │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, │ ╰────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │64 .server => |server| blk: { │ │65 const repo_prefix = "/repo/"; │ │66 if (!std.mem.startsWith(u8, repo_base, repo_prefix)) break :blk null; │ │67 - const path = switch (try serve_common.resolveRepoPath(io, allocator, server.repo_root_path, server.admin_repo_path, repo_base[repo_prefix.len..], false)) {│ │67 + const path = switch (try serve_common.resolveRepoPath(io, allocator, server.users_dir, server.admin_repo_path, repo_base[repo_prefix.len..], false)) { │ │68 .ok => |value| value, │ │69 .invalid, .not_found => break :blk null, │ │70 }; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │522 var admin_repo = try rp.Repo(.xit, evt.admin_repo_opts).open(io, allocator, .{ .path = server.admin_repo_path }); │ │523 defer admin_repo.deinit(io, allocator); │ │524 const moment = try evt.currentMoment(evt.admin_repo_opts, &admin_repo); │ │525 - break :blk try ui.authorizeUser(io, moment, arena, server.repo_root_path, user_id, repo_base[repo_prefix.len..], min_role);│ │525 + break :blk try ui.authorizeUser(io, moment, arena, server.users_dir, user_id, repo_base[repo_prefix.len..], min_role); │ │526 }; │ │527 switch (authorization) { │ │528 .actor => |actor| return actor, │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │559 break :blk if (try ui.activeUser(moment, &arena, id) != null) id else null; │ │560 }; │ │561 const owner_repo = evt.parseOwnerRepoPath(repo_base[repo_prefix.len..]) orelse return false; │ │562 - const repo = (try evt.readRepoByOwnerAndName(io, allocator, &arena, moment, server.repo_root_path, owner_repo.owner, owner_repo.name)) orelse return false;│ │562 + const repo = (try evt.readRepoByOwnerAndName(io, allocator, &arena, moment, server.users_dir, owner_repo.owner, owner_repo.name)) orelse return false; │ │563 return evt.Repo.roleOf(repo.repo, user_id) != .none; │ │564 } │ │565 │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │708 } │ │709 const repo_id = evt.parseEventId(std.fs.path.basename(request_repo.source.path)) catch return respondRemoveNotFound(request); │ │710 const repo_user_id = actor.repo_user_id orelse unreachable; │ │711 - var user_repo = (try evt.openUserRepo(io, allocator, server.repo_root_path, &user_id)) orelse return respondRemoveNotFound(request);│ │712 - defer user_repo.deinit(io, allocator); │ │713 - const fork_path = try fork.create(.{}, io, allocator, server.repo_root_path, &user_repo, .{ │ │711 + const fork_path = try fork.create(.{}, io, allocator, server.users_dir, .{ │ │712 .id = event_id_hex, │ │713 .user_id = user_id, │ │714 .repo_id = repo_id, │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │814 var admin_repo = try rp.Repo(.xit, evt.admin_repo_opts).open(io, allocator, .{ .path = server.admin_repo_path }); │ │815 defer admin_repo.deinit(io, allocator); │ │816 const id = std.fmt.bytesToHex(parts.thread_id, .lower); │ │819 - const fork_path = try fork.forkPath(allocator, server.repo_root_path, &id); │ │820 - defer allocator.free(fork_path); │ │821 - var user_repo = (try evt.openUserRepo(io, allocator, server.repo_root_path, &user_id)) orelse return respondRemoveNotFound(request);│ │822 - defer user_repo.deinit(io, allocator); │ │823 - try pch.publish(.{}, io, allocator, &admin_repo, &user_repo, &target_repo, fork_path, .{ │ │817 + try pch.publish(.{}, io, allocator, server.users_dir, &admin_repo, &target_repo, .{ │ │818 .id = id, │ │819 .user_id = user_id, │ │820 .repo_id = repo_id, │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────╮ │851 defer target_repo.deinit(io, allocator); │ │852 │ │853 const id = std.fmt.bytesToHex(parts.thread_id, .lower); │ │860 - pch.mergeAndRemoveFork(.{}, io, allocator, server.repo_root_path, &target_repo, .{│ │854 + pch.mergeAndRemoveFork(.{}, io, allocator, server.users_dir, &target_repo, .{ │ │855 .id = id, │ │856 .revision = revision, │ │857 .author = author, │ ╰───────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1328 const user_id = actor.user_id orelse return respondLoginRequired(request); │ │1329 │ │1330 // a draft lives in its author's user repo │ │1337 - if (try evt.readForkById(io, allocator, &author_arena, server.repo_root_path, &user_id, &parts.id)) |fork_record| { │ │1331 + if (try evt.readForkById(io, allocator, &author_arena, server.users_dir, &user_id, &parts.id)) |fork_record| { │ │1332 const repo_id = evt.parseEventId(std.fs.path.basename(source.path)) catch return respondRemoveNotFound(request); │ │1333 if (!fork_record.removed and fork_record.event.stage == .draft and std.mem.eql(u8, fork_record.event.repo_id, &repo_id)) {│ │1334 const id = std.fmt.bytesToHex(parts.id, .lower); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1341 - var user_repo = (try evt.openUserRepo(io, allocator, server.repo_root_path, &user_id)) orelse unreachable;│ │1342 - defer user_repo.deinit(io, allocator); │ │1343 - try fork.remove(io, allocator, server.repo_root_path, &user_repo, &id, author); │ │1335 + try fork.remove(io, allocator, server.users_dir, &user_id, &id, author); │ │1336 │ │1337 const location = try std.fmt.allocPrint(allocator, "{s}/patches/drafts", .{parts.repo_base}); │ │1338 defer allocator.free(location); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1528 var admin_repo = try rp.Repo(.xit, evt.admin_repo_opts).open(io, allocator, .{ .path = server.admin_repo_path }); │ │1529 defer admin_repo.deinit(io, allocator); │ │1530 const id = std.fmt.bytesToHex(parts.thread_id, .lower); │ │1539 - const fork_path = try fork.forkPath(allocator, server.repo_root_path, &id); │ │1540 - defer allocator.free(fork_path); │ │1541 - var user_repo = (try evt.openUserRepo(io, allocator, server.repo_root_path, &user_id)) orelse return respondRemoveNotFound(request);│ │1542 - defer user_repo.deinit(io, allocator); │ │1543 - if (try pch.editDraft(.{}, io, allocator, &admin_repo, &user_repo, fork_path, .{ │ │1531 + if (try pch.editDraft(.{}, io, allocator, server.users_dir, &admin_repo, .{ │ │1532 .id = id, │ │1533 .user_id = user_id, │ │1534 .repo_id = repo_id, │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯