╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ Patch.zig ────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
422 allocator: std.mem.Allocator, 423 arena: *std.heap.ArenaAllocator, 424 repo: *rp.Repo(repo_kind, repo_opts), 425 id: *const [evt.event_id_size]u8, 426 ) !?Record { 427 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; 428 defer if (event_db_maybe) |*event_db| event_db.deinit(io, allocator); 429 const moment = (if (event_db_maybe) |*event_db| 430 evt.currentMomentFromDb(repo_opts.hash, event_db.db) 431 else if (repo_kind == .git) 432 return null 433 else 434 evt.currentMoment(repo_opts, repo)) catch return null; 435 return readById(evt.EventDB(repo_opts.hash), repo_opts.hash, moment, arena, id); 436 } 437 438 fn revisionKey(allocator: std.mem.Allocator, target_branch: []const u8, oid: []const u8) ![]u8 { 439 return std.mem.concat(allocator, u8, &.{ target_branch, "\x00", oid }); 440 } 441 442 fn statusSet( 443 comptime DB: type, 444 statuses: DB.SortedMap(.read_write), 445 status: StatusKind, 446 ) !DB.SortedSet(.read_write) { 447 return DB.SortedSet(.read_write).init(try statuses.putCursor(@tagName(status))); 448 } 449 450 fn removeFromTagSets( 451 comptime DB: type, 452 tag_statuses: DB.SortedMap(.read_write), 453 tags: []const u8, 454 status: StatusKind, 455 order_key: []const u8, 456 ) !void { 457 var tag_iter = tagIterator(tags); 458 while (tag_iter.next()) |tag| { 459 if (tag.len == 0 or tag.len > tag_max_len) continue; 460 var key_buffer: TagStatusKey = undefined; 461 const key = try tagStatusKey(&key_buffer, tag, status); 462 const set = try DB.SortedSet(.read_write).init(try tag_statuses.putCursor(key)); 463 _ = try set.remove(order_key); 464 if (0 == try set.count()) _ = try tag_statuses.remove(key); 465 } 466 } 467 468 pub fn readById( 469 comptime DB: type, 470 comptime hash_kind: hash.HashKind, 471 haxy_moment: DB.HashMap(.read_only), 472 arena: *std.heap.ArenaAllocator, 473 id: *const [evt.event_id_size]u8, 474 ) !?Record { 475 const records_cursor = try haxy_moment.getCursor(hash.hashInt(hash_kind, record_map_key)) orelse return null; 476 const records = try DB.HashMap(.read_only).init(records_cursor); 477 const record_cursor = try records.getCursor(hash.hashInt(hash_kind, id)) orelse return null; 478 return try evt.read(Record, DB, hash_kind, arena, try DB.HashMap(.read_only).init(record_cursor)); 479 } 480