@@ -70,23 +70,31 @@ def ln_safe(src, dest, real_src)
7070 alias ln_dir_safe ln_safe
7171 alias ln_exe ln_safe
7272
73- def ln_relative ( src , dest , executable = false )
73+ def ln_relative ( src , dest , executable = false , target_directory : true )
7474 return if File . identical? ( src , dest )
75- parent = File . dirname ( dest )
76- File . directory? ( parent ) or mkdir_p ( parent )
75+ parent = ln_target_directory ( dest , target_directory )
7776 if executable
7877 return ( ln_exe ( relative ( src , parent ) , dest , src ) if File . exist? ( src ) )
7978 end
8079 clean_link ( relative ( src , parent ) , dest ) { |s , d | ln_safe ( s , d , src ) }
8180 end
8281
83- def ln_dir_relative ( src , dest )
82+ def ln_dir_relative ( src , dest , target_directory : true )
8483 return if File . identical? ( src , dest )
85- parent = File . dirname ( dest )
86- File . directory? ( parent ) or mkdir_p ( parent )
84+ parent = ln_target_directory ( dest , target_directory )
8785 clean_link ( relative ( src , parent ) , dest ) { |s , d | ln_dir_safe ( s , d , src ) }
8886 end
8987
88+ private def ln_target_directory ( dest , target_directory )
89+ if target_directory
90+ dest
91+ else
92+ parent = File . dirname ( dest )
93+ File . directory? ( parent ) or mkdir_p ( parent )
94+ parent
95+ end
96+ end
97+
9098 case ( CROSS_COMPILING || RUBY_PLATFORM )
9199 when /linux|darwin|solaris/
92100 prepend HardlinkExcutable
0 commit comments