╭ changed ────╮ │src/event.zig│ ╰─────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1368 } │ │1369 } │ │1370 │ │1371 +pub fn readFromRepo( │ │1372 + comptime T: type, │ │1373 + comptime repo_kind: rp.RepoKind, │ │1374 + comptime repo_opts: rp.RepoOpts(repo_kind), │ │1375 + io: std.Io, │ │1376 + allocator: std.mem.Allocator, │ │1377 + arena: *std.heap.ArenaAllocator, │ │1378 + repo: *rp.Repo(repo_kind, repo_opts), │ │1379 + id: *const [event_id_size]u8, │ │1380 +) !?T.Record { │ │1381 + var event_db_maybe: ?LocalEventDB(repo_opts.hash) = if (repo_kind == .git) try LocalEventDB(repo_opts.hash).openReadOnly(io, allocator, repo.core.repo_dir) else null;│ │1382 + defer if (event_db_maybe) |*event_db| event_db.deinit(io, allocator); │ │1383 + const moment = (if (event_db_maybe) |*event_db| │ │1384 + currentMomentFromDb(repo_opts.hash, event_db.db) │ │1385 + else if (repo_kind == .git) │ │1386 + return null │ │1387 + else │ │1388 + currentMoment(repo_opts, repo)) catch return null; │ │1389 + return T.readById(EventDB(repo_opts.hash), repo_opts.hash, moment, arena, id); │ │1390 +} │ │1391 + │ │1392 pub fn currentMoment( │ │1393 comptime repo_opts: rp.RepoOpts(.xit), │ │1394 repo: *rp.Repo(.xit, repo_opts), │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯