X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/f2cabdb155025f5441df135c91e39abf1c4c3756..3e16fd0f80a12b3c74ae25a28fc4e2e5eca011b4:/mr diff --git a/mr b/mr index f7509c9..4fe0c61 100755 --- a/mr +++ b/mr @@ -115,9 +115,6 @@ specified, the current directory will be used. If the .mrconfig file includes a repository named ".", that is checked out into the top of the specified directory. -To bootstrap from a SSL url with an untrusted certificate, you may -need to specify the -k option. - =item list (or ls) List the repositories that mr will act on. @@ -275,7 +272,7 @@ Use with caution. =back -=head1 "MRCONFIG FILES" +=head1 MRCONFIG FILES Here is an example .mrconfig file: @@ -392,7 +389,7 @@ due to being offline. You can delete or edit this file to remove commands, or even to add other commands for 'mr online' to run. If the file is present, mr assumes it is in offline mode. -=head1 "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 @@ -790,6 +787,15 @@ sub repolist { } @list; } +sub repodir { + my $repo=shift; + my $topdir=$repo->{topdir}; + my $subdir=$repo->{subdir}; + my $ret=($subdir =~/^\//) ? $subdir : $topdir.$subdir; + $ret=~s/\/\.$//; + return $ret; +} + # figure out which repos to act on sub selectrepos { my @repos; @@ -798,7 +804,7 @@ sub selectrepos { my $subdir=$repo->{subdir}; next if $subdir eq 'DEFAULT'; - my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir; + my $dir=repodir($repo); my $d=$directory; $dir.="/" unless $dir=~/\/$/; $d.="/" unless $d=~/\/$/; @@ -818,7 +824,7 @@ sub selectrepos { my $subdir=$repo->{subdir}; next if $subdir eq 'DEFAULT'; - my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir; + my $dir=repodir($repo); my $d=$directory; $dir.="/" unless $dir=~/\/$/; $d.="/" unless $d=~/\/$/; @@ -1031,6 +1037,12 @@ sub loadconfig { } } $section=expandenv($section) if $trusted; + if ($section ne 'ALIAS' && + ! exists $config{$dir}{$section} && + exists $config{$dir}{DEFAULT}) { + # copy in defaults + $config{$dir}{$section}={ %{$config{$dir}{DEFAULT}} }; + } } elsif (/^(\w+)\s*=\s*(.*)/) { my $parameter=$1; @@ -1067,12 +1079,6 @@ sub loadconfig { if (! defined $section) { die "$f line $.: parameter ($parameter) not in section\n"; } - if ($section ne 'ALIAS' && - ! exists $config{$dir}{$section} && - exists $config{$dir}{DEFAULT}) { - # copy in defaults - $config{$dir}{$section}={ %{$config{$dir}{DEFAULT}} }; - } if ($section eq 'ALIAS') { $alias{$parameter}=$value; } @@ -1353,7 +1359,7 @@ sub bootstrap { eval q{use File::Temp}; die $@ if $@; my $tmpconfig=File::Temp->new(); - my @curlargs = ("curl", "-A", "mr", "-s", $url, "-o", $tmpconfig); + my @curlargs = ("curl", "-A", "mr", "-L", "-s", $url, "-o", $tmpconfig); push(@curlargs, "-k") if $insecure; my $curlstatus = system(@curlargs); die "mr bootstrap: invalid SSL certificate for $url (consider -k)\n" if $curlstatus >> 8 == 60; @@ -1436,7 +1442,7 @@ sub getopts { "v|verbose" => \$verbose, "q|quiet" => \$quiet, "s|stats" => \$stats, - "k|insecure" => \$insecure, + "k|insecure" => \$insecure, "i|interactive" => \$interactive, "n|no-recurse:i" => \$max_depth, "j|jobs:i" => \$jobs, @@ -1541,10 +1547,10 @@ lib = fi delta=`perl -wle 'print -f shift() ? int((-M _) * 24) : 9999' "$flagfile"` if [ "$delta" -lt "$2" ]; then - exit 0 + return 1 else touch "$flagfile" - exit 1 + return 0 fi }