diff options
Diffstat (limited to 'src/tree.zig')
| -rw-r--r-- | src/tree.zig | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/tree.zig b/src/tree.zig index 8599c7c..75efa9c 100644 --- a/src/tree.zig +++ b/src/tree.zig @@ -15,17 +15,16 @@ pub const Tree = struct { pub const Iterator = struct { root: fs.Path, - dir: ?std.fs.Dir = null, - iter: ?std.fs.Dir.Iterator = null, + iter: ?fs.Iterator = null, pub fn deinit(self: *Iterator) void { - if (self.dir) |*dir| dir.close(); + if (self.iter) |*it| it.deinit(); } pub fn next(self: *Iterator) !?Tree { if (self.iter) |*iter| { while (try iter.next()) |entry| { - if (entry.kind == .directory) { + if (entry.type == .dir) { return .{ .name = entry.name, .root = .join(.{ self.root.name(), entry.name }), @@ -37,31 +36,33 @@ pub const Iterator = struct { } }; -pub inline fn iterate(env: Env) !Iterator { +pub inline fn iterate(env: *const Env) !Iterator { const root = tree_root_dir(env); - const dir = std.fs.openDirAbsoluteZ(root.name(), .{ .iterate = true }) catch |err| { + const iter = fs.iterate(&root) catch |err| { if (err == error.FileNotFound) return .{ .root = undefined }; return err; }; + return .{ .root = root, - .dir = dir, - .iter = dir.iterate(), + .iter = iter, }; } -pub fn get(env: Env, tree_name: []const u8) !?Tree { +pub fn get(env: *const Env, tree_name: []const u8) !?Tree { var tree_root = tree_root_dir(env); tree_root.append(.{tree_name}); return .{ .name = tree_name, .root = tree_root }; } -pub fn remove(env: Env, tree: Tree) !void { - try fs.rm(tree.root); - fs.rm(env.ports_tree_path(tree.name, .{})) catch {}; - fs.rm(env.ports_src_path(tree.name, .{})) catch {}; +pub fn remove(env: *const Env, tree: Tree) !void { + const tree_path = env.ports_tree_path(tree.name, .{}); + const src_path = env.ports_src_path(tree.name, .{}); + try fs.rm(&tree.root); + fs.rm(&tree_path) catch {}; + fs.rm(&src_path) catch {}; } -fn tree_root_dir(env: Env) fs.Path { +fn tree_root_dir(env: *const Env) fs.Path { return env.etc_path(.{"ports"}); } |