| ... | ... | @@ -241,6 +241,7 @@ pub fn main(init: std.process.Init) !void { |
| 241 | 241 | multi_reader.init(gpa, io, multi_reader_buffer.toStreams(), &.{ child.stdout.?, child.stderr.? }); |
| 242 | 242 | defer multi_reader.deinit(); |
| 243 | 243 | |
| 244 | var update_mtime = Io.Clock.real.now(io); |
| 244 | 245 | for (case.updates) |update| { |
| 245 | 246 | var update_prog_node = updates_prog_node.start(update.name, 0); |
| 246 | 247 | defer update_prog_node.end(); |
| ... | ... | @@ -253,7 +254,8 @@ pub fn main(init: std.process.Init) !void { |
| 253 | 254 | log_cur_update = &update; |
| 254 | 255 | defer log_cur_update = null; |
| 255 | 256 | |
| 256 | | eval.write(update); |
| 257 | eval.write(update, update_mtime); |
| 258 | update_mtime = update_mtime.addDuration(.fromSeconds(5)); |
| 257 | 259 | try eval.requestUpdate(); |
| 258 | 260 | try eval.check(&multi_reader, update, update_prog_node); |
| 259 | 261 | } |
| ... | ... | @@ -286,14 +288,18 @@ const Eval = struct { |
| 286 | 288 | enable_darling: bool, |
| 287 | 289 | |
| 288 | 290 | /// Currently this function assumes the previous updates have already been written. |
| 289 | | fn write(eval: *Eval, update: Case.Update) void { |
| 291 | fn write(eval: *Eval, update: Case.Update, mtime: Io.Timestamp) void { |
| 290 | 292 | const io = eval.io; |
| 291 | 293 | for (update.changes) |full_contents| { |
| 292 | | eval.tmp_dir.writeFile(io, .{ |
| 293 | | .sub_path = full_contents.name, |
| 294 | | .data = full_contents.bytes, |
| 295 | | }) catch |err| { |
| 296 | | eval.fatal("failed to update '{s}': {t}", .{ full_contents.name, err }); |
| 294 | var update_file = eval.tmp_dir.createFile(io, full_contents.name, .{}) catch |err| { |
| 295 | eval.fatal("failed to create update '{s}': {t}", .{ full_contents.name, err }); |
| 296 | }; |
| 297 | defer update_file.close(io); |
| 298 | update_file.writeStreamingAll(io, full_contents.bytes) catch |err| { |
| 299 | eval.fatal("failed to write update '{s}': {t}", .{ full_contents.name, err }); |
| 300 | }; |
| 301 | update_file.setTimestamps(io, .{ .modify_timestamp = .{ .new = mtime } }) catch |err| { |
| 302 | eval.fatal("failed to set mtime for '{s}': {t}", .{ full_contents.name, err }); |
| 297 | 303 | }; |
| 298 | 304 | } |
| 299 | 305 | for (update.deletes) |doomed_name| { |