mirror of
https://github.com/ruby/ruby.git
synced 2026-01-28 04:54:23 +00:00
[ruby/rubygems] Update fileutils-1.8.0
https://github.com/ruby/rubygems/commit/f8fe7a5208
This commit is contained in:
parent
6ccc41998f
commit
8cfed30403
109
lib/bundler/vendor/fileutils/lib/fileutils.rb
vendored
109
lib/bundler/vendor/fileutils/lib/fileutils.rb
vendored
@ -181,7 +181,7 @@ end
|
||||
#
|
||||
module Bundler::FileUtils
|
||||
# The version number.
|
||||
VERSION = "1.7.3"
|
||||
VERSION = "1.8.0"
|
||||
|
||||
def self.private_module_function(name) #:nodoc:
|
||||
module_function name
|
||||
@ -706,11 +706,12 @@ module Bundler::FileUtils
|
||||
#
|
||||
def ln_s(src, dest, force: nil, relative: false, target_directory: true, noop: nil, verbose: nil)
|
||||
if relative
|
||||
return ln_sr(src, dest, force: force, noop: noop, verbose: verbose)
|
||||
return ln_sr(src, dest, force: force, target_directory: target_directory, noop: noop, verbose: verbose)
|
||||
end
|
||||
fu_output_message "ln -s#{force ? 'f' : ''} #{[src,dest].flatten.join ' '}" if verbose
|
||||
fu_output_message "ln -s#{force ? 'f' : ''}#{
|
||||
target_directory ? '' : 'T'} #{[src,dest].flatten.join ' '}" if verbose
|
||||
return if noop
|
||||
fu_each_src_dest0(src, dest) do |s,d|
|
||||
fu_each_src_dest0(src, dest, target_directory) do |s,d|
|
||||
remove_file d, true if force
|
||||
File.symlink s, d
|
||||
end
|
||||
@ -730,42 +731,37 @@ module Bundler::FileUtils
|
||||
# Like Bundler::FileUtils.ln_s, but create links relative to +dest+.
|
||||
#
|
||||
def ln_sr(src, dest, target_directory: true, force: nil, noop: nil, verbose: nil)
|
||||
options = "#{force ? 'f' : ''}#{target_directory ? '' : 'T'}"
|
||||
dest = File.path(dest)
|
||||
srcs = Array(src)
|
||||
link = proc do |s, target_dir_p = true|
|
||||
s = File.path(s)
|
||||
if target_dir_p
|
||||
d = File.join(destdirs = dest, File.basename(s))
|
||||
cmd = "ln -s#{force ? 'f' : ''}#{target_directory ? '' : 'T'}" if verbose
|
||||
fu_each_src_dest0(src, dest, target_directory) do |s,d|
|
||||
if target_directory
|
||||
parent = File.dirname(d)
|
||||
destdirs = fu_split_path(parent)
|
||||
real_ddirs = fu_split_path(File.realpath(parent))
|
||||
else
|
||||
destdirs = File.dirname(d = dest)
|
||||
destdirs ||= fu_split_path(dest)
|
||||
real_ddirs ||= fu_split_path(File.realdirpath(dest))
|
||||
end
|
||||
destdirs = fu_split_path(File.realpath(destdirs))
|
||||
if fu_starting_path?(s)
|
||||
srcdirs = fu_split_path((File.realdirpath(s) rescue File.expand_path(s)))
|
||||
base = fu_relative_components_from(srcdirs, destdirs)
|
||||
s = File.join(*base)
|
||||
srcdirs = fu_split_path(s)
|
||||
i = fu_common_components(srcdirs, destdirs)
|
||||
n = destdirs.size - i
|
||||
n -= 1 unless target_directory
|
||||
link1 = fu_clean_components(*Array.new([n, 0].max, '..'), *srcdirs[i..-1])
|
||||
begin
|
||||
real_sdirs = fu_split_path(File.realdirpath(s)) rescue nil
|
||||
rescue
|
||||
else
|
||||
srcdirs = fu_clean_components(*fu_split_path(s))
|
||||
base = fu_relative_components_from(fu_split_path(Dir.pwd), destdirs)
|
||||
while srcdirs.first&. == ".." and base.last&.!=("..") and !fu_starting_path?(base.last)
|
||||
srcdirs.shift
|
||||
base.pop
|
||||
end
|
||||
s = File.join(*base, *srcdirs)
|
||||
i = fu_common_components(real_sdirs, real_ddirs)
|
||||
n = real_ddirs.size - i
|
||||
n -= 1 unless target_directory
|
||||
link2 = fu_clean_components(*Array.new([n, 0].max, '..'), *real_sdirs[i..-1])
|
||||
link1 = link2 if link1.size > link2.size
|
||||
end
|
||||
fu_output_message "ln -s#{options} #{s} #{d}" if verbose
|
||||
s = File.join(link1)
|
||||
fu_output_message [cmd, s, d].flatten.join(' ') if verbose
|
||||
next if noop
|
||||
remove_file d, true if force
|
||||
File.symlink s, d
|
||||
end
|
||||
case srcs.size
|
||||
when 0
|
||||
when 1
|
||||
link[srcs[0], target_directory && File.directory?(dest)]
|
||||
else
|
||||
srcs.each(&link)
|
||||
end
|
||||
end
|
||||
module_function :ln_sr
|
||||
|
||||
@ -800,13 +796,13 @@ module Bundler::FileUtils
|
||||
# File.file?('dest1/dir1/t2.txt') # => true
|
||||
# File.file?('dest1/dir1/t3.txt') # => true
|
||||
#
|
||||
# Keyword arguments:
|
||||
# Optional arguments:
|
||||
#
|
||||
# - <tt>dereference_root: true</tt> - dereferences +src+ if it is a symbolic link.
|
||||
# - <tt>remove_destination: true</tt> - removes +dest+ before creating links.
|
||||
# - +dereference_root+ - dereferences +src+ if it is a symbolic link (+false+ by default).
|
||||
# - +remove_destination+ - removes +dest+ before creating links (+false+ by default).
|
||||
#
|
||||
# Raises an exception if +dest+ is the path to an existing file or directory
|
||||
# and keyword argument <tt>remove_destination: true</tt> is not given.
|
||||
# and optional argument +remove_destination+ is not given.
|
||||
#
|
||||
# Related: Bundler::FileUtils.ln (has different options).
|
||||
#
|
||||
@ -1029,12 +1025,12 @@ module Bundler::FileUtils
|
||||
# directories, and symbolic links;
|
||||
# other file types (FIFO streams, device files, etc.) are not supported.
|
||||
#
|
||||
# Keyword arguments:
|
||||
# Optional arguments:
|
||||
#
|
||||
# - <tt>dereference_root: true</tt> - if +src+ is a symbolic link,
|
||||
# follows the link.
|
||||
# - <tt>preserve: true</tt> - preserves file times.
|
||||
# - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
|
||||
# - +dereference_root+ - if +src+ is a symbolic link,
|
||||
# follows the link (+false+ by default).
|
||||
# - +preserve+ - preserves file times (+false+ by default).
|
||||
# - +remove_destination+ - removes +dest+ before copying files (+false+ by default).
|
||||
#
|
||||
# Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
|
||||
#
|
||||
@ -1065,12 +1061,12 @@ module Bundler::FileUtils
|
||||
# Bundler::FileUtils.copy_file('src0.txt', 'dest0.txt')
|
||||
# File.file?('dest0.txt') # => true
|
||||
#
|
||||
# Keyword arguments:
|
||||
# Optional arguments:
|
||||
#
|
||||
# - <tt>dereference: false</tt> - if +src+ is a symbolic link,
|
||||
# does not follow the link.
|
||||
# - <tt>preserve: true</tt> - preserves file times.
|
||||
# - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
|
||||
# - +dereference+ - if +src+ is a symbolic link,
|
||||
# follows the link (+true+ by default).
|
||||
# - +preserve+ - preserves file times (+false+ by default).
|
||||
# - +remove_destination+ - removes +dest+ before copying files (+false+ by default).
|
||||
#
|
||||
# Related: {methods for copying}[rdoc-ref:FileUtils@Copying].
|
||||
#
|
||||
@ -1491,7 +1487,8 @@ module Bundler::FileUtils
|
||||
# Related: {methods for deleting}[rdoc-ref:FileUtils@Deleting].
|
||||
#
|
||||
def remove_dir(path, force = false)
|
||||
remove_entry path, force # FIXME?? check if it is a directory
|
||||
raise Errno::ENOTDIR, path unless force or File.directory?(path)
|
||||
remove_entry path, force
|
||||
end
|
||||
module_function :remove_dir
|
||||
|
||||
@ -2475,6 +2472,10 @@ module Bundler::FileUtils
|
||||
|
||||
def fu_each_src_dest0(src, dest, target_directory = true) #:nodoc:
|
||||
if tmp = Array.try_convert(src)
|
||||
unless target_directory or tmp.size <= 1
|
||||
tmp = tmp.map {|f| File.path(f)} # A workaround for RBS
|
||||
raise ArgumentError, "extra target #{tmp}"
|
||||
end
|
||||
tmp.each do |s|
|
||||
s = File.path(s)
|
||||
yield s, (target_directory ? File.join(dest, File.basename(s)) : dest)
|
||||
@ -2509,7 +2510,11 @@ module Bundler::FileUtils
|
||||
path = File.path(path)
|
||||
list = []
|
||||
until (parent, base = File.split(path); parent == path or parent == ".")
|
||||
list << base
|
||||
if base != '..' and list.last == '..' and !(fu_have_symlink? && File.symlink?(path))
|
||||
list.pop
|
||||
else
|
||||
list << base
|
||||
end
|
||||
path = parent
|
||||
end
|
||||
list << path
|
||||
@ -2517,14 +2522,14 @@ module Bundler::FileUtils
|
||||
end
|
||||
private_module_function :fu_split_path
|
||||
|
||||
def fu_relative_components_from(target, base) #:nodoc:
|
||||
def fu_common_components(target, base) #:nodoc:
|
||||
i = 0
|
||||
while target[i]&.== base[i]
|
||||
i += 1
|
||||
end
|
||||
Array.new(base.size-i, '..').concat(target[i..-1])
|
||||
i
|
||||
end
|
||||
private_module_function :fu_relative_components_from
|
||||
private_module_function :fu_common_components
|
||||
|
||||
def fu_clean_components(*comp) #:nodoc:
|
||||
comp.shift while comp.first == "."
|
||||
@ -2534,7 +2539,7 @@ module Bundler::FileUtils
|
||||
while c = comp.shift
|
||||
if c == ".." and clean.last != ".." and !(fu_have_symlink? && File.symlink?(path))
|
||||
clean.pop
|
||||
path.chomp!(%r((?<=\A|/)[^/]+/\z), "")
|
||||
path.sub!(%r((?<=\A|/)[^/]+/\z), "")
|
||||
else
|
||||
clean << c
|
||||
path << c << "/"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user