Always pass basename to install_p

Currently, when called with one argument, dst is set to self, i.e. the
directory into which the source file should be moved.

When called with a second argument (for renames), dst is the full path,
including the basename, to the moved file.

Instead, let's always pass the full path, which means we can remove the
branching logic around computing dst.
This commit is contained in:
Jack Nagel 2015-03-23 21:03:55 -04:00
parent 453990f1aa
commit 6f0efd6f3d
2 changed files with 6 additions and 13 deletions

View File

@ -21,7 +21,7 @@ class Pathname
opoo "tried to install empty array to #{self}"
return
end
src.each {|s| install_p(s) }
src.each { |s| install_p(s, File.basename(s)) }
when Hash
if src.empty?
opoo "tried to install empty hash to #{self}"
@ -29,20 +29,15 @@ class Pathname
end
src.each { |s, new_basename| install_p(s, new_basename) }
else
install_p(src)
install_p(src, File.basename(src))
end
end
end
def install_p src, new_basename = nil
def install_p(src, new_basename)
raise Errno::ENOENT, src.to_s unless File.symlink?(src) || File.exist?(src)
if new_basename
new_basename = File.basename(new_basename) # rationale: see Pathname.+
dst = self+new_basename
else
dst = self
end
dst = join(new_basename)
src = src.to_s
dst = dst.to_s

View File

@ -1,8 +1,6 @@
module InstallRenamed
def install_p _, new_basename = nil
def install_p(_, new_basename)
super do |src, dst|
dst += "/#{File.basename(src)}" if File.directory? dst
if File.directory? src
Pathname.new(dst).install Dir["#{src}/*"]
next