╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ 96 }; │ │ 97 }, │ │ 98 .repo => switch (route) { │ │ 99 - .repo_files, .repo_commits, .repo_diff, .repo_refs, .repo_issues, .repo_patches, .repo_discussions, .repo_events, .repo_undo, .repo_repo_new, .repo_user_new, .repo_user => .{ .repo = try Repo.init(arena, session, route) }, │ │ 99 + .repo_files, .repo_commits, .repo_diff, .repo_refs, .repo_issues, .repo_patches, .repo_discussions, .repo_events, .repo_undo, .repo_repo, .repo_repo_new, .repo_user_new, .repo_user => .{ .repo = try Repo.init(arena, session, route) },│ │100 else => return error.UnexpectedRoute, │ │101 }, │ │102 .fork => switch (route) { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────╮ │190 repo_undo: RepoUndoRoute, │ │191 repo_repo_new: Array(repo_route_max_len),│ │192 repo_user_new: Array(repo_route_max_len),│ │193 + repo_repo: Array(repo_route_max_len), │ │194 repo_user: Array(repo_route_max_len), │ │195 fork_patch: ForkRoute, │ │196 fork_diff: ForkDiffRoute, │ ╰──────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │428 // the clear-history confirmation page, which has no selected entry │ │429 clear: bool = false, │ │430 }; │ │431 + │ │432 + pub fn repoRepoRoute(identity: []const u8) ?RoutablePage { │ │433 + return .{ .repo_repo = Array(repo_route_max_len).from(identity) orelse return null }; │ │434 + } │ │435 │ │436 pub fn repoUndoRoute(identity: []const u8, index: ?u64) ?RoutablePage { │ │437 return .{ .repo_undo = .{ .name = Array(repo_identity_max_len).from(identity) orelse return null, .index = index } };│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1246 }, │ │1247 .repo_repo_new => |name| try std.fmt.allocPrint(arena.allocator(), "{s}/repo/new", .{try repoUrlPrefix(arena, name.slice())}), │ │1248 .repo_user_new => |name| try std.fmt.allocPrint(arena.allocator(), "{s}/user/new", .{try repoUrlPrefix(arena, name.slice())}), │ │1249 + .repo_repo => |name| try std.fmt.allocPrint(arena.allocator(), "{s}/repo", .{try repoUrlPrefix(arena, name.slice())}), │ │1250 .repo_user => |name| try std.fmt.allocPrint(arena.allocator(), "{s}/user", .{try repoUrlPrefix(arena, name.slice())}), │ │1251 .fork_patch => |f| try std.fmt.allocPrint(arena.allocator(), fork_segment ++ "{s}/" ++ patch_seg ++ "{s}", .{ f.name.slice(), f.id.slice() }),│ │1252 .fork_diff => |d| blk: { │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────╮ │1408 .repo_discussions => |*t| t.name.slice(), │ │1409 .repo_events => |*e| e.name.slice(), │ │1410 .repo_undo => |*u| u.name.slice(), │ │1405 - .repo_repo_new, .repo_user_new, .repo_user => |*name| name.slice(), │ │1411 + .repo_repo, .repo_repo_new, .repo_user_new, .repo_user => |*name| name.slice(),│ │1412 else => null, │ │1413 }; │ │1414 } │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1451 return switch (self) { │ │1452 .home_about, .home_users, .home_repo_new, .home_user_new, .home_user => .home, │ │1453 .user_repos, .user_forks, .user_repo_new, .user_user_new, .user_user => .user, │ │1448 - .repo_files, .repo_commits, .repo_diff, .repo_refs, .repo_issues, .repo_patches, .repo_discussions, .repo_events, .repo_undo, .repo_repo_new, .repo_user_new, .repo_user => .repo, │ │1454 + .repo_files, .repo_commits, .repo_diff, .repo_refs, .repo_issues, .repo_patches, .repo_discussions, .repo_events, .repo_undo, .repo_repo, .repo_repo_new, .repo_user_new, .repo_user => .repo,│ │1455 .fork_patch, .fork_diff, .fork_files, .fork_commits, .fork_repo_new, .fork_user_new, .fork_user => .fork, │ │1456 .not_found => .not_found, │ │1457 }; │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1499 var segments = std.mem.splitScalar(u8, sub, '/'); │ │1500 const tab = segments.next() orelse return null; │ │1501 var params = Params{}; │ │1496 - if (std.mem.eql(u8, tab, "repo")) return if (isNewTail(&segments)) .{ .repo_repo_new = Array(repo_route_max_len).from(pair) orelse return null } else null; │ │1502 + if (std.mem.eql(u8, tab, "repo")) return if (segments.peek() == null) .{ .repo_repo = Array(repo_route_max_len).from(pair) orelse return null } else if (isNewTail(&segments)) .{ .repo_repo_new = Array(repo_route_max_len).from(pair) orelse return null } else null;│ │1503 if (std.mem.eql(u8, tab, "user")) return if (segments.peek() == null) .{ .repo_user = Array(repo_route_max_len).from(pair) orelse return null } else if (isNewTail(&segments)) .{ .repo_user_new = Array(repo_route_max_len).from(pair) orelse return null } else null;│ │1504 if (std.mem.eql(u8, tab, "refs")) { │ │1505 const word = params.scanTail(&segments) catch return null; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1812 std.mem.eql(u8, a_e.selected.slice(), b.repo_events.selected.slice()), │ │1813 .repo_repo_new => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_repo_new.slice()), │ │1814 .repo_user_new => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_user_new.slice()), │ │1815 + .repo_repo => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_repo.slice()), │ │1816 .repo_user => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_user.slice()), │ │1817 .fork_patch => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_patch.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_patch.id.slice()),│ │1818 .fork_diff => |a_d| std.mem.eql(u8, a_d.fork.name.slice(), b.fork_diff.fork.name.slice()) and │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────╮ │2267 access: evt.Repo.Access,│ │2268 }, │ │2269 }, │ │2270 + repo_settings: struct { │ │2271 + failure: RepoFailure, │ │2272 + fields: struct { │ │2273 + name: []const u8, │ │2274 + description: []const u8,│ │2275 + access: evt.Repo.Access,│ │2276 + }, │ │2277 + }, │ │2278 issue: struct { │ │2279 failure: ThreadFailure, │ │2280 fields: ?struct { │ ╰──────────────────────────────────────────────╯