╭ changed ──────╮ │src/ui/Repo.zig│ ╰───────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │229 // knows all three; the server paths resolve them from the admin db.│ │230 var source: ?ui.RepoSource = null; │ │231 var repo_id_maybe: ?[evt.event_id_size]u8 = null; │ │232 + // local mode has no owner │ │233 + var owner_id: [evt.event_id_size]u8 = @splat(0); │ │234 var repo: evt.Repo.Record = undefined; │ │235 // local mode owns its repo │ │236 var role: evt.Repo.Role = .owner; │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ │241 // repo's directory rather than the route. │ │242 repo = .{ │ │243 .event = .{ │ │242 - .user_id = "", │ │244 + .user_id = @splat('0'), │ │245 .name = try arena.allocator().dupe(u8, std.Io.Dir.path.basename(local.path)),│ │246 .description = "", │ │247 // local mode shows every tab │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │263 │ │264 // resolve the creating user so the header can show their name to the left │ │265 // of the repo title. │ │264 - const owner = (try evt.User.readById(DB, hash_kind, haxy_moment, arena, repo.event.user_id)) orelse return error.NotFound;│ │266 + owner_id = try evt.parseEventId(&repo.event.user_id); │ │267 + const owner = (try evt.User.readById(DB, hash_kind, haxy_moment, arena, &owner_id)) orelse return error.NotFound; │ │268 owner_name = owner.event.name; │ │269 │ │270 // the repo's working copy lives in its owner's dir. │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │271 source = .{ │ │269 - .path = try evt.repoPath(arena.allocator(), users_dir, repo.event.user_id, &found.event_id),│ │272 + .path = try evt.repoPath(arena.allocator(), users_dir, &owner_id, &found.event_id), │ │273 .repo_kind = .xit, │ │274 }; │ │275 } │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │326 .patch_role = repo.event.patch_role, │ │327 .hash_kind = opened.self_repo_opts.hash, │ │328 .view = if (route == .repo_roles) .roles else .settings, │ │326 - .roles = try Roles.init(io, gpa, arena, session.haxy_moment orelse return error.NoMoment, session.users_dir orelse return error.NoMoment, repo_identity.identity, repo.event.user_id[0..evt.event_id_size], &repo_id, roles_start),│ │329 + .roles = try Roles.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, roles_start), │ │330 }; │ │331 } │ │332 // tabs switch in-page, so every tab's data is read here │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │360 if (repo_kind == .xit and session.data.host_kind == .server) { │ │361 // a server page always resolved its repo id │ │362 const repo_id = repo_id_maybe orelse unreachable; │ │360 - readNotify(opened.self_repo_opts, session, arena, opened, repo.event.user_id[0..evt.event_id_size], &repo_id, viewed_thread, &discussions_data, &issues_data, &patches_data) catch |err| {│ │363 + readNotify(opened.self_repo_opts, session, arena, opened, &owner_id, &repo_id, viewed_thread, &discussions_data, &issues_data, &patches_data) catch |err| { │ │364 std.log.warn("failed to read thread notifications: {s}", .{@errorName(err)}); │ │365 }; │ │366 } │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯