X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/e899aac40c09604b3b9970f1e41d81660586d7be..03dc8df3426007f3ce116e480a7f881ca37eb50b:/mr diff --git a/mr b/mr index f4af3c7..e01ca1f 100755 --- a/mr +++ b/mr @@ -1001,7 +1001,7 @@ sub loadconfig { open($in, "<", $f) || die "mr: open $f: $!\n"; } my @lines=<$in>; - close $in; + close $in unless ref $f eq 'GLOB'; my $section; my $line=0; @@ -1106,6 +1106,13 @@ sub loadconfig { } } +sub startingconfig { + %alias=%config=%configfiles=%knownactions=%loaded=(); + my $datapos=tell(DATA); + loadconfig(\*DATA); + seek(DATA,$datapos,0); # rewind +} + sub modifyconfig { my $f=shift; # the section to modify or add @@ -1362,8 +1369,14 @@ sub bootstrap { move($tmpconfig, ".mrconfig") || die "rename: $!"; } - exec("mr $ENV{MR_SWITCHES} -c .mrconfig checkout"); - die "failed to run mr checkout"; + # Reload the config file (in case we got a different version) + # and checkout everything else. + startingconfig(); + loadconfig(".mrconfig"); + dispatch("checkout"); + @skipped=grep { abs_path($_) ne abs_path($topdir) } @skipped; + showstats("bootstrap"); + exitstats(); } # alias expansion and command stemming @@ -1451,28 +1464,32 @@ sub init { $ENV{MR_PATH}=$Bin."/".$Script; }; } + +sub exitstats { + if (@failed) { + exit 1; + } + elsif (! @ok && @skipped) { + exit 1; + } + else { + exit 0; + } +} sub main { getopts(); init(); - loadconfig(\*DATA); + startingconfig(); loadconfig($ENV{MR_CONFIG}); #use Data::Dumper; print Dumper(\%config); my $action=expandaction(shift @ARGV); dispatch($action); - showstats($action); - if (@failed) { - exit 1; - } - elsif (! @ok && @skipped) { - exit 1; - } - else { - exit 0; - } + showstats($action); + exitstats(); } # Finally, some useful actions that mr knows about by default.