mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
std.Build.Cache.Directory: add a format() method
This commit is contained in:
parent
a2dc49a0f3
commit
e0561ad79b
@ -7,27 +7,27 @@ pub const Directory = struct {
|
|||||||
/// directly, but it is needed when passing the directory to a child process.
|
/// directly, but it is needed when passing the directory to a child process.
|
||||||
/// `null` means cwd.
|
/// `null` means cwd.
|
||||||
path: ?[]const u8,
|
path: ?[]const u8,
|
||||||
handle: std.fs.Dir,
|
handle: fs.Dir,
|
||||||
|
|
||||||
pub fn join(self: Directory, allocator: Allocator, paths: []const []const u8) ![]u8 {
|
pub fn join(self: Directory, allocator: Allocator, paths: []const []const u8) ![]u8 {
|
||||||
if (self.path) |p| {
|
if (self.path) |p| {
|
||||||
// TODO clean way to do this with only 1 allocation
|
// TODO clean way to do this with only 1 allocation
|
||||||
const part2 = try std.fs.path.join(allocator, paths);
|
const part2 = try fs.path.join(allocator, paths);
|
||||||
defer allocator.free(part2);
|
defer allocator.free(part2);
|
||||||
return std.fs.path.join(allocator, &[_][]const u8{ p, part2 });
|
return fs.path.join(allocator, &[_][]const u8{ p, part2 });
|
||||||
} else {
|
} else {
|
||||||
return std.fs.path.join(allocator, paths);
|
return fs.path.join(allocator, paths);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn joinZ(self: Directory, allocator: Allocator, paths: []const []const u8) ![:0]u8 {
|
pub fn joinZ(self: Directory, allocator: Allocator, paths: []const []const u8) ![:0]u8 {
|
||||||
if (self.path) |p| {
|
if (self.path) |p| {
|
||||||
// TODO clean way to do this with only 1 allocation
|
// TODO clean way to do this with only 1 allocation
|
||||||
const part2 = try std.fs.path.join(allocator, paths);
|
const part2 = try fs.path.join(allocator, paths);
|
||||||
defer allocator.free(part2);
|
defer allocator.free(part2);
|
||||||
return std.fs.path.joinZ(allocator, &[_][]const u8{ p, part2 });
|
return fs.path.joinZ(allocator, &[_][]const u8{ p, part2 });
|
||||||
} else {
|
} else {
|
||||||
return std.fs.path.joinZ(allocator, paths);
|
return fs.path.joinZ(allocator, paths);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +39,20 @@ pub const Directory = struct {
|
|||||||
if (self.path) |p| gpa.free(p);
|
if (self.path) |p| gpa.free(p);
|
||||||
self.* = undefined;
|
self.* = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn format(
|
||||||
|
self: Directory,
|
||||||
|
comptime fmt_string: []const u8,
|
||||||
|
options: fmt.FormatOptions,
|
||||||
|
writer: anytype,
|
||||||
|
) !void {
|
||||||
|
_ = options;
|
||||||
|
if (fmt_string.len != 0) fmt.invalidFmtError(fmt, self);
|
||||||
|
if (self.path) |p| {
|
||||||
|
try writer.writeAll(p);
|
||||||
|
try writer.writeAll(fs.path.sep_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
gpa: Allocator,
|
gpa: Allocator,
|
||||||
@ -243,10 +257,10 @@ pub const HashHelper = struct {
|
|||||||
hh.hasher.final(&bin_digest);
|
hh.hasher.final(&bin_digest);
|
||||||
|
|
||||||
var out_digest: [hex_digest_len]u8 = undefined;
|
var out_digest: [hex_digest_len]u8 = undefined;
|
||||||
_ = std.fmt.bufPrint(
|
_ = fmt.bufPrint(
|
||||||
&out_digest,
|
&out_digest,
|
||||||
"{s}",
|
"{s}",
|
||||||
.{std.fmt.fmtSliceHexLower(&bin_digest)},
|
.{fmt.fmtSliceHexLower(&bin_digest)},
|
||||||
) catch unreachable;
|
) catch unreachable;
|
||||||
return out_digest;
|
return out_digest;
|
||||||
}
|
}
|
||||||
@ -365,10 +379,10 @@ pub const Manifest = struct {
|
|||||||
var bin_digest: BinDigest = undefined;
|
var bin_digest: BinDigest = undefined;
|
||||||
self.hash.hasher.final(&bin_digest);
|
self.hash.hasher.final(&bin_digest);
|
||||||
|
|
||||||
_ = std.fmt.bufPrint(
|
_ = fmt.bufPrint(
|
||||||
&self.hex_digest,
|
&self.hex_digest,
|
||||||
"{s}",
|
"{s}",
|
||||||
.{std.fmt.fmtSliceHexLower(&bin_digest)},
|
.{fmt.fmtSliceHexLower(&bin_digest)},
|
||||||
) catch unreachable;
|
) catch unreachable;
|
||||||
|
|
||||||
self.hash.hasher = hasher_init;
|
self.hash.hasher = hasher_init;
|
||||||
@ -469,7 +483,7 @@ pub const Manifest = struct {
|
|||||||
cache_hash_file.stat.size = fmt.parseInt(u64, size, 10) catch return error.InvalidFormat;
|
cache_hash_file.stat.size = fmt.parseInt(u64, size, 10) catch return error.InvalidFormat;
|
||||||
cache_hash_file.stat.inode = fmt.parseInt(fs.File.INode, inode, 10) catch return error.InvalidFormat;
|
cache_hash_file.stat.inode = fmt.parseInt(fs.File.INode, inode, 10) catch return error.InvalidFormat;
|
||||||
cache_hash_file.stat.mtime = fmt.parseInt(i64, mtime_nsec_str, 10) catch return error.InvalidFormat;
|
cache_hash_file.stat.mtime = fmt.parseInt(i64, mtime_nsec_str, 10) catch return error.InvalidFormat;
|
||||||
_ = std.fmt.hexToBytes(&cache_hash_file.bin_digest, digest_str) catch return error.InvalidFormat;
|
_ = fmt.hexToBytes(&cache_hash_file.bin_digest, digest_str) catch return error.InvalidFormat;
|
||||||
const prefix = fmt.parseInt(u8, prefix_str, 10) catch return error.InvalidFormat;
|
const prefix = fmt.parseInt(u8, prefix_str, 10) catch return error.InvalidFormat;
|
||||||
if (prefix >= self.cache.prefixes_len) return error.InvalidFormat;
|
if (prefix >= self.cache.prefixes_len) return error.InvalidFormat;
|
||||||
|
|
||||||
@ -806,10 +820,10 @@ pub const Manifest = struct {
|
|||||||
self.hash.hasher.final(&bin_digest);
|
self.hash.hasher.final(&bin_digest);
|
||||||
|
|
||||||
var out_digest: [hex_digest_len]u8 = undefined;
|
var out_digest: [hex_digest_len]u8 = undefined;
|
||||||
_ = std.fmt.bufPrint(
|
_ = fmt.bufPrint(
|
||||||
&out_digest,
|
&out_digest,
|
||||||
"{s}",
|
"{s}",
|
||||||
.{std.fmt.fmtSliceHexLower(&bin_digest)},
|
.{fmt.fmtSliceHexLower(&bin_digest)},
|
||||||
) catch unreachable;
|
) catch unreachable;
|
||||||
|
|
||||||
return out_digest;
|
return out_digest;
|
||||||
@ -831,10 +845,10 @@ pub const Manifest = struct {
|
|||||||
var encoded_digest: [hex_digest_len]u8 = undefined;
|
var encoded_digest: [hex_digest_len]u8 = undefined;
|
||||||
|
|
||||||
for (self.files.items) |file| {
|
for (self.files.items) |file| {
|
||||||
_ = std.fmt.bufPrint(
|
_ = fmt.bufPrint(
|
||||||
&encoded_digest,
|
&encoded_digest,
|
||||||
"{s}",
|
"{s}",
|
||||||
.{std.fmt.fmtSliceHexLower(&file.bin_digest)},
|
.{fmt.fmtSliceHexLower(&file.bin_digest)},
|
||||||
) catch unreachable;
|
) catch unreachable;
|
||||||
try writer.print("{d} {d} {d} {s} {d} {s}\n", .{
|
try writer.print("{d} {d} {d} {s} {d} {s}\n", .{
|
||||||
file.stat.size,
|
file.stat.size,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user