authorgravatar for hkupty@gmail.comHenry Kupty <hkupty@gmail.com> 2025-09-25 22:22:08+02:00
committergravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2025-10-03 16:29:08-07:00
logec4514def41db988f89c2da180f7a8f87168f5d1
treebc6c06acdc77593175fde4e94a502b5a25e4496b
parentdf394faf776aa7012649dc1724ccb66d78a1439e

refactor: Reimplement tool using SelectiveWalker

This skips directory trees where top-level directories do not match the defined ones

1 files changed, 20 insertions(+), 8 deletions(-)

tools/update_mingw.zig+20-8
...@@ -109,13 +109,31 @@ pub fn main() !void {...@@ -109,13 +109,31 @@ pub fn main() !void {
109109
110 {110 {
111 // Also add all new def and def.in files.111 // Also add all new def and def.in files.
112 var walker = try src_crt_dir.walk(arena);112 var walker = try src_crt_dir.walkSelectively(arena);
113 defer walker.deinit();113 defer walker.deinit();
114114
115 var fail = false;115 var fail = false;
116116
117 while (try walker.next()) |entry| {117 while (try walker.next()) |entry| {
118 if (entry.kind != .file) continue;118 switch (entry.kind) {
119 .directory => {
120 switch (walker.depth()) {
121 1 => for (def_dirs) |p| {
122 if (std.mem.eql(u8, entry.basename, p)) {
123 try walker.enter(entry);
124 continue;
125 }
126 },
127 else => {
128 // The top-level directory was already validated
129 try walker.enter(entry);
130 continue;
131 },
132 }
133 },
134 .file => {},
135 else => continue,
136 }
119137
120 const ok_ext = for (def_exts) |ext| {138 const ok_ext = for (def_exts) |ext| {
121 if (std.mem.endsWith(u8, entry.path, ext)) break true;139 if (std.mem.endsWith(u8, entry.path, ext)) break true;
...@@ -123,12 +141,6 @@ pub fn main() !void {...@@ -123,12 +141,6 @@ pub fn main() !void {
123141
124 if (!ok_ext) continue;142 if (!ok_ext) continue;
125143
126 const ok_prefix = for (def_dirs) |p| {
127 if (std.mem.startsWith(u8, entry.path, p)) break true;
128 } else false;
129
130 if (!ok_prefix) continue;
131
132 const blacklisted = for (blacklisted_defs) |item| {144 const blacklisted = for (blacklisted_defs) |item| {
133 if (std.mem.eql(u8, entry.basename, item)) break true;145 if (std.mem.eql(u8, entry.basename, item)) break true;
134 } else false;146 } else false;