X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/02d332602145b6e3e3e28dbfd5078fcf04c27446..da4251ccfad6a4ea83fcc21a70f7f7dd26e5fa55:/mr?ds=sidebyside diff --git a/mr b/mr index e735b67..95a7fe8 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; @@ -311,7 +316,7 @@ elsif ($action eq 'config') { } my $section=shift; if ($section=~/^\//) { - # try to convert to a path relative to $config's dir + # try to convert to a path relative to the config file my ($dir)=$ENV{MR_CONFIG}=~/^(.*\/)[^\/]+$/; if ($section=~/^\Q$dir\E(.*)/) { $section=$1; @@ -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,13 @@ sub action { #{{{ push @skipped, $dir; return; } + $dir=~s/^(.*)\/[^\/]+\/?$/$1/; + + if (! -d $dir) { + print "mr $action: creating parent directory $dir\n" if $verbose; + my $ret=system("mkdir", "-p", $dir); + } } elsif ($action eq 'update') { if (! -d $dir) { @@ -427,10 +447,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 +485,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) { @@ -500,7 +537,7 @@ if ($stats) { print "mr $action: (skipped: ".join(" ", @skipped).")\n"; } if (@failed) { - print "mr $action: (failed: ".join(" ", @failed).")\n"; + print STDERR "mr $action: (failed: ".join(" ", @failed).")\n"; } } if (@failed) { @@ -601,9 +638,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"; + } } } }