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.
my %knownactions;
my %alias;
my (@ok, @failed, @skipped);
-my @switches=@ARGV;
main();
sub action { #{{{
my ($action, $dir, $topdir, $subdir) = @_;
-
+
$ENV{MR_CONFIG}=$configfiles{$topdir};
my $lib=exists $config{$topdir}{$subdir}{lib} ?
$config{$topdir}{$subdir}{lib}."\n" : "";
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
+ my @orig=@ARGV;
+ @ARGV=('-n', $action, @orig);
action("remember", $dir, $topdir, $subdir);
+ @ARGV=@orig;
}
}
elsif ($ret != 0) {
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;
} #}}}
sub getopts { #{{{
+ my @saved=@ARGV;
Getopt::Long::Configure("bundling", "no_permute");
my $result=GetOptions(
"d|directory=s" => sub { $directory=abs_path($_[1]) },
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 { #{{{
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);
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 "$@"
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
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