зеркало из https://github.com/github/ruby.git
Retry to merge fileutils-1.1.0.
* Revert "Revert "Merge fileutils-1.1.0.""
This reverts commit 84bb8e81c2
.
* Added workaround for make mjit-headers
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
a95369b33d
Коммит
60fbe01353
|
@ -1,14 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Gem::Specification.new do |s|
|
||||
s.name = "fileutils"
|
||||
s.version = '1.0.2'
|
||||
s.date = '2017-12-22'
|
||||
s.version = '1.1.0'
|
||||
s.summary = "Several file utility methods for copying, moving, removing, etc."
|
||||
s.description = "Several file utility methods for copying, moving, removing, etc."
|
||||
|
||||
s.require_path = %w{lib}
|
||||
s.files = [".gitignore", ".travis.yml", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin/console", "bin/setup", "fileutils.gemspec", "lib/fileutils.rb"]
|
||||
s.required_ruby_version = ">= 2.4.0"
|
||||
s.required_ruby_version = ">= 2.3.0"
|
||||
|
||||
s.authors = ["Minero Aoki"]
|
||||
s.email = [nil]
|
||||
|
|
|
@ -85,9 +85,15 @@
|
|||
# <tt>:verbose</tt> flags to methods in FileUtils.
|
||||
#
|
||||
|
||||
begin
|
||||
require 'rbconfig'
|
||||
rescue LoadError
|
||||
# for make mjit-headers
|
||||
end
|
||||
|
||||
module FileUtils
|
||||
|
||||
VERSION = "1.0.2"
|
||||
VERSION = "1.1.0"
|
||||
|
||||
def self.private_module_function(name) #:nodoc:
|
||||
module_function name
|
||||
|
@ -119,8 +125,9 @@ module FileUtils
|
|||
#
|
||||
def cd(dir, verbose: nil, &block) # :yield: dir
|
||||
fu_output_message "cd #{dir}" if verbose
|
||||
Dir.chdir(dir, &block)
|
||||
result = Dir.chdir(dir, &block)
|
||||
fu_output_message 'cd -' if verbose and block
|
||||
result
|
||||
end
|
||||
module_function :cd
|
||||
|
||||
|
@ -541,7 +548,7 @@ module FileUtils
|
|||
module_function :move
|
||||
|
||||
def rename_cannot_overwrite_file? #:nodoc:
|
||||
/emx/ =~ RUBY_PLATFORM
|
||||
/emx/ =~ RbConfig::CONFIG['host_os']
|
||||
end
|
||||
private_module_function :rename_cannot_overwrite_file?
|
||||
|
||||
|
@ -681,22 +688,38 @@ module FileUtils
|
|||
unless parent_st.sticky?
|
||||
raise ArgumentError, "parent directory is world writable, FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"
|
||||
end
|
||||
|
||||
# freeze tree root
|
||||
euid = Process.euid
|
||||
File.open(fullpath + '/.') {|f|
|
||||
unless fu_stat_identical_entry?(st, f.stat)
|
||||
# symlink (TOC-to-TOU attack?)
|
||||
File.unlink fullpath
|
||||
return
|
||||
end
|
||||
f.chown euid, -1
|
||||
f.chmod 0700
|
||||
unless fu_stat_identical_entry?(st, File.lstat(fullpath))
|
||||
# TOC-to-TOU attack?
|
||||
File.unlink fullpath
|
||||
return
|
||||
end
|
||||
}
|
||||
dot_file = fullpath + "/."
|
||||
begin
|
||||
File.open(dot_file) {|f|
|
||||
unless fu_stat_identical_entry?(st, f.stat)
|
||||
# symlink (TOC-to-TOU attack?)
|
||||
File.unlink fullpath
|
||||
return
|
||||
end
|
||||
f.chown euid, -1
|
||||
f.chmod 0700
|
||||
}
|
||||
rescue EISDIR # JRuby in non-native mode can't open files as dirs
|
||||
File.lstat(dot_file).tap {|fstat|
|
||||
unless fu_stat_identical_entry?(st, fstat)
|
||||
# symlink (TOC-to-TOU attack?)
|
||||
File.unlink fullpath
|
||||
return
|
||||
end
|
||||
File.chown euid, -1, dot_file
|
||||
File.chmod 0700, dot_file
|
||||
}
|
||||
end
|
||||
|
||||
unless fu_stat_identical_entry?(st, File.lstat(fullpath))
|
||||
# TOC-to-TOU attack?
|
||||
File.unlink fullpath
|
||||
return
|
||||
end
|
||||
|
||||
# ---- tree root is frozen ----
|
||||
root = Entry_.new(path)
|
||||
root.preorder_traverse do |ent|
|
||||
|
@ -797,8 +820,15 @@ module FileUtils
|
|||
#
|
||||
def compare_stream(a, b)
|
||||
bsize = fu_stream_blksize(a, b)
|
||||
sa = String.new(capacity: bsize)
|
||||
sb = String.new(capacity: bsize)
|
||||
|
||||
if RUBY_VERSION > "2.4"
|
||||
sa = String.new(capacity: bsize)
|
||||
sb = String.new(capacity: bsize)
|
||||
else
|
||||
sa = String.new
|
||||
sb = String.new
|
||||
end
|
||||
|
||||
begin
|
||||
a.read(bsize, sa)
|
||||
b.read(bsize, sb)
|
||||
|
@ -1123,7 +1153,7 @@ module FileUtils
|
|||
private
|
||||
|
||||
def fu_windows?
|
||||
/mswin|mingw|bccwin|emx/ =~ RUBY_PLATFORM
|
||||
/mswin|mingw|bccwin|emx/ =~ RbConfig::CONFIG['host_os']
|
||||
end
|
||||
|
||||
def fu_copy_stream0(src, dest, blksize = nil) #:nodoc:
|
||||
|
|
|
@ -233,7 +233,7 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
|
||||
def test_assert_output_lines
|
||||
assert_raise(MiniTest::Assertion) {
|
||||
Timeout.timeout(0.1) {
|
||||
Timeout.timeout(0.5) {
|
||||
assert_output_lines([]) {
|
||||
Thread.current.report_on_exception = false
|
||||
raise "ok"
|
||||
|
@ -834,13 +834,15 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
check_singleton :ln_s
|
||||
|
||||
TARGETS.each do |fname|
|
||||
fname = "../#{fname}"
|
||||
lnfname = 'tmp/lnsdest'
|
||||
ln_s fname, lnfname
|
||||
assert FileTest.symlink?(lnfname), 'not symlink'
|
||||
assert_equal fname, File.readlink(lnfname)
|
||||
ensure
|
||||
rm_f lnfname
|
||||
begin
|
||||
fname = "../#{fname}"
|
||||
lnfname = 'tmp/lnsdest'
|
||||
ln_s fname, lnfname
|
||||
assert FileTest.symlink?(lnfname), 'not symlink'
|
||||
assert_equal fname, File.readlink(lnfname)
|
||||
ensure
|
||||
rm_f lnfname
|
||||
end
|
||||
end
|
||||
end if have_symlink? and !no_broken_symlink?
|
||||
|
||||
|
@ -1613,6 +1615,10 @@ class TestFileUtils < Test::Unit::TestCase
|
|||
check_singleton :cd
|
||||
end
|
||||
|
||||
def test_cd_result
|
||||
assert_equal 42, cd('.') { 42 }
|
||||
end
|
||||
|
||||
def test_chdir
|
||||
check_singleton :chdir
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче