diff --git a/build_tests/build_dir/install_read_only.rb b/build_tests/build_dir/install_read_only.rb new file mode 100644 index 0000000..cdc04bc --- /dev/null +++ b/build_tests/build_dir/install_read_only.rb @@ -0,0 +1,3 @@ +Rscons::Environment.new do |env| + env.Install("dest", "install.rb") +end diff --git a/lib/rscons/builders/install.rb b/lib/rscons/builders/install.rb index 7756093..f2fb04e 100644 --- a/lib/rscons/builders/install.rb +++ b/lib/rscons/builders/install.rb @@ -47,6 +47,7 @@ module Rscons printed_message = true end cache.mkdir_p(File.dirname(dest)) + FileUtils.rm_f(dest) FileUtils.cp(src, dest, :preserve => true) end cache.register_build(dest, :Copy, [src], env) diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 3c88f90..d9a7282 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -1002,6 +1002,22 @@ EOF expect(lines(result.stdout)).to eq ["Install inst.exe"] end + it "overwrites a read-only file" do + test_dir("build_dir") + + FileUtils.chmod("a=r", "install.rb") + result = run_test(rsconsfile: "install_read_only.rb") + expect(result.stderr).to eq "" + expect(lines(result.stdout)).to eq ["Install dest"] + + FileUtils.rm_f("install.rb") + File.binwrite("install.rb", "hi") + FileUtils.chmod("a=r", "install.rb") + result = run_test(rsconsfile: "install_read_only.rb") + expect(result.stderr).to eq "" + expect(lines(result.stdout)).to eq ["Install dest"] + end + it "operates the same as a Copy builder" do test_dir("build_dir")