X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/3cba68134c64156e30c1c19148c1e73990e7a2f1..c428c39904c8cffa8389687cee683cfa32836920:/mr?ds=inline diff --git a/mr b/mr index 2e5b03d..7eaaddd 100755 --- a/mr +++ b/mr @@ -381,7 +381,6 @@ my %configfiles; my %knownactions; my %alias; my (@ok, @failed, @skipped); -my @switches=@ARGV; main(); @@ -540,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=(@switches, $action, @ARGV); + # recreate original command line to + # remember, and avoid recursing + @ARGV=('-n', $action, @ARGV); action("remember", $dir, $topdir, $subdir); } } @@ -1005,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; @@ -1133,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]) }, @@ -1148,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 { #{{{ @@ -1182,10 +1192,7 @@ sub main { #{{{ loadconfig($ENV{MR_CONFIG}); #use Data::Dumper; print Dumper(\%config); - my $action=shift @ARGV; - @switches = grep { $_ ne $action } @SWITCHES; - $action=expandaction($action); - + my $action=expandaction(shift @ARGV); dispatch($action); showstats($action); @@ -1353,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 @@ -1368,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