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,
ABORT => 3,
};
+# configurables
my $config_overridden=0;
my $verbose=0;
my $stats=0;
my $jobs=1;
my $directory=getcwd();
+# globals :-(
my %config;
my %configfiles;
my %knownactions;
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) = @_;
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: $!";
} #}}}
# 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;