Fix runnable symlinks
Fix symlinks to executable as relative paths from `bin` directory.
This commit is contained in:
parent
c93d07ed74
commit
a33416a333
Notes:
git
2024-09-03 01:44:07 +00:00
@ -40,7 +40,7 @@ module Path
|
|||||||
# Extensions to FileUtils
|
# Extensions to FileUtils
|
||||||
|
|
||||||
module Mswin
|
module Mswin
|
||||||
def ln_safe(src, dest, *opt)
|
def ln_safe(src, dest, real_src, *opt)
|
||||||
cmd = ["mklink", dest.tr("/", "\\"), src.tr("/", "\\")]
|
cmd = ["mklink", dest.tr("/", "\\"), src.tr("/", "\\")]
|
||||||
cmd[1, 0] = opt
|
cmd[1, 0] = opt
|
||||||
return if system("cmd", "/c", *cmd)
|
return if system("cmd", "/c", *cmd)
|
||||||
@ -48,23 +48,23 @@ module Path
|
|||||||
puts cmd.join(" ")
|
puts cmd.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
def ln_dir_safe(src, dest)
|
def ln_dir_safe(src, dest, real_src)
|
||||||
ln_safe(src, dest, "/d")
|
ln_safe(src, dest, "/d")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module HardlinkExcutable
|
module HardlinkExcutable
|
||||||
def ln_exe(src, dest)
|
def ln_exe(relative_src, dest, src)
|
||||||
ln(src, dest, force: true)
|
ln(src, dest, force: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def ln_safe(src, dest)
|
def ln_safe(src, dest, real_src)
|
||||||
ln_sf(src, dest)
|
ln_sf(src, dest)
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
# Windows disallows to create broken symboic links, probably because
|
# Windows disallows to create broken symboic links, probably because
|
||||||
# it is a kind of reparse points.
|
# it is a kind of reparse points.
|
||||||
raise if File.exist?(src)
|
raise if File.exist?(real_src)
|
||||||
end
|
end
|
||||||
|
|
||||||
alias ln_dir_safe ln_safe
|
alias ln_dir_safe ln_safe
|
||||||
@ -75,16 +75,16 @@ module Path
|
|||||||
parent = File.dirname(dest)
|
parent = File.dirname(dest)
|
||||||
File.directory?(parent) or mkdir_p(parent)
|
File.directory?(parent) or mkdir_p(parent)
|
||||||
if executable
|
if executable
|
||||||
return (ln_exe(src, dest) if File.exist?(src))
|
return (ln_exe(relative(src, parent), dest, src) if File.exist?(src))
|
||||||
end
|
end
|
||||||
clean_link(relative(src, parent), dest) {|s, d| ln_safe(s, d)}
|
clean_link(relative(src, parent), dest) {|s, d| ln_safe(s, d, src)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def ln_dir_relative(src, dest)
|
def ln_dir_relative(src, dest)
|
||||||
return if File.identical?(src, dest)
|
return if File.identical?(src, dest)
|
||||||
parent = File.dirname(dest)
|
parent = File.dirname(dest)
|
||||||
File.directory?(parent) or mkdir_p(parent)
|
File.directory?(parent) or mkdir_p(parent)
|
||||||
clean_link(relative(src, parent), dest) {|s, d| ln_dir_safe(s, d)}
|
clean_link(relative(src, parent), dest) {|s, d| ln_dir_safe(s, d, src)}
|
||||||
end
|
end
|
||||||
|
|
||||||
case (CROSS_COMPILING || RUBY_PLATFORM)
|
case (CROSS_COMPILING || RUBY_PLATFORM)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user