╭ changed ──╮ │src/try.zig│ ╰───────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │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, │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────╮ │1187 repo_user_id: *const [evt.event_id_size]u8,│ │1188 user_id: *const [evt.event_id_size]u8, │ │1189 random: std.Random, │ │1190 + now: u64, │ │1191 ) !void { │ │1192 const patch_data = [_]struct { │ │1193 title: []const u8, │ ╰─────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1247 const patch_author = evt.CommitAuthor{ .name = "admin", .email = "admin@example.test" }; │ │1248 var patch_ids: [patch_data.len][evt.event_id_size]u8 = undefined; │ │1249 for (patch_data, 0..) |patch, i| { │ │1242 - const timestamp: u64 = @intCast(500 + i * 10); │ │1250 + const timestamp = seedTimestamp(now, i, patch_data.len, 25 * std.time.s_per_day, 3 * std.time.s_per_hour);│ │1251 patch_ids[i] = evt.EventWithId.randomId(random); │ │1252 const patch_hex = std.fmt.bytesToHex(patch_ids[i], .lower); │ │1253 const path = try fork.create(.{}, io, allocator, users_dir, .{ │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯