@@ -708,9 +708,10 @@ def ln_s(src, dest, force: nil, relative: false, target_directory: true, noop: n
708
708
if relative
709
709
return ln_sr ( src , dest , force : force , noop : noop , verbose : verbose )
710
710
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
712
713
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 |
714
715
remove_file d , true if force
715
716
File . symlink s , d
716
717
end
@@ -730,17 +731,16 @@ def ln_sf(src, dest, noop: nil, verbose: nil)
730
731
# Like FileUtils.ln_s, but create links relative to +dest+.
731
732
#
732
733
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
742
743
end
743
- destdirs = fu_split_path ( File . realpath ( destdirs ) )
744
744
if fu_starting_path? ( s )
745
745
srcdirs = fu_split_path ( ( File . realdirpath ( s ) rescue File . expand_path ( s ) ) )
746
746
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
754
754
end
755
755
s = File . join ( *base , *srcdirs )
756
756
end
757
- fu_output_message "ln -s#{ options } #{ s } #{ d } " if verbose
758
757
next if noop
759
758
remove_file d , true if force
760
759
File . symlink s , d
761
760
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
769
761
end
770
762
module_function :ln_sr
771
763
@@ -2475,6 +2467,9 @@ def fu_each_src_dest(src, dest) #:nodoc:
2475
2467
2476
2468
def fu_each_src_dest0 ( src , dest , target_directory = true ) #:nodoc:
2477
2469
if tmp = Array . try_convert ( src )
2470
+ unless target_directory or tmp . size <= 1
2471
+ raise ArgumentError , "extra target #{ tmp } "
2472
+ end
2478
2473
tmp . each do |s |
2479
2474
s = File . path ( s )
2480
2475
yield s , ( target_directory ? File . join ( dest , File . basename ( s ) ) : dest )
0 commit comments