X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/3cba68134c64156e30c1c19148c1e73990e7a2f1..552a9560c671c36ca527da4c4a51369633e3960f:/mr diff --git a/mr b/mr index 2e5b03d..e76887e 100755 --- a/mr +++ b/mr @@ -81,6 +81,11 @@ remote repository. Only supported for distributed revision control systems. The optional -m parameter allows specifying a commit message. +=item push + +Pushes committed local changes to the remote repository. A no-op for +centralized revision control systems. + =item diff Show a diff of uncommitted changes. @@ -381,7 +386,6 @@ my %configfiles; my %knownactions; my %alias; my (@ok, @failed, @skipped); -my @switches=@ARGV; main(); @@ -540,7 +544,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 +1011,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 +1141,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 +1157,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 +1197,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); @@ -1281,6 +1293,13 @@ bzr_record = bzr commit "$@" hg_record = hg commit -m "$@" darcs_record = darcs record -a -m "$@" +svn_push = : +git_push = git push "$@" +bzr_push = bzr push "$@" +cvs_push = : +hg_push = hg push "$@" +darcs_push = darcs push -a + svn_diff = svn diff "$@" git_diff = git diff "$@" bzr_diff = bzr diff "$@" @@ -1353,11 +1372,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 +1387,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