X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/f7ed26bbe30b1c38e2c9767bff9c791631713fe7..20f5a82ced16c52a87aa4df2edadf405b1ee0bb1:/mr diff --git a/mr b/mr index 61e2102..d3f8efb 100755 --- a/mr +++ b/mr @@ -339,6 +339,9 @@ The "MR_CONFIG" environment variable is set to the .mrconfig file that defines the repo being acted on, or, if the repo is not yet in a config file, the .mrconfig file that should be modified to register the repo. +The "MR_ACTION" environment variable is set to the command being run +(update, checkout, etc). + A few parameters have special meanings: =over 4 @@ -349,13 +352,15 @@ If the "skip" parameter is set and its command returns true, then B will skip acting on that repository. The command is passed the action name in $1. -Here are two examples. The first skips the repo unless +Here are three examples. The first skips the repo unless mr is run by joey. The second uses the hours_since function (included in mr's built-in library) to skip updating the repo unless it's -been at least 12 hours since the last update. +been at least 12 hours since the last update. The third skips operating +on the repo unless it already exists (use mr checkout to enable the repo). skip = test `whoami` != joey skip = [ "$1" = update ] && ! hours_since "$1" 12 + skip = lazy =item order @@ -579,6 +584,7 @@ sub action { my $is_update=($action =~ /update/); $ENV{MR_REPO}=$dir; + $ENV{MR_ACTION}=$action; foreach my $testname ("skip", "deleted") { my $testcommand=findcommand($testname, $dir, $topdir, $subdir, $is_checkout); @@ -755,6 +761,9 @@ sub hook { print STDERR "mr $hook: received signal ".($? & 127)."\n"; return ABORT; } + else { + return FAILED; + } } return OK; @@ -1235,21 +1244,26 @@ sub loadconfig { $knownactions{$parameter}=1; } if ($parameter eq 'chain' && - length $dir && $section ne "DEFAULT" && - -e $dir.$section."/.mrconfig") { - my $ret=system($value); - if ($ret != 0) { - if (($? & 127) == 2) { - print STDERR "mr: chain test interrupted\n"; - exit 2; + length $dir && $section ne "DEFAULT") { + my $chaindir="$section"; + if ($chaindir !~ m!/!) { + $chaindir=$dir.$chaindir; + } + if (-e "$chaindir/.mrconfig") { + my $ret=system($value); + if ($ret != 0) { + if (($? & 127) == 2) { + print STDERR "mr: chain test interrupted\n"; + exit 2; + } + elsif ($? & 127) { + print STDERR "mr: chain test received signal ".($? & 127)."\n"; + } } - elsif ($? & 127) { - print STDERR "mr: chain test received signal ".($? & 127)."\n"; + else { + push @toload, ["$chaindir/.mrconfig", $chaindir]; } } - else { - push @toload, $dir.$section."/.mrconfig"; - } } } } @@ -1258,8 +1272,8 @@ sub loadconfig { } } - foreach (@toload) { - loadconfig($_); + foreach my $c (@toload) { + loadconfig(@$c); } } @@ -1695,6 +1709,13 @@ lib = is_bzr_checkout() { LANG=C bzr info | egrep -q '^Checkout' } + lazy() { + if [ "$MR_ACTION" = checkout ] || [ -d "$MR_REPO" ]; then + return 1 + else + return 0 + fi + } svn_test = test -d "$MR_REPO"/.svn git_test = test -d "$MR_REPO"/.git