]>
git.madduck.net Git - code/myrepos.git/blobdiff - mr
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
mr - a Multiple Repository management tool
=head1 SYNOPSIS
mr - a Multiple Repository management tool
=head1 SYNOPSIS
B<mr> [options] checkout
B<mr> [options] update
B<mr> [options] checkout
B<mr> [options] update
The optional -m parameter allows specifying a commit message.
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.
=item diff
Show a diff of uncommitted changes.
my %knownactions;
my %alias;
my (@ok, @failed, @skipped);
my %knownactions;
my %alias;
my (@ok, @failed, @skipped);
sub action { #{{{
my ($action, $dir, $topdir, $subdir) = @_;
sub action { #{{{
my ($action, $dir, $topdir, $subdir) = @_;
$ENV{MR_CONFIG}=$configfiles{$topdir};
my $lib=exists $config{$topdir}{$subdir}{lib} ?
$config{$topdir}{$subdir}{lib}."\n" : "";
$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') {
if ($ret >> 8 != 0) {
print STDERR "mr $action: command failed\n";
if (-e "$ENV{HOME}/.mrlog" && $action ne 'remember') {
- @ARGV=(@SWITCHES, $action);
+ # recreate original command line to
+ # remember, and avoid recursing
+ my @orig=@ARGV;
+ @ARGV=('-n', $action, @orig);
action("remember", $dir, $topdir, $subdir);
action("remember", $dir, $topdir, $subdir);
if ($parameter eq "include") {
print "mr: including output of \"$value\"\n" if $verbose;
unshift @lines, `$value`;
if ($parameter eq "include") {
print "mr: including output of \"$value\"\n" if $verbose;
unshift @lines, `$value`;
+ if ($?) {
+ print STDERR "mr: include command exited nonzero ($?)\n";
+ }
elsif ($action eq 'register') {
register(@ARGV);
}
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;
my @repos=selectrepos;
action($action, @{$repos[0]}) if @repos;
exit 0;
} #}}}
sub getopts { #{{{
} #}}}
sub getopts { #{{{
Getopt::Long::Configure("bundling", "no_permute");
my $result=GetOptions(
"d|directory=s" => sub { $directory=abs_path($_[1]) },
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");
}
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 ";
+ }
loadconfig($ENV{MR_CONFIG});
#use Data::Dumper; print Dumper(\%config);
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);
dispatch($action);
showstats($action);
hg_record = hg commit -m "$@"
darcs_record = darcs record -a -m "$@"
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 "$@"
svn_diff = svn diff "$@"
git_diff = git diff "$@"
bzr_diff = bzr diff "$@"
- if [ -e ~/.mrlog ]; then
+ if [ -s ~/.mrlog ]; then
info "running offline commands"
mv -f ~/.mrlog ~/.mrlog.old
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 "no offline commands to run"
fi
offline =
fi
rm -f ~/.mrlog.old
else
info "no offline commands to run"
fi
offline =
touch ~/.mrlog
info "offline mode enabled"
remember =
info "remembering command: 'mr $@'"
touch ~/.mrlog
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
for w in "$@"; do
command="$command '$w'"
done