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
|
# we enhance pathname to make our code more readable
|
||||||
class Pathname
|
class Pathname
|
||||||
def install src
|
def install src
|
||||||
if src.is_a? Array
|
case src
|
||||||
src.collect {|src| install src }
|
when Array
|
||||||
elsif src.is_a? Hash
|
src.collect {|src| install_p(src) }
|
||||||
src.each_pair do |name, new_name|
|
when Hash
|
||||||
FileUtils.mv name, new_name
|
src.collect {|src, new_basename| install_p(src, new_basename) }
|
||||||
install new_name
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
# if it's a symlink, don't resolve it to a file because if we are moving
|
install_p(src)
|
||||||
# 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
|
|
||||||
end
|
end
|
||||||
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
|
# we assume this pathname object is a file obviously
|
||||||
def write content
|
def write content
|
||||||
raise "Will not overwrite #{to_s}" if exist? and not ARGV.force?
|
raise "Will not overwrite #{to_s}" if exist? and not ARGV.force?
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user