Skip to content
Snippets Groups Projects
Commit 99df82c5 authored by Max Howell's avatar Max Howell Committed by Adam Vandenberg
Browse files

Fixes Pathname.install(:foo => :bar) to work when File.exist?(:bar)

parent 3927972a
Branches
Tags
No related merge requests found
......@@ -3,14 +3,27 @@ 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
case src
when Array
src.collect {|src| install_p(src) }
when Hash
src.collect {|src, new_basename| install_p(src, new_basename) }
else
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
......@@ -21,15 +34,14 @@ class Pathname
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
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, to_s
end
src=Pathname.new src
return self+src.basename
FileUtils.mv src, dst
end
return Pathname.new(dst)
end
# we assume this pathname object is a file obviously
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment