╭ changed ──╮ │src/web.zig│ ╰───────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │501 }, │ │502 } │ │503 │ │504 - const location = try std.fmt.allocPrint(allocator, "{s}/issues/{s}", .{ base, &event_id_hex });│ │504 + const location = try std.fmt.allocPrint(allocator, "{s}/issue:{s}", .{ base, &event_id_hex }); │ │505 defer allocator.free(location); │ │506 try request.respond("", .{ │ │507 .status = .see_other, │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │509 }); │ │510 } │ │511 │ │512 -// split an issue url ("/repo/<owner>/<name>/issues/<id>", identity elided in │ │513 -// local mode) into what precedes "/issues/" and the decoded id, null when it │ │512 +// split an issue url ("/repo/<owner>/<name>/issue:<id>", identity elided in │ │513 +// local mode) into what precedes "/issue:" and the decoded id, null when it │ │514 // isn't one. the repo base is validated per host in updateIssue. │ │515 const IssueBaseParts = struct { repo_base: []const u8, id_bytes: [evt.event_id_size]u8 };│ │516 fn issueBaseParts(base: []const u8) ?IssueBaseParts { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────╮ │517 - const issues_infix = "/issues/"; │ │517 + const issues_infix = "/issue:"; │ │518 const id_len = evt.event_id_size * 2; │ │519 if (base.len < issues_infix.len + id_len) return null;│ │520 var id_bytes: [evt.event_id_size]u8 = undefined; │ ╰───────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │552 try evt.Issue.update(.xit, .{}, io, allocator, &repo, &parts.id_bytes, update, author_email);│ │553 }, │ │554 .local => |src| { │ │555 - // the local forms post to "/issues/<id>/...", so the repo base │ │555 + // the local forms post to "/issue:<id>/...", so the repo base │ │556 // is empty │ │557 if (parts.repo_base.len != 0) return error.NotFound; │ │558 switch (src.repo_kind) { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │569 } │ │570 │ │571 // set the status of the issue the url names (base is │ │572 -// "/repo/<owner>/<name>/issues/<id>", identity elided in local mode) by│ │572 +// "/repo/<owner>/<name>/issue:<id>", identity elided in local mode) by │ │573 // re-emitting its event, then redirect back to it │ │574 fn handleIssueStatus( │ │575 io: std.Io, │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────╮ │613 } │ │614 │ │615 // replace the title/tags/description of the issue the url names (base is│ │616 -// "/repo/<owner>/<name>/issues/<id>", identity elided in local mode; the│ │616 +// "/repo/<owner>/<name>/issue:<id>", identity elided in local mode; the │ │617 // form posts to "<base>/edit") by re-emitting its event with its status │ │618 // preserved, then redirect back to it │ │619 fn handleIssueEdit( │ ╰──────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────╮ │685 } │ │686 │ │687 // resolve the conflict of the issue the url names (base is │ │688 -// "/repo/<owner>/<name>/issues/<id>", identity elided in local mode; the│ │688 +// "/repo/<owner>/<name>/issue:<id>", identity elided in local mode; the │ │689 // form posts to "<base>/resolve") │ │690 fn handleIssueResolve( │ │691 io: std.Io, │ ╰──────────────────────────────────────────────────────────────────────────────╯