X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/056bfc218e74821f28990c305d695a02d35363a0..13edc14d59b4e18b4d471a3bd97f062bdac02d22:/mr diff --git a/mr b/mr index a58b52b..7eaaddd 100755 --- a/mr +++ b/mr @@ -539,7 +539,9 @@ sub action { #{{{ if ($ret >> 8 != 0) { print STDERR "mr $action: command failed\n"; if (-e "$ENV{HOME}/.mrlog" && $action ne 'remember') { - @ARGV=($action, @ARGV); + # recreate original command line to + # remember, and avoid recursing + @ARGV=('-n', $action, @ARGV); action("remember", $dir, $topdir, $subdir); } } @@ -1004,7 +1006,9 @@ sub dispatch { #{{{ elsif ($action eq 'register') { register(@ARGV); } - elsif ($action eq 'remember') { + elsif ($action eq 'remember' || + $action eq 'offline' || + $action eq 'online') { my @repos=selectrepos; action($action, @{$repos[0]}) if @repos; exit 0; @@ -1132,6 +1136,7 @@ sub expandaction { #{{{ } #}}} sub getopts { #{{{ + my @saved=@ARGV; Getopt::Long::Configure("bundling", "no_permute"); my $result=GetOptions( "d|directory=s" => sub { $directory=abs_path($_[1]) }, @@ -1147,6 +1152,12 @@ sub getopts { #{{{ die("Usage: mr [-d directory] action [params ...]\n". "(Use mr help for man page.)\n"); } + + $ENV{MR_SWITCHES}=""; + foreach my $option (@saved) { + last if $option eq $ARGV[0]; + $ENV{MR_SWITCHES}.="$option "; + } } #}}} sub init { #{{{ @@ -1176,10 +1187,11 @@ sub init { #{{{ sub main { #{{{ getopts(); init(); + loadconfig(\*DATA); loadconfig($ENV{MR_CONFIG}); #use Data::Dumper; print Dumper(\%config); - + my $action=expandaction(shift @ARGV); dispatch($action); showstats($action); @@ -1348,11 +1360,11 @@ list = true config = online = - if [ -e ~/.mrlog ]; then + if [ -s ~/.mrlog ]; then info "running offline commands" mv -f ~/.mrlog ~/.mrlog.old - if ! sh ~/.mrlog.old; then - error "offline commands failed; left in ~/.mrlog.old" + if ! sh -e ~/.mrlog.old; then + error "offline command failed; left in ~/.mrlog.old" fi rm -f ~/.mrlog.old else @@ -1363,7 +1375,7 @@ offline = info "offline mode enabled" remember = info "remembering command: 'mr $@'" - command="mr -d '$(pwd)'" + command="mr -d '$(pwd)' $MR_SWITCHES" for w in "$@"; do command="$command '$w'" done