From: "Kent Fredric" <kentfredric@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/perl-overlay:master commit in: scripts/
Date: Mon, 29 Aug 2011 05:44:09 +0000 (UTC) [thread overview]
Message-ID: <3a05ea43a2e634e12124f44e49b7c8b059d264ec.kent@gentoo> (raw)
commit: 3a05ea43a2e634e12124f44e49b7c8b059d264ec
Author: Kent Fredric <kentfredric <AT> gmail <DOT> com>
AuthorDate: Tue Aug 2 01:46:29 2011 +0000
Commit: Kent Fredric <kentfredric <AT> gmail <DOT> com>
CommitDate: Mon Aug 29 05:39:17 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/perl-overlay.git;a=commit;h=3a05ea43
[scripts] new script to facilitate spawning the ssh backgrounded connections. ( I always forget how to do this and its annoying, this script mostly just does the right thing. Its a bit more annoying on subsequent calls to the script if the master connection is already up, but its really not worth mention )
---
scripts/ssh_multiplex.pl | 109 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/scripts/ssh_multiplex.pl b/scripts/ssh_multiplex.pl
new file mode 100644
index 0000000..a83cd62
--- /dev/null
+++ b/scripts/ssh_multiplex.pl
@@ -0,0 +1,109 @@
+#!/usr/bin/env perl
+eval 'echo "Called with something not perl"' && exit 1 # Non-Perl protection.
+ if 0;
+
+use strict;
+use warnings;
+use 5.12.1;
+
+# FILENAME: ssh_multiplex.pl
+# CREATED: 02/08/11 12:18:23 by Kent Fredric (kentnl) <kentfredric@gmail.com>
+# ABSTRACT: Spawn Background SSH Masters for Gentoo Git Sources
+
+use File::Which qw( which );
+use Data::Dump qw( dump );
+
+my $ssh_cmd = which(qw( ssh ));
+my %flag_map = (
+ background => ['-f'],
+ no_execute_command => ['-N'],
+ no_stdin => ['-n'],
+ control_master => [ '-o', 'ControlMaster=auto' ],
+);
+
+my @pids;
+
+spawn_cmd(
+ {
+ pids => \@pids,
+ params => [qw( background no_execute_command no_stdin control_master )],
+ connect => 'git@github.com',
+ cleanup => sub {
+ say "\e[31mConnected to git\@github.com\e[0m";
+ },
+ }
+);
+
+spawn_cmd(
+ {
+ pids => \@pids,
+ params => [qw( background no_execute_command no_stdin control_master )],
+ connect => 'git@git.overlays.gentoo.org',
+ cleanup => sub {
+ say "\e[32mConnected to git\@git.overlays.gentoo.org\e[0m";
+ },
+ }
+);
+
+for (@pids) {
+ waitpid $_, 0;
+}
+
+say "Done.";
+
+exit;
+
+sub map_option {
+ my ($option) = @_;
+ if ( not exists $flag_map{$option} ) {
+ require Carp;
+ Carp::croak("Map for $option undefined");
+ }
+ return @{ $flag_map{$option} };
+}
+
+sub map_literal_array {
+ my ($literal) = @_;
+ return @{$literal};
+}
+
+sub map_param {
+ my ($param) = @_;
+ return map_option($param) if not ref $param;
+ return map_literal_array($param) if ref $param eq 'ARRAY';
+ require Carp;
+ Carp::croak("Unhandled parameter $param");
+}
+
+sub spawn_child {
+ my (@cmd) = @_;
+ my $cleanup = pop @cmd;
+ my $pid;
+ if ( not defined( $pid = fork() ) ) {
+ my (@error) = ( $!, $?, $@ );
+ require Carp;
+ Carp::croak("Forking Failed :( @error ");
+ }
+ if ($pid) {
+ return $pid;
+ }
+ system(@cmd) == 0 or do {
+ my (@error) = ( $!, $?, $@ );
+ require Carp;
+ Carp::croak("Running command Failed :( @error ");
+ };
+ $cleanup->();
+ exit;
+}
+
+sub spawn_cmd {
+ my ($args) = @_;
+ my @outargs = map { map_param($_) } @{ $args->{'params'} };
+ my (@cmd) = ( $ssh_cmd, @outargs, $args->{'connect'} );
+ say "Spawning " . dump( \@cmd );
+ $args->{cleanup} //= sub {
+ say "\e[31mConnected to " . $args->{'connect'} . "\e[0m";
+ };
+ push @{ $args->{pids} }, grep { defined } spawn_child( @cmd, $args->{cleanup} );
+}
+
next reply other threads:[~2011-08-29 5:44 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-29 5:44 Kent Fredric [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-09-23 6:17 [gentoo-commits] proj/perl-overlay:master commit in: scripts/ Kent Fredric
2011-10-24 9:09 Kent Fredric
2011-10-24 18:26 Kent Fredric
2011-10-24 21:17 Kent Fredric
2011-10-25 19:46 Kent Fredric
2011-10-25 19:46 Kent Fredric
2011-10-25 19:46 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 2:48 Kent Fredric
2011-10-31 4:52 Kent Fredric
2011-10-31 7:10 Kent Fredric
2011-10-31 8:46 Kent Fredric
2011-10-31 18:05 Kent Fredric
2011-10-31 18:05 Kent Fredric
2011-11-11 14:38 Kent Fredric
2011-11-14 2:57 Kent Fredric
2011-11-14 2:57 Kent Fredric
2011-12-05 21:45 Kent Fredric
2012-02-12 7:22 Kent Fredric
2012-02-12 7:22 Kent Fredric
2012-02-24 7:13 Kent Fredric
2012-02-24 7:13 Kent Fredric
2012-02-28 21:55 Kent Fredric
2012-02-28 21:55 Kent Fredric
2012-02-28 21:55 Kent Fredric
2012-02-29 12:06 Kent Fredric
2012-02-29 12:22 Kent Fredric
2012-02-29 12:22 Kent Fredric
2012-03-01 11:38 Kent Fredric
2012-03-27 1:26 Kent Fredric
2012-03-27 1:26 Kent Fredric
2012-03-27 1:26 Kent Fredric
2012-04-05 10:02 Kent Fredric
2012-04-08 13:20 Kent Fredric
2012-04-08 13:20 Kent Fredric
2012-04-09 16:05 Kent Fredric
2012-04-12 19:46 Kent Fredric
2012-04-18 3:32 Kent Fredric
2012-04-18 3:32 Kent Fredric
2012-04-18 3:32 Kent Fredric
2012-04-28 10:40 Kent Fredric
2012-05-27 2:30 Kent Fredric
2012-06-08 17:14 Kent Fredric
2012-06-22 7:34 Kent Fredric
2012-07-12 19:23 Torsten Veller
2012-07-31 3:04 Kent Fredric
2012-08-02 11:46 Kent Fredric
2012-08-02 11:46 Kent Fredric
2012-09-15 23:19 Kent Fredric
2012-10-24 15:49 Kent Fredric
2013-05-01 23:03 Kent Fredric
2013-05-01 23:03 Kent Fredric
2013-12-23 15:28 Kent Fredric
2015-02-28 23:17 Kent Fredric
2015-02-28 23:17 Kent Fredric
2017-09-16 22:36 Kent Fredric
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3a05ea43a2e634e12124f44e49b7c8b059d264ec.kent@gentoo \
--to=kentfredric@gmail.com \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox