diff --git a/bin/ruby-build b/bin/ruby-build index 01aca3c6..f7bf691d 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -510,7 +510,7 @@ remove_windows_files() { build_package_copy() { mkdir -p "$PREFIX_PATH" - cp -R . "$PREFIX_PATH" + cp -fR . "$PREFIX_PATH" } before_install_package() { diff --git a/test/build.bats b/test/build.bats index a4f9b7ce..9c34d8e2 100644 --- a/test/build.bats +++ b/test/build.bats @@ -106,3 +106,44 @@ OUT unstub gmake unstub uname } + +@test "copy strategy forces overwrite" { + export RUBY_BUILD_CACHE_PATH="$FIXTURE_ROOT" + + mkdir -p "$INSTALL_ROOT/bin" + touch "$INSTALL_ROOT/bin/package" + chmod -w "$INSTALL_ROOT/bin/package" + + install_fixture definitions/without-checksum + assert_success + + run "$INSTALL_ROOT/bin/package" "world" + assert_success "hello world" +} + +@test "mruby strategy overwrites non-writable files" { + mkdir -p "$RUBY_BUILD_CACHE_PATH" + cd "$RUBY_BUILD_CACHE_PATH" + mkdir -p "mruby-1.0/build/host/bin" + touch "mruby-1.0/build/host/bin"/{mruby,mirb} + tar czf "mruby-1.0.tar.gz" "mruby-1.0" + + mkdir -p "$INSTALL_ROOT/bin" + touch "$INSTALL_ROOT/bin/mruby" + chmod -w "$INSTALL_ROOT/bin/mruby" + + cat > "definition" <