]>
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:
or even to add other commands for 'mr online' to run. If the file is
present, mr assumes it is in offline mode.
or even to add other commands for 'mr online' to run. If the file is
present, mr assumes it is in offline mode.
-=head "UNTRUSTED MRCONFIG FILES"
+=head1 "UNTRUSTED MRCONFIG FILES"
Since mrconfig files can contain arbitrary shell commands, they can do
anything. This flexability is good, but it also allows a malicious mrconfig
Since mrconfig files can contain arbitrary shell commands, they can do
anything. This flexability is good, but it also allows a malicious mrconfig
if ($ret == OK) {
push @ok, $dir;
if ($ret == OK) {
push @ok, $dir;
+ print "\n" unless $quiet ;
}
elsif ($ret == FAILED) {
if ($interactive) {
}
elsif ($ret == FAILED) {
if ($interactive) {
system((getpwuid($<))[8], "-i");
}
push @failed, $dir;
system((getpwuid($<))[8], "-i");
}
push @failed, $dir;
+ print "\n" unless $quiet ;
}
elsif ($ret == SKIPPED) {
push @skipped, $dir;
}
elsif ($ret == SKIPPED) {
push @skipped, $dir;
open($in, "<", $f) || die "mr: open $f: $!\n";
}
my @lines=<$in>;
open($in, "<", $f) || die "mr: open $f: $!\n";
}
my @lines=<$in>;
+ close $in unless ref $f eq 'GLOB' ;
+sub startingconfig {
+ %alias=%config=%configfiles=%knownactions=%loaded=();
+ my $datapos=tell(DATA);
+ loadconfig(\*DATA);
+ seek(DATA,$datapos,0); # rewind
+}
+
sub modifyconfig {
my $f=shift;
# the section to modify or add
sub modifyconfig {
my $f=shift;
# the section to modify or add
die $@ if $@;
my $tmpconfig=File::Temp->new();
if (system("curl", "-A", "mr", "-s", $url, "-o", $tmpconfig) != 0) {
die $@ if $@;
my $tmpconfig=File::Temp->new();
if (system("curl", "-A", "mr", "-s", $url, "-o", $tmpconfig) != 0) {
- die "mr: download of $url failed\n";
+ die "mr bootstrap : download of $url failed\n";
if exists $config{$topdir}{"."}{"checkout"};
if (-e ".mrconfig") {
if exists $config{$topdir}{"."}{"checkout"};
if (-e ".mrconfig") {
- print STDERR "mr: .mrconfig file already exists, not overwriting with $url\n";
+ print STDERR "mr bootstrap : .mrconfig file already exists, not overwriting with $url\n";
- rename($tmpconfig, ".mrconfig") || die "rename: $!";
- }
-
- exec("mr $ENV{MR_SWITCHES} -c .mrconfig checkout");
- die "failed to run mr checkout";
+ eval q{use File::Copy};
+ die $@ if $@;
+ move($tmpconfig, ".mrconfig") || die "rename: $!";
+ }
+
+ # Load the config file and checkout everything else.
+ startingconfig();
+ loadconfig(".mrconfig");
+ dispatch("checkout");
+ @skipped=grep { abs_path($_) ne abs_path($topdir) } @skipped;
+ showstats("bootstrap");
+ exitstats();
}
# alias expansion and command stemming
}
# alias expansion and command stemming
$ENV{MR_PATH}=$Bin."/".$Script;
};
}
$ENV{MR_PATH}=$Bin."/".$Script;
};
}
+
+sub exitstats {
+ if (@failed) {
+ exit 1;
+ }
+ elsif (! @ok && @skipped) {
+ exit 1;
+ }
+ else {
+ exit 0;
+ }
+}
sub main {
getopts();
init();
sub main {
getopts();
init();
loadconfig($ENV{MR_CONFIG});
#use Data::Dumper; print Dumper(\%config);
my $action=expandaction(shift @ARGV);
dispatch($action);
loadconfig($ENV{MR_CONFIG});
#use Data::Dumper; print Dumper(\%config);
my $action=expandaction(shift @ARGV);
dispatch($action);
- if (@failed) {
- exit 1;
- }
- elsif (! @ok && @skipped) {
- exit 1;
- }
- else {
- exit 0;
- }
+ showstats($action);
+ exitstats();
}
# Finally, some useful actions that mr knows about by default.
}
# Finally, some useful actions that mr knows about by default.
help =
case `uname -s` in
SunOS)
help =
case `uname -s` in
SunOS)
- SHOWMANFILE="/usr/bin/ man -f"
- SHOWMANFILE="/usr/bin/ man"
- SHOWMANFILE="/usr/bin/ man -l"
;;
esac
if [ ! -e "$MR_PATH" ]; then
;;
esac
if [ ! -e "$MR_PATH" ]; then