╭ changed ──────────╮ │src/event/Patch.zig│ ╰───────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │68 │ │69 pub const Merged = struct { │ │70 revision: MergeRevision, │ │71 - before_oid: []const u8, // all zeroes if the target did not exist│ │72 - after_oid: []const u8, │ │71 + patchrev_id: [evt.event_id_size * 2]u8, │ │72 }; │ │73 │ │74 pub fn kind(self: Status) StatusKind { │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │182 switch (record.event.status) { │ │183 .open, .closed => {}, │ │184 .merged => |merged| { │ │186 - try evt.PatchRev.validateOid(hash_kind, merged.before_oid); │ │187 - try evt.PatchRev.validateOid(hash_kind, merged.after_oid); │ │185 + const merged_id = try evt.parseEventId(&merged.patchrev_id); │ │186 + const merged_revision = (try evt.PatchRev.readById(DB, hash_kind, haxy_moment.readOnly(), arena, &merged_id)) orelse return error.InvalidPatch;│ │187 + if (merged_revision.removed) return error.InvalidPatch; │ │188 const id = revision_id orelse return error.InvalidPatch; │ │189 const selected = record.event.revision orelse return error.InvalidPatch; │ │190 const revision = (try evt.PatchRev.readById(DB, hash_kind, haxy_moment.readOnly(), arena, &id)) orelse return error.InvalidPatch; │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │301 ) !void { │ │302 var arena = std.heap.ArenaAllocator.init(allocator); │ │303 defer arena.deinit(); │ │304 - const record = (try readFromRepo(repo_kind, repo_opts, io, allocator, &arena, repo, id)) orelse return error.NotFound; │ │304 + const record = (try evt.readFromRepo(Self, repo_kind, repo_opts, io, allocator, &arena, repo, id)) orelse return error.NotFound;│ │305 if (record.removed) return error.NotFound; │ │306 │ │307 var updated = record.event; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │406 if (std.mem.eql(u8, field, name)) return true; │ │407 } │ │408 return false; │ │409 -} │ │410 - │ │411 -pub fn readFromRepo( │ │412 - comptime repo_kind: rp.RepoKind, │ │413 - comptime repo_opts: rp.RepoOpts(repo_kind), │ │414 - io: std.Io, │ │415 - allocator: std.mem.Allocator, │ │416 - arena: *std.heap.ArenaAllocator, │ │417 - repo: *rp.Repo(repo_kind, repo_opts), │ │418 - id: *const [evt.event_id_size]u8, │ │419 -) !?Record { │ │420 - var event_db_maybe: ?evt.LocalEventDB(repo_opts.hash) = if (repo_kind == .git) try evt.LocalEventDB(repo_opts.hash).openReadOnly(io, allocator, repo.core.repo_dir) else null;│ │421 - defer if (event_db_maybe) |*event_db| event_db.deinit(io, allocator); │ │422 - const moment = (if (event_db_maybe) |*event_db| │ │423 - evt.currentMomentFromDb(repo_opts.hash, event_db.db) │ │424 - else if (repo_kind == .git) │ │425 - return null │ │426 - else │ │427 - evt.currentMoment(repo_opts, repo)) catch return null; │ │428 - return readById(evt.EventDB(repo_opts.hash), repo_opts.hash, moment, arena, id); │ │409 } │ │410 │ │411 fn revisionKey(allocator: std.mem.Allocator, target_branch: []const u8, oid: []const u8) ![]u8 { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯