feature. See also
. The project being documented here (as the example) is the Zig library itself.
Maker.truncatePath
pub fn truncatePath(
maker: *Maker,
arena: Allocator,
dest_path: Path,
asking_step_index: Configuration.Step.Index,
) Step.ExtendedMakeError!void
File
Code
pub fn truncatePath(
maker: *Maker,
arena: Allocator,
dest_path: Path,
asking_step_index: Configuration.Step.Index,
) Step.ExtendedMakeError!void {
const graph = maker.graph;
const io = graph.io;
if (graph.verbose) try graph.handleVerbose(null, null, &.{
"truncate", try dest_path.toString(arena),
});
const err = e: {
var file = f: {
break :f dest_path.root_dir.handle.createFile(io, dest_path.sub_path, .{}) catch |err| switch (err) {
error.FileNotFound => {
const parent_path = dest_path.dirname() orelse break :e err;
parent_path.root_dir.handle.createDirPath(io, parent_path.sub_path) catch |in| switch (in) {
error.Canceled => |e| return e,
else => |e| {
const s = stepByIndex(maker, asking_step_index);
return s.fail(maker, "failed creating directory {f}: {t}", .{ parent_path, e });
},
};
break :f dest_path.root_dir.handle.createFile(io, dest_path.sub_path, .{}) catch |in| break :e in;
},
error.Canceled => |e| return e,
else => |e| break :e e,
};
};
file.close(io);
return;
};
const s = stepByIndex(maker, asking_step_index);
return s.fail(maker, "failed truncating file {f}: {t}", .{ dest_path, err });
}