X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/a348fce28351c555810039dc1d7c7ebf9d35d9b2..154cb0f1671c05c0dfb5ec1c13c3a1fe06983692:/mr?ds=inline diff --git a/mr b/mr index aefbb4c..ccc7647 100755 --- a/mr +++ b/mr @@ -296,7 +296,8 @@ use warnings; use strict; use Getopt::Long; use Cwd qw(getcwd abs_path); -use POSIX "WNOHANG"; + +# things that can happen when mr runs a command use constant { OK => 0, FAILED => 1, @@ -304,6 +305,7 @@ use constant { ABORT => 3, }; +# configurables my $config_overridden=0; my $verbose=0; my $stats=0; @@ -312,6 +314,7 @@ my $no_chdir=0; my $jobs=1; my $directory=getcwd(); +# globals :-( my %config; my %configfiles; my %knownactions; @@ -320,30 +323,6 @@ my (@ok, @failed, @skipped); main(); -sub dispatch { #{{{ - my $action=shift; - - # actions that do not operate on all repos - if ($action eq 'help') { - help(@ARGV); - } - elsif ($action eq 'config') { - config(@ARGV); - } - elsif ($action eq 'register') { - register(@ARGV); - } - - if ($jobs > 1) { - mrs($action, selectrepos()); - } - else { - foreach my $repo (selectrepos()) { - record($repo, action($action, @$repo)); - } - } -} #}}} - sub rcs_test { #{{{ my ($action, $dir, $topdir, $subdir) = @_; @@ -909,7 +888,31 @@ sub modifyconfig { #{{{ print $out @out; close $out; } #}}} - + +sub dispatch { #{{{ + my $action=shift; + + # actions that do not operate on all repos + if ($action eq 'help') { + help(@ARGV); + } + elsif ($action eq 'config') { + config(@ARGV); + } + elsif ($action eq 'register') { + register(@ARGV); + } + + if ($jobs > 1) { + mrs($action, selectrepos()); + } + else { + foreach my $repo (selectrepos()) { + record($repo, action($action, @$repo)); + } + } +} #}}} + sub help { #{{{ exec($config{''}{DEFAULT}{help}) || die "exec: $!"; } #}}} @@ -957,14 +960,19 @@ sub register { #{{{ # Find the closest known mrconfig file to the current # directory. $directory.="/" unless $directory=~/\/$/; + my $foundconfig=0; foreach my $topdir (reverse sort keys %config) { next unless length $topdir; if ($directory=~/^\Q$topdir\E/) { $ENV{MR_CONFIG}=$configfiles{$topdir}; $directory=$topdir; + $foundconfig=1; last; } } + if (! $foundconfig) { + $directory=""; # no config file, use builtin + } } if (@ARGV) { my $subdir=shift @ARGV;