зеркало из https://github.com/github/ruby.git
Overwrite destination symlink file if `remove_destination` is set.
[Bug #13914][ruby-core:82846] Patch by @mzp https://github.com/ruby/fileutils/pull/9 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60218 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
418771316c
Коммит
0242f7ccae
|
@ -412,7 +412,7 @@ module FileUtils
|
|||
def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
||||
Entry_.new(src, nil, dereference_root).wrap_traverse(proc do |ent|
|
||||
destent = Entry_.new(dest, ent.rel, false)
|
||||
File.unlink destent.path if remove_destination && File.file?(destent.path)
|
||||
File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
|
||||
ent.copy destent.path
|
||||
end, proc do |ent|
|
||||
destent = Entry_.new(dest, ent.rel, false)
|
||||
|
|
|
@ -12,7 +12,7 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
include Test::Unit::FileAssertions
|
||||
|
||||
def assert_output_lines(expected, fu = self, message=nil)
|
||||
old = fu.instance_variable_get(:@fileutils_output)
|
||||
old = fu.instance_variables.include?(:@fileutils_output) && fu.instance_variable_get(:@fileutils_output)
|
||||
IO.pipe {|read, write|
|
||||
fu.instance_variable_set(:@fileutils_output, write)
|
||||
th = Thread.new { read.read }
|
||||
|
@ -438,6 +438,15 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
}
|
||||
end
|
||||
|
||||
def test_cp_r_symlink_remove_destination
|
||||
Dir.mkdir 'tmp/src'
|
||||
Dir.mkdir 'tmp/dest'
|
||||
Dir.mkdir 'tmp/src/dir'
|
||||
File.symlink 'tmp/src/dir', 'tmp/src/a'
|
||||
cp_r 'tmp/src', 'tmp/dest/', remove_destination: true
|
||||
cp_r 'tmp/src', 'tmp/dest/', remove_destination: true
|
||||
end
|
||||
|
||||
def test_mv
|
||||
check_singleton :mv
|
||||
|
||||
|
@ -1401,7 +1410,7 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
|
||||
def test_chown_R_without_permission
|
||||
touch 'tmp/a'
|
||||
exception = assert_raise(Errno::EPERM) {
|
||||
assert_raise(Errno::EPERM) {
|
||||
chown_R UID_1, nil, 'tmp/a'
|
||||
chown_R UID_2, nil, 'tmp/a'
|
||||
}
|
||||
|
@ -1438,6 +1447,14 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
assert_equal 'somewhere', File.readlink('tmp/dirdest/sym')
|
||||
end if have_symlink?
|
||||
|
||||
def test_copy_entry_symlink_remove_destination
|
||||
Dir.mkdir 'tmp/dir'
|
||||
File.symlink 'tmp/dir', 'tmp/dest'
|
||||
touch 'tmp/src'
|
||||
copy_entry 'tmp/src', 'tmp/dest', false, false, true
|
||||
assert_file_exist 'tmp/dest'
|
||||
end
|
||||
|
||||
def test_copy_file
|
||||
check_singleton :copy_file
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче