Changeset 398:63424da5d631 in finroc


Ignore:
Timestamp:
13.09.2018 11:17:12 (4 years ago)
Author:
Tobias Föhst <foehst@…>
Branch:
14.08
Children:
399:31633d36ff0f, 400:a28ec29f464f, 401:3da23436afdd
Phase:
public
Rebase:
39356238653634353430666533383536373535323462323365333263653032636339393930373835
Message:

Using persistent ssh connection for rsync in finroc_sync

File:
1 edited

Legend:

Unmodified
Added
Removed
  • scripts/finroc_sync

    r396 r398  
    4343use FINROC::getopt; 
    4444 
     45sub Execute($) 
     46{ 
     47    my ($command) = @_; 
     48    DEBUGMSG sprintf "command = '%s'\n", $command; 
     49    system $command; 
     50    ERRORMSG "Command failed!\n" if $?; 
     51} 
     52 
     53my $tmp = "/tmp/finroc_deploy.$$"; 
     54END 
     55{ 
     56    Execute "rm -rf $tmp"; 
     57} 
    4558 
    4659ERRORMSG "FINROC_PROJECT_HOME not set!\n" unless $FINROC_PROJECT_HOME; 
     
    156169    $directory .= $sub_directory if defined $sub_directory; 
    157170    $username .= "@" if defined $username; 
    158     $hostname .= ":"; 
     171 
     172    if ($hostname && !-e "$tmp/ssh_master") 
     173    { 
     174        mkdir $tmp unless -d $tmp; 
     175        my $ssh_options = sprintf "-fNM -S \"%s/ssh_master\" -o ControlPersist=10", $tmp; 
     176        $ssh_options .= sprintf " -p %d", $port if $port; 
     177        Execute sprintf "ssh %s %s%s", $ssh_options, $username, $hostname; 
     178    } 
    159179 
    160180    $username = "" unless $username; 
     
    170190    $rsync_options .= "n" if defined GetCommandLineOption "simulate"; 
    171191    $rsync_options .= sprintf " --rsync-path=\"mkdir -p '%s' && rsync\"", $directory unless defined GetCommandLineOption "simulate"; 
    172     $rsync_options .= sprintf " --rsh='ssh -p %d'", $port if defined $port; 
     192    $rsync_options .= sprintf " --rsh='ssh -S %s'", "$tmp/ssh_master" if $hostname; 
     193 
     194    $hostname .= ":"; 
     195 
    173196    my $pre = ""; 
    174197    my $post = ""; 
     
    180203    } 
    181204 
    182     my $command = sprintf "%s rsync %s --exclude=.svn --exclude=.hg %s %s%s\"'%s'\" %s", $pre, $rsync_options, $files, $username, $hostname, $directory, $post; 
    183     DEBUGMSG sprintf "command = '%s'\n", $command; 
    184     system $command; 
    185     ERRORMSG "Sync failed!\n" if $?; 
     205    Execute sprintf "%s rsync %s --exclude=.svn --exclude=.hg %s %s%s\"'%s'\" %s", $pre, $rsync_options, $files, $username, $hostname, $directory, $post; 
    186206} 
    187207 
     
    195215foreach my $target (@{$$sync_config{'target'}}) 
    196216{ 
     217    Execute "rm -rf $tmp"; 
     218     
    197219    my %target = %{$target}; 
    198220 
     
    249271 
    250272    my %libraries; 
    251     $libraries{"$FINROC_HOME/export/$FINROC_TARGET/lib/libenum_strings.so"} = 1 if -f "$FINROC_HOME/export/$FINROC_TARGET/lib/libenum_strings.so"; 
     273    sub AddLocalLib($) 
     274    { 
     275        my ($library) = @_; 
     276        $library = Cwd::abs_path $library; 
     277 
     278        return 0 if $libraries{$library}; 
     279 
     280        my $local_prefix = sprintf "%s/export/%s/lib/", $FINROC_HOME, $FINROC_TARGET; 
     281        return 0 if $local_prefix ne substr $library, 0, length $local_prefix; 
     282 
     283        $libraries{$library} = 1; 
     284        return 1; 
     285    } 
     286    AddLocalLib "$FINROC_HOME/export/$FINROC_TARGET/lib/libenum_strings.so"; 
    252287    foreach my $transfer_block ((@{$target{'programs'}}, @{$$sync_config{'programs'}})) 
    253288    { 
     
    266301                ERRORMSG sprintf "Can not resolve all dependencies. Try a rebuild and check your environment.\n" if /=> not found/; 
    267302                next unless /^lib(rrlib|finroc)/; 
    268                 if (/=> (\S+)/) 
    269                 { 
    270                     my $library = Cwd::abs_path $1; 
    271                     $libraries{$library} = 1 if "$FINROC_HOME/export/$FINROC_TARGET/lib" eq substr $library, 0, length "$FINROC_HOME/export/$FINROC_TARGET/lib"; 
    272                 } 
     303                AddLocalLib $1 if /=> (\S+)/; 
    273304            } 
    274305        } 
     
    302333                ERRORMSG sprintf "Malformed xml file '%s'.\n", $_ if $@; 
    303334 
    304                 foreach (grep { $_ } split /,| /, $$xml{Finstructable}{dependencies}) 
    305                 { 
    306                     my $library = sprintf "$FINROC_HOME/export/$FINROC_TARGET/lib/lib%s.so", $_; 
    307                     $libraries{$library} = 1 if -f $library; 
    308                 } 
     335                if ($$xml{Finstructable}{dependencies}) 
     336                { 
     337                    foreach (grep { $_ } split /,| /, $$xml{Finstructable}{dependencies}) 
     338                    { 
     339                        my $library = sprintf "$FINROC_HOME/export/$FINROC_TARGET/lib/lib%s.so", $_; 
     340                        AddLocalLib $library if -f $library; 
     341                    } 
     342                } 
    309343 
    310344                foreach my $element (keys %{$$xml{Finstructable}{element}}) 
     
    338372                    ERRORMSG sprintf "Can not resolve all dependencies. Try a rebuild and check your environment.\n" if /=> not found/; 
    339373                    next unless /^lib(rrlib|finroc)/; 
    340                     if (/=> (\S+)/) 
    341                     { 
    342                         my $library = Cwd::abs_path $1; 
    343                         if ("$FINROC_HOME/export/$FINROC_TARGET/lib" eq substr $library, 0, length "$FINROC_HOME/export/$FINROC_TARGET/lib" && !$libraries{$library}) 
    344                         { 
    345                             $libraries{$library} = 1; 
    346                             $item_added = 1; 
    347                         } 
    348                     } 
     374                    $item_added |= AddLocalLib $1 if /=> (\S+)/; 
    349375                } 
    350376 
     
    381407                } 
    382408 
    383                 foreach (grep { $_ } split /,| /, $$xml{Finstructable}{dependencies}) 
    384                 { 
    385                     my $library = sprintf "$FINROC_HOME/export/$FINROC_TARGET/lib/lib%s.so", $_; 
    386                     if (-f $library && !$libraries{$library}) 
     409                if ($$xml{Finstructable}{dependencies}) 
     410                { 
     411                    foreach (grep { $_ } split /,| /, $$xml{Finstructable}{dependencies}) 
    387412                    { 
    388                         $libraries{$library} = 1; 
    389                         $item_added = 1; 
     413                        my $library = sprintf "$FINROC_HOME/export/$FINROC_TARGET/lib/lib%s.so", $_; 
     414                        $item_added |= AddLocalLib $library if -f $library; 
    390415                    } 
    391416                } 
Note: See TracChangeset for help on using the changeset viewer.