@@ -389,6 +389,26 @@ pub fn build(b: *std.Build) !void {
389389
390390 const test_step = b .step ("test" , "Run core unit tests (requires python)" );
391391 {
392+ // Fix the test fixture file permissions. This is necessary because Zig does
393+ // not respect the execute permission on arbitrary files it extracts from dependencies.
394+ // Since we need those files to have the execute permission set for tests to
395+ // run successfully, we need to patch them before we bake them into the
396+ // test executable. While modifying the global cache is hacky, it wont break
397+ // hashes for the same reason above.
398+ for ([_ ]std.Build.LazyPath {
399+ libgit_root .path (b , "tests/resources/filemodes/exec_on" ),
400+ libgit_root .path (b , "tests/resources/filemodes/exec_off2on_staged" ),
401+ libgit_root .path (b , "tests/resources/filemodes/exec_off2on_workdir" ),
402+ libgit_root .path (b , "tests/resources/filemodes/exec_on_untracked" ),
403+ }) | lazy | {
404+ const path = lazy .getPath2 (b , null );
405+ const file = try std .fs .cwd ().openFile (path , .{
406+ .mode = .read_write ,
407+ });
408+ defer file .close ();
409+ try file .setPermissions (.{ .inner = .{ .mode = 0o755 } });
410+ }
411+
392412 const gen_cmd = b .addSystemCommand (&.{"python" });
393413 gen_cmd .addFileArg (libgit_src .path ("tests/clar/generate.py" ));
394414 const clar_suite = gen_cmd .addPrefixedOutputDirectoryArg ("-o" , "clar_suite" );
0 commit comments