From b8cd095ebd012788b83ac2d8e1592ce531fecde9 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 23 Nov 2023 23:11:51 -0800 Subject: [PATCH] mark versioned dep folders as readonly, closes #53 --- src/common.zig | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/common.zig b/src/common.zig index bef3681eca94013c0d3f262de5b0c13453f89f9e..c1765c0676d6c6749cbca8291588c382a92c31f0 100644 --- a/src/common.zig +++ b/src/common.zig @@ -153,6 +153,9 @@ pub fn get_modpath(cachepath: string, d: zigmod.Dep, options: *CollectOptions) ! defer pvd.close(); try pvd.deleteTree(".git"); } + var pvd = try std.fs.cwd().openIterableDir(pv, .{}); + defer pvd.close(); + try setTreeReadOnly(pvd, options.alloc); return pv; } if (!try u.does_folder_exist(p)) { @@ -187,6 +190,9 @@ pub fn get_modpath(cachepath: string, d: zigmod.Dep, options: *CollectOptions) ! try d.type.pull(options.alloc, d.path, pv); if (try u.validate_hash(options.alloc, d.version, file_path)) { try std.fs.cwd().deleteFile(file_path); + var pvd = try std.fs.cwd().openIterableDir(pv, .{}); + defer pvd.close(); + try setTreeReadOnly(pvd, options.alloc); return pv; } try std.fs.cwd().deleteTree(pv); @@ -370,3 +376,18 @@ pub fn parse_lockfile(alloc: std.mem.Allocator, dir: std.fs.Dir) ![]const [4]str } return list.toOwnedSlice(); } + +fn setTreeReadOnly(idir: std.fs.IterableDir, alloc: std.mem.Allocator) !void { + var walker = try idir.walk(alloc); + defer walker.deinit(); + + while (try walker.next()) |entry| { + if (entry.kind != .file) continue; + var file = try idir.dir.openFile(entry.path, .{}); + defer file.close(); + var metadata = try file.metadata(); + var perms = metadata.permissions(); + perms.setReadOnly(true); + try file.setPermissions(perms); + } +} -- 2.54.0