╭ changed ──────╮ │src/ui/Repo.zig│ ╰───────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │318 if (session.data.host_kind == .server and handle.canUndo()) { │ │319 // a server page always resolved its repo id │ │320 const repo_id = repo_id_maybe orelse unreachable; │ │321 + const identity = try arena.allocator().dupe(u8, repo_identity.identity); │ │322 + // only the repo's creator may delete it, never a granted owner │ │323 + const creator = if (session.userId()) |user_id| std.mem.eql(u8, &user_id, &owner_id) else false;│ │324 settings = .{ │ │322 - .identity = try arena.allocator().dupe(u8, repo_identity.identity), │ │325 + .identity = identity, │ │326 .name = repo.event.name, │ │327 .description = repo.event.description, │ │328 .access = repo.event.read_access, │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │333 .view = switch (route) { │ │334 .repo_members => .members, │ │335 .repo_branches => .branches, │ │336 + .repo_delete => .delete, │ │337 else => .settings, │ │338 }, │ │339 .members = try Members.init(io, gpa, arena, session.haxy_moment orelse return error.NoMoment, session.users_dir orelse return error.NoMoment, repo_identity.identity, &owner_id, &repo_id, members_route.start, if (members_route.confirm) |action| .{ .action = action, .name = members_route.user.slice() } else null),│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │340 .branches = try Branches.init(arena, repo_identity.identity, repo.event),│ │341 + .delete = if (creator) .{ .target = .{ .repo = identity } } else null, │ │342 }; │ │343 } │ │344 // tabs switch in-page, so every tab's data is read here │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │402 }; │ │403 }; │ │404 if (route == .repo_undo and undo_data == null) return error.NotFound; │ │400 - if ((route == .repo_settings or route == .repo_members or route == .repo_branches) and settings == null) return error.NotFound; │ │405 + if ((route == .repo_settings or route == .repo_members or route == .repo_branches or route == .repo_delete) and settings == null) return error.NotFound;│ │406 + if (settings) |value| if (route == .repo_delete and value.delete == null) return error.NotFound; │ │407 discussions.repo_source = source; │ │408 issues.repo_source = source; │ │409 patches.repo_source = source; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯