╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ──╮ │src/try.zig│ ╰───────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │685 } }, │ │686 }, .{ │ │687 .id = issue_events[issue_data.len - 3].id, │ │687 - .timestamp = 101, │ │688 + .timestamp = now - 115 * std.time.s_per_min, │ │689 .author = .{ .name = user_data[1].name, .email = user_data[1].email },│ │690 .event = .{ .issue = .{ │ │691 .title = sync_issue.title, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │695 } }, │ │696 }, .{ │ │697 .id = issue_events[issue_data.len - 2].id, │ │697 - .timestamp = 102, │ │698 + .timestamp = now - 110 * std.time.s_per_min, │ │699 .author = .{ .name = user_data[1].name, .email = user_data[1].email },│ │700 .event = .{ .issue = .{ │ │701 .title = desc_issue.title, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │706 } }; │ │707 const theirs = [_]evt.EventWithId{ .{ │ │708 .id = issue_events[issue_data.len - 4].id, │ │708 - .timestamp = 103, │ │709 + .timestamp = now - 105 * std.time.s_per_min, │ │710 .author = .{ .name = user_data[2].name, .email = user_data[2].email },│ │711 .event = .{ .issue = .{ │ │712 .title = "Segfault on early window resize", │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │715 } }, │ │716 }, .{ │ │717 .id = issue_events[issue_data.len - 3].id, │ │717 - .timestamp = 104, │ │718 + .timestamp = now - 100 * std.time.s_per_min, │ │719 .author = .{ .name = user_data[2].name, .email = user_data[2].email },│ │720 .event = .{ .issue = .{ │ │721 .title = sync_issue.title, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │725 } }, │ │726 }, .{ │ │727 .id = issue_events[issue_data.len - 2].id, │ │727 - .timestamp = 105, │ │728 + .timestamp = now - 95 * std.time.s_per_min, │ │729 .author = .{ .name = user_data[2].name, .email = user_data[2].email },│ │730 .event = .{ .issue = .{ │ │731 .title = desc_issue.title, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │774 for (&comment_events, 0..) |*event, i| { │ │775 event.* = .{ │ │776 .id = std.fmt.bytesToHex(comment_ids[i], .lower), │ │776 - .timestamp = @intCast(200 + i), │ │777 + .timestamp = seedTimestamp(now, i, comment_events.len, 2 * std.time.s_per_hour, 45), │ │778 .author = .{ .name = user_data[(i + 1) % user_data.len].name, .email = user_data[(i + 1) % user_data.len].email },│ │779 .event = .{ .comment = .{ │ │780 .thread_id = issue_events[issue_events.len - 1].id, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │826 for (discussion_data, 0..) |discussion, i| { │ │827 discussion_events[i] = .{ │ │828 .id = std.fmt.bytesToHex(evt.EventWithId.randomId(prng.random()), .lower), │ │828 - .timestamp = @intCast(300 + i), │ │829 + .timestamp = seedTimestamp(now, i, discussion_data.len, 21 * std.time.s_per_day, 2 * std.time.s_per_hour),│ │830 .author = .{ .name = user_data[i % user_data.len].name, .email = user_data[i % user_data.len].email }, │ │831 .event = .{ .discuss = .{ │ │832 .title = discussion.title, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │847 const comment_index = i % 3; │ │848 event.* = .{ │ │849 .id = std.fmt.bytesToHex(discussion_comment_ids[discussion_index][comment_index], .lower), │ │849 - .timestamp = @intCast(400 + i), │ │850 + .timestamp = seedTimestamp(now, i, discussion_comment_events.len, 90 * std.time.s_per_min, 30), │ │851 .author = .{ .name = user_data[(i + 1) % user_data.len].name, .email = user_data[(i + 1) % user_data.len].email },│ │852 .event = .{ .comment = .{ │ │853 .thread_id = discussion_events[discussion_index].id, │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │899 if (repo_index + 1 == repo_data.len) { │ │900 var target_repo = try rp.Repo(.xit, .{}).open(io, allocator, .{ .path = repo_path, .require_repo_root = true }); │ │901 defer target_repo.deinit(io, allocator); │ │901 - try seedPatches(io, allocator, server_path, &repo, &target_repo, &repo_event_ids[repo_index], &user_ids[repo_data[repo_index].user_index], &admin_user_id, prng.random()); │ │902 + try seedPatches(io, allocator, server_path, &repo, &target_repo, &repo_event_ids[repo_index], &user_ids[repo_data[repo_index].user_index], &admin_user_id, prng.random(), now);│ │903 } │ │904 } │ │905 } │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1078 }; │ │1079 } │ │1080 │ │1081 +// distribute a seed batch from oldest to newest relative to this run. │ │1082 +fn seedTimestamp(now: u64, index: usize, count: usize, oldest_age: u64, newest_age: u64) u64 { │ │1083 + const age = if (count > 1) oldest_age - (oldest_age - newest_age) * index / (count - 1) else newest_age;│ │1084 + return now - age; │ │1085 +} │ │1086 + │ │1087 fn seedPatchRevision( │ │1088 io: std.Io, │ │1089 allocator: std.mem.Allocator, │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯