Fixes Pathname.install(:foo => :bar) to work when File.exist?(:bar)
This commit is contained in:
parent
3927972a2a
commit
99df82c568
@ -3,35 +3,47 @@ require 'pathname'
|
||||
# we enhance pathname to make our code more readable
|
||||
class Pathname
|
||||
def install src
|
||||
if src.is_a? Array
|
||||
src.collect {|src| install src }
|
||||
elsif src.is_a? Hash
|
||||
src.each_pair do |name, new_name|
|
||||
FileUtils.mv name, new_name
|
||||
install new_name
|
||||
end
|
||||
case src
|
||||
when Array
|
||||
src.collect {|src| install_p(src) }
|
||||
when Hash
|
||||
src.collect {|src, new_basename| install_p(src, new_basename) }
|
||||
else
|
||||
# if it's a symlink, don't resolve it to a file because if we are moving
|
||||
# files one by one, it's likely we will break the symlink by moving what
|
||||
# it points to before we move it
|
||||
# and also broken symlinks are not the end of the world
|
||||
raise "#{src} does not exist" unless File.symlink? src or File.exist? src
|
||||
|
||||
mkpath
|
||||
if File.symlink? src
|
||||
# we use the BSD mv command because FileUtils copies the target and
|
||||
# not the link! I'm beginning to wish I'd used Python quite honestly!
|
||||
raise unless Kernel.system 'mv', src, to_s and $? == 0
|
||||
else
|
||||
# we mv when possible as it is faster and you should only be using
|
||||
# this function when installing from the temporary build directory
|
||||
FileUtils.mv src, to_s
|
||||
end
|
||||
src=Pathname.new src
|
||||
return self+src.basename
|
||||
install_p(src)
|
||||
end
|
||||
end
|
||||
|
||||
def install_p src, new_basename = nil
|
||||
if new_basename
|
||||
new_basename = File.basename(new_basename) # rationale: see Pathname.+
|
||||
dst = self+new_basename
|
||||
else
|
||||
dst = self
|
||||
end
|
||||
|
||||
src = src.to_s
|
||||
dst = dst.to_s
|
||||
|
||||
# if it's a symlink, don't resolve it to a file because if we are moving
|
||||
# files one by one, it's likely we will break the symlink by moving what
|
||||
# it points to before we move it
|
||||
# and also broken symlinks are not the end of the world
|
||||
raise "#{src} does not exist" unless File.symlink? src or File.exist? src
|
||||
|
||||
mkpath
|
||||
if File.symlink? src
|
||||
# we use the BSD mv command because FileUtils copies the target and
|
||||
# not the link! I'm beginning to wish I'd used Python quite honestly!
|
||||
raise unless Kernel.system 'mv', src, dst
|
||||
else
|
||||
# we mv when possible as it is faster and you should only be using
|
||||
# this function when installing from the temporary build directory
|
||||
FileUtils.mv src, dst
|
||||
end
|
||||
|
||||
return Pathname.new(dst)
|
||||
end
|
||||
|
||||
# we assume this pathname object is a file obviously
|
||||
def write content
|
||||
raise "Will not overwrite #{to_s}" if exist? and not ARGV.force?
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user