╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1511 } │ │1512 return null; │ │1513 } │ │1514 - if (!params.only(&.{ .start, .tag, .search })) return null; │ │1515 - return withEncodedFilters(repoThreadCommentsRoute(.patch, pair, patch_id, params.start() orelse return null), params.values.get(.tag) orelse "", params.values.get(.search) orelse ""); │ │1514 + if (!params.only(&.{ .start, .label, .search })) return null; │ │1515 + return withEncodedFilters(repoThreadCommentsRoute(.patch, pair, patch_id, params.start() orelse return null), params.values.get(.label) orelse "", params.values.get(.search) orelse "");│ │1516 } │ │1517 if (std.mem.startsWith(u8, tab, discuss_seg)) { │ │1518 const discussion_id = tab[discuss_seg.len..]; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1542 if (std.mem.eql(u8, tail, "description")) return if (params.only(&.{})) repoThreadDescriptionRoute(.discuss, pair, discussion_id) else null; │ │1543 return null; │ │1544 } │ │1545 - if (!params.only(&.{ .start, .tag, .search })) return null; │ │1546 - return withEncodedFilters(repoThreadCommentsRoute(.discuss, pair, discussion_id, params.start() orelse return null), params.values.get(.tag) orelse "", params.values.get(.search) orelse ""); │ │1545 + if (!params.only(&.{ .start, .label, .search })) return null; │ │1546 + return withEncodedFilters(repoThreadCommentsRoute(.discuss, pair, discussion_id, params.start() orelse return null), params.values.get(.label) orelse "", params.values.get(.search) orelse "");│ │1547 } │ │1548 if (std.mem.eql(u8, tab, "issues")) { │ │1549 // the word is a list view; a filter with neither is never emitted. │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1550 const word = params.scanTail(&segments) catch return null; │ │1551 - const tag_value = params.values.get(.tag) orelse ""; │ │1551 + const label_value = params.values.get(.label) orelse ""; │ │1552 const w = word orelse return if (params.only(&.{})) repoIssuesRoute(pair, .open, "", "") else null;│ │1553 // the conflicts list windows by an issue id, not a number, so it │ │1554 // reads the start param raw │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1556 if (!params.only(&.{.start})) return null; │ │1557 return repoIssuesConflictsRoute(pair, params.values.get(.start) orelse ""); │ │1558 } │ │1559 - if (!params.only(&.{ .tag, .search })) return null; │ │1559 + if (!params.only(&.{ .label, .search })) return null; │ │1560 const search_value = params.values.get(.search) orelse ""; │ │1561 - if (std.meta.stringToEnum(evt.Issue.Status, w)) |status| return withEncodedSearch(repoIssuesRoute(pair, status, tag_value, ""), search_value); │ │1562 - if (std.mem.eql(u8, w, "tags")) return withEncodedSearch(repoThreadTagsRoute(.issue, pair, tag_value), search_value); │ │1563 - if (std.mem.eql(u8, w, "new")) return if (tag_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.issue, pair) else null; │ │1561 + if (std.meta.stringToEnum(evt.Issue.Status, w)) |status| return withEncodedSearch(repoIssuesRoute(pair, status, label_value, ""), search_value);│ │1562 + if (std.mem.eql(u8, w, "labels")) return withEncodedSearch(repoThreadLabelsRoute(.issue, pair, label_value), search_value); │ │1563 + if (std.mem.eql(u8, w, "new")) return if (label_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.issue, pair) else null; │ │1564 return null; │ │1565 } │ │1566 if (std.mem.eql(u8, tab, "patches")) { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1567 const word = params.scanTail(&segments) catch return null; │ │1568 - const tag_value = params.values.get(.tag) orelse ""; │ │1568 + const label_value = params.values.get(.label) orelse ""; │ │1569 const view = word orelse return if (params.only(&.{})) repoPatchesRoute(pair, .open, "", "") else null;│ │1570 if (std.mem.eql(u8, view, "conflicts")) { │ │1571 if (!params.only(&.{.start})) return null; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1572 return repoPatchesConflictsRoute(pair, params.values.get(.start) orelse ""); │ │1573 } │ │1574 - if (!params.only(&.{ .tag, .search })) return null; │ │1574 + if (!params.only(&.{ .label, .search })) return null; │ │1575 const search_value = params.values.get(.search) orelse ""; │ │1576 - if (std.meta.stringToEnum(evt.Patch.StatusKind, view)) |status| return withEncodedSearch(repoPatchesRoute(pair, status, tag_value, ""), search_value); │ │1577 - if (std.mem.eql(u8, view, "tags")) return withEncodedSearch(repoThreadTagsRoute(.patch, pair, tag_value), search_value); │ │1578 - if (std.mem.eql(u8, view, "new")) return if (tag_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.patch, pair) else null; │ │1579 - if (std.mem.eql(u8, view, "drafts")) return if (tag_value.len == 0 and search_value.len == 0) repoPatchesDraftsRoute(pair) else null; │ │1576 + if (std.meta.stringToEnum(evt.Patch.StatusKind, view)) |status| return withEncodedSearch(repoPatchesRoute(pair, status, label_value, ""), search_value);│ │1577 + if (std.mem.eql(u8, view, "labels")) return withEncodedSearch(repoThreadLabelsRoute(.patch, pair, label_value), search_value); │ │1578 + if (std.mem.eql(u8, view, "new")) return if (label_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.patch, pair) else null; │ │1579 + if (std.mem.eql(u8, view, "drafts")) return if (label_value.len == 0 and search_value.len == 0) repoPatchesDraftsRoute(pair) else null; │ │1580 return null; │ │1581 } │ │1582 if (std.mem.eql(u8, tab, "discussions")) { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1583 const word = params.scanTail(&segments) catch return null; │ │1584 - const tag_value = params.values.get(.tag) orelse ""; │ │1584 + const label_value = params.values.get(.label) orelse ""; │ │1585 const view = word orelse return if (params.only(&.{})) repoDiscussionsRoute(pair, "", "") else null; │ │1586 - if (!params.only(&.{ .tag, .search })) return null; │ │1586 + if (!params.only(&.{ .label, .search })) return null; │ │1587 const search_value = params.values.get(.search) orelse ""; │ │1588 - if (std.mem.eql(u8, view, "recent")) return withEncodedSearch(repoDiscussionsRoute(pair, tag_value, ""), search_value); │ │1589 - if (std.mem.eql(u8, view, "tags")) return withEncodedSearch(repoThreadTagsRoute(.discuss, pair, tag_value), search_value); │ │1590 - if (std.mem.eql(u8, view, "new")) return if (tag_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.discuss, pair) else null; │ │1588 + if (std.mem.eql(u8, view, "recent")) return withEncodedSearch(repoDiscussionsRoute(pair, label_value, ""), search_value); │ │1589 + if (std.mem.eql(u8, view, "labels")) return withEncodedSearch(repoThreadLabelsRoute(.discuss, pair, label_value), search_value); │ │1590 + if (std.mem.eql(u8, view, "new")) return if (label_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.discuss, pair) else null;│ │1591 return null; │ │1592 } │ │1593 if (std.mem.eql(u8, tab, "undo")) { │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1720 a_d.start == b.repo_diff.start and std.mem.eql(u8, a_d.path.slice(), b.repo_diff.path.slice()), │ │1721 .repo_refs => |a_r| std.mem.eql(u8, a_r.name.slice(), b.repo_refs.name.slice()) and a_r.kind == b.repo_refs.kind and std.mem.eql(u8, a_r.from.slice(), b.repo_refs.from.slice()) and std.mem.eql(u8, a_r.search.slice(), b.repo_refs.search.slice()),│ │1722 .repo_issues => |a_i| std.mem.eql(u8, a_i.name.slice(), b.repo_issues.name.slice()) and │ │1723 - std.mem.eql(u8, a_i.tag.slice(), b.repo_issues.tag.slice()) and │ │1723 + std.mem.eql(u8, a_i.label.slice(), b.repo_issues.label.slice()) and │ │1724 std.mem.eql(u8, a_i.search.slice(), b.repo_issues.search.slice()) and │ │1725 std.mem.eql(u8, a_i.selected.slice(), b.repo_issues.selected.slice()) and │ │1726 std.mem.eql(u8, a_i.theirs.slice(), b.repo_issues.theirs.slice()) and │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1728 a_i.comments_start == b.repo_issues.comments_start and │ │1729 std.mem.eql(u8, a_i.comment.slice(), b.repo_issues.comment.slice()), │ │1730 .repo_discussions => |a_t| std.mem.eql(u8, a_t.name.slice(), b.repo_discussions.name.slice()) and│ │1731 - std.mem.eql(u8, a_t.tag.slice(), b.repo_discussions.tag.slice()) and │ │1731 + std.mem.eql(u8, a_t.label.slice(), b.repo_discussions.label.slice()) and │ │1732 std.mem.eql(u8, a_t.search.slice(), b.repo_discussions.search.slice()) and │ │1733 std.mem.eql(u8, a_t.selected.slice(), b.repo_discussions.selected.slice()) and │ │1734 a_t.view == b.repo_discussions.view and │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1735 a_t.comments_start == b.repo_discussions.comments_start and │ │1736 std.mem.eql(u8, a_t.comment.slice(), b.repo_discussions.comment.slice()), │ │1737 .repo_patches => |a_p| std.mem.eql(u8, a_p.name.slice(), b.repo_patches.name.slice()) and│ │1738 - std.mem.eql(u8, a_p.tag.slice(), b.repo_patches.tag.slice()) and │ │1738 + std.mem.eql(u8, a_p.label.slice(), b.repo_patches.label.slice()) and │ │1739 std.mem.eql(u8, a_p.search.slice(), b.repo_patches.search.slice()) and │ │1740 std.mem.eql(u8, a_p.selected.slice(), b.repo_patches.selected.slice()) and │ │1741 std.mem.eql(u8, a_p.theirs.slice(), b.repo_patches.theirs.slice()) and │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯