@@ -708,9 +708,10 @@ def ln_s(src, dest, force: nil, relative: false, target_directory: true, noop: n
708708 if relative
709709 return ln_sr ( src , dest , force : force , noop : noop , verbose : verbose )
710710 end
711- fu_output_message "ln -s#{ force ? 'f' : '' } #{ [ src , dest ] . flatten . join ' ' } " if verbose
711+ fu_output_message "ln -s#{ force ? 'f' : '' } #{
712+ target_directory ? '' : 'T' } #{ [ src , dest ] . flatten . join ' ' } " if verbose
712713 return if noop
713- fu_each_src_dest0 ( src , dest ) do |s , d |
714+ fu_each_src_dest0 ( src , dest , target_directory ) do |s , d |
714715 remove_file d , true if force
715716 File . symlink s , d
716717 end
@@ -730,17 +731,16 @@ def ln_sf(src, dest, noop: nil, verbose: nil)
730731 # Like FileUtils.ln_s, but create links relative to +dest+.
731732 #
732733 def ln_sr ( src , dest , target_directory : true , force : nil , noop : nil , verbose : nil )
733- options = " #{ force ? 'f' : '' } #{ target_directory ? '' : 'T' } "
734- dest = File . path ( dest )
735- srcs = Array ( src )
736- link = proc do | s , target_dir_p = true |
737- s = File . path ( s )
738- if target_dir_p
739- d = File . join ( destdirs = dest , File . basename ( s ) )
740- else
741- destdirs = File . dirname ( d = dest )
734+ fu_output_message "ln -sr #{ force ? 'f' : '' } #{
735+ target_directory ? '' : 'T' } #{ [ src , dest ] . flatten . join ' ' } " if verbose
736+ unless target_directory
737+ destdirs = fu_split_path ( File . realdirpath ( dest ) )
738+ end
739+ fu_each_src_dest0 ( src , dest , target_directory ) do | s , d |
740+ if target_directory
741+ destdirs = fu_split_path ( File . realdirpath ( File . dirname ( d ) ) )
742+ # else d == dest
742743 end
743- destdirs = fu_split_path ( File . realpath ( destdirs ) )
744744 if fu_starting_path? ( s )
745745 srcdirs = fu_split_path ( ( File . realdirpath ( s ) rescue File . expand_path ( s ) ) )
746746 base = fu_relative_components_from ( srcdirs , destdirs )
@@ -754,18 +754,10 @@ def ln_sr(src, dest, target_directory: true, force: nil, noop: nil, verbose: nil
754754 end
755755 s = File . join ( *base , *srcdirs )
756756 end
757- fu_output_message "ln -s#{ options } #{ s } #{ d } " if verbose
758757 next if noop
759758 remove_file d , true if force
760759 File . symlink s , d
761760 end
762- case srcs . size
763- when 0
764- when 1
765- link [ srcs [ 0 ] , target_directory && File . directory? ( dest ) ]
766- else
767- srcs . each ( &link )
768- end
769761 end
770762 module_function :ln_sr
771763
@@ -2475,6 +2467,9 @@ def fu_each_src_dest(src, dest) #:nodoc:
24752467
24762468 def fu_each_src_dest0 ( src , dest , target_directory = true ) #:nodoc:
24772469 if tmp = Array . try_convert ( src )
2470+ unless target_directory or tmp . size <= 1
2471+ raise ArgumentError , "extra target #{ tmp } "
2472+ end
24782473 tmp . each do |s |
24792474 s = File . path ( s )
24802475 yield s , ( target_directory ? File . join ( dest , File . basename ( s ) ) : dest )
0 commit comments