╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ───────────────╮ │src/test/event/patch.zig│ ╰────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │150 const patchrev_record = (try evt.PatchRev.readById(Repo.DB, repo_opts.hash, moment, &arena, &patchrev_id)) orelse return error.NotFound; │ │151 try std.testing.expectEqualStrings(&base_tree_oid, patchrev_record.base_tree_oid); │ │152 try std.testing.expectEqualStrings(&head_tree_oid, patchrev_record.head_tree_oid); │ │154 - try std.testing.expectEqualStrings(&std.fmt.bytesToHex(patchrev_id, .lower), &patch_record.event.patchrev_id); │ │153 + try std.testing.expectEqualStrings(&std.fmt.bytesToHex(patchrev_id, .lower), &(patch_record.event.patchrev_id orelse return error.NotFound));│ │154 │ │155 var initial_patch_oid: [hash.hexLen(repo_opts.hash)]u8 = undefined; │ │156 @memcpy(&initial_patch_oid, patchrev_record.patch_oid); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │248 .timestamp = 8, │ │249 .author = author, │ │250 .tree_entries = &target_entries, │ │252 - .event = .{ .patchrev = .{ .base_oid = &base_oid, .source_oid = &source_a_oid, .message = updated_patch.title } }, │ │251 + .event = .{ .patchrev = .{ .base_oid = &base_oid, .source_oid = &source_a_oid, .target_ref = "refs/heads/master", .message = updated_patch.title } },│ │252 }, │ │253 .{ │ │254 .id = std.fmt.bytesToHex(patch_id, .lower), │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │277 .timestamp = 10, │ │278 .author = author, │ │279 .tree_entries = &parent_entries, │ │281 - .event = .{ .patchrev = .{ .base_oid = &base_oid, .source_oid = &source_b_oid, .message = updated_patch.title } }, │ │280 + .event = .{ .patchrev = .{ .base_oid = &base_oid, .source_oid = &source_b_oid, .target_ref = "refs/heads/master", .message = updated_patch.title } },│ │281 }, │ │282 .{ │ │283 .id = std.fmt.bytesToHex(patch_id, .lower), │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │304 _ = arena.reset(.retain_capacity); │ │305 const merged_moment = try evt.currentMoment(repo_opts, &target); │ │306 const merged = (try evt.Patch.readById(Repo.DB, repo_opts.hash, merged_moment, &arena, &patch_id)) orelse return error.NotFound; │ │308 - try std.testing.expectEqualStrings(&std.fmt.bytesToHex(patchrev_a_id, .lower), &merged.event.patchrev_id); │ │307 + try std.testing.expectEqualStrings(&std.fmt.bytesToHex(patchrev_a_id, .lower), &(merged.event.patchrev_id orelse return error.NotFound)); │ │308 const merged_patchrev = (try evt.PatchRev.readById(Repo.DB, repo_opts.hash, merged_moment, &arena, &patchrev_a_id)) orelse return error.NotFound;│ │309 try std.testing.expectEqualStrings(&source_a_oid, merged_patchrev.event.source_oid); │ │310 try std.testing.expectEqualStrings(&source_a_tree, merged_patchrev.head_tree_oid); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │317 try std.testing.expectEqualStrings("patchrev_id", try fields_cursor.readBytesAlloc(arena.allocator(), null)); │ │318 const their_cursor = try conflict.getCursor(hash.hashInt(repo_opts.hash, evt.their_record_key)) orelse return error.NotFound; │ │319 const theirs = try evt.read(evt.Patch.Record, Repo.DB, repo_opts.hash, &arena, try Repo.DB.HashMap(.read_only).init(their_cursor)); │ │321 - try std.testing.expectEqualStrings(&std.fmt.bytesToHex(patchrev_b_id, .lower), &theirs.event.patchrev_id); │ │320 + try std.testing.expectEqualStrings(&std.fmt.bytesToHex(patchrev_b_id, .lower), &(theirs.event.patchrev_id orelse return error.NotFound));│ │321 │ │322 // │ │323 // create a patch stacked on the selected revision │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │336 .timestamp = 12, │ │337 .author = author, │ │338 .tree_entries = &child_entries, │ │340 - .event = .{ .patchrev = .{ .base_oid = merged_patchrev.patch_oid, .source_oid = &source_b_oid, .message = "stack another answer change" } }, │ │339 + .event = .{ .patchrev = .{ .base_oid = merged_patchrev.patch_oid, .source_oid = &source_b_oid, .target_ref = "refs/heads/master", .message = "stack another answer change" } },│ │340 }, │ │341 .{ │ │342 .id = std.fmt.bytesToHex(child_id, .lower), │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────╮ │346 .title = "stack another answer change", │ │347 .description = "depends on the first patch", │ │348 .tags = "enhancement", │ │350 - .target_ref = patch.target_ref, │ │349 .target_patch_id = std.fmt.bytesToHex(patch_id, .lower), │ │350 .patchrev_id = std.fmt.bytesToHex(child_patchrev_id, .lower),│ │351 } }, │ ╰──────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │361 const stacked_moment = try evt.currentMoment(repo_opts, &target); │ │362 const child = (try evt.Patch.readById(Repo.DB, repo_opts.hash, stacked_moment, &arena, &child_id)) orelse return error.NotFound; │ │363 var selected_patchrev_id: [evt.event_id_size]u8 = undefined; │ │366 - _ = try std.fmt.hexToBytes(&selected_patchrev_id, &child.event.patchrev_id); │ │364 + _ = try std.fmt.hexToBytes(&selected_patchrev_id, &(child.event.patchrev_id orelse return error.NotFound)); │ │365 const child_patchrev = (try evt.PatchRev.readById(Repo.DB, repo_opts.hash, stacked_moment, &arena, &selected_patchrev_id)) orelse return error.NotFound;│ │366 var child_oid: [hash.hexLen(repo_opts.hash)]u8 = undefined; │ │367 @memcpy(&child_oid, child_patchrev.patch_oid); │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────╮ │401 } │ │402 } │ │403 │ │406 -test "publish a staged patch" { │ │404 +test "patch lifecycle" { │ │405 const io = std.testing.io; │ │406 const allocator = std.testing.allocator; │ │409 - const temp_dir_name = "temp-staged-patch"; │ │407 + const temp_dir_name = "temp-patch-lifecycle"; │ │408 const cwd = std.Io.Dir.cwd(); │ │409 │ │410 if (cwd.openDir(io, temp_dir_name, .{})) |dir_value| {│ ╰───────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────╮ │426 defer allocator.free(admin_path); │ │427 const upstream_path = try std.fs.path.join(allocator, &.{ root, "upstream" });│ │428 defer allocator.free(upstream_path); │ │429 + const source_path = try std.fs.path.join(allocator, &.{ root, "source" }); │ │430 + defer allocator.free(source_path); │ │431 │ │432 var prng = std.Random.DefaultPrng.init(std.testing.random_seed); │ │433 const user_id = evt.EventWithId.randomId(prng.random()); │ ╰───────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯