X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/c4cd5eba9e41a024e9eb8fc2f62cf4f37723b97e..c9232098307b1ba10076781bfc7794d133c2236e:/mr?ds=inline diff --git a/mr b/mr index d170e67..b2cb388 100755 --- a/mr +++ b/mr @@ -250,6 +250,11 @@ use strict; use Getopt::Long; use Cwd qw(getcwd abs_path); +$SIG{INT}=sub { + print STDERR "mr: interrupted\n"; + exit 2; +}; + $ENV{MR_CONFIG}="$ENV{HOME}/.mrconfig"; my $directory=getcwd(); my $verbose=0; @@ -261,7 +266,7 @@ my %alias; Getopt::Long::Configure("no_permute"); my $result=GetOptions( "d|directory=s" => sub { $directory=abs_path($_[1]) }, - "c|config=s" => \$ENV{MR_CONFIG}, + "c|config=s" => sub { $ENV{MR_CONFIG}=abs_path($_[1]) }, "v|verbose" => \$verbose, "s|stats" => \$stats, ); @@ -398,10 +403,19 @@ sub action { #{{{ my $test="set -e;".$lib.$config{$topdir}{$subdir}{deleted}; print "mr $action: running deleted test >>$test<<\n" if $verbose; my $ret=system($test); - if ($ret >> 8 == 0) { - print STDERR "mr error: $dir should be deleted yet still exists\n\n"; - push @failed, $dir; - return; + if ($ret != 0) { + if (($? & 127) == 2) { + print STDERR "mr $action: interrupted\n"; + exit 2; + } + elsif ($? & 127) { + print STDERR "mr $action: deleted test received signal ".($? & 127)."\n"; + } + if ($ret >> 8 == 0) { + print STDERR "mr error: $dir should be deleted yet still exists\n\n"; + push @failed, $dir; + return; + } } } } @@ -412,7 +426,12 @@ sub action { #{{{ push @skipped, $dir; return; } + $dir=~s/^(.*)\/[^\/]+\/?$/$1/; + if (! -d $dir) { + print "mr $action: creating parent directory $dir\n" if $verbose; + mkdir $dir; + } } elsif ($action eq 'update') { if (! -d $dir) { @@ -427,10 +446,20 @@ sub action { #{{{ "my_action(){ $config{$topdir}{$subdir}{skip}\n }; my_action '$action'"; print "mr $action: running skip test >>$test<<\n" if $verbose; my $ret=system($test); - if ($ret >> 8 == 0) { - print "mr $action: $dir skipped per config file\n" if $verbose; - push @skipped, $dir; - return; + if ($ret != 0) { + if (($? & 127) == 2) { + print STDERR "mr $action: interrupted\n"; + exit 2; + } + elsif ($? & 127) { + print STDERR "mr $action: skip test received signal ".($? & 127)."\n"; + exit 1; + } + if ($ret >> 8 == 0) { + print "mr $action: $dir skipped per config file\n" if $verbose; + push @skipped, $dir; + return; + } } } @@ -455,6 +484,13 @@ sub action { #{{{ print STDERR "mr $action: running >>$command<<\n" if $verbose; my $ret=system($command); if ($ret != 0) { + if (($? & 127) == 2) { + print STDERR "mr $action: interrupted\n"; + exit 2; + } + elsif ($? & 127) { + print STDERR "mr $action: received signal ".($? & 127)."\n"; + } print STDERR "mr $action: failed ($ret)\n" if $verbose; push @failed, $dir; if ($ret >> 8 != 0) { @@ -601,9 +637,20 @@ sub loadconfig { #{{{ $knownactions{$parameter}=1; if ($parameter eq 'chain' && length $dir && $section ne "DEFAULT" && - -e $dir.$section."/.mrconfig" && - system($value) >> 8 == 0) { - push @toload, $dir.$section."/.mrconfig"; + -e $dir.$section."/.mrconfig") { + my $ret=system($value); + if ($ret != 0) { + if (($? & 127) == 2) { + print STDERR "mr $action: chain test interrupted\n"; + exit 2; + } + elsif ($? & 127) { + print STDERR "mr $action: chain test received signal ".($? & 127)."\n"; + } + } + else { + push @toload, $dir.$section."/.mrconfig"; + } } } }