Be quiet.
+=item -k
+
+=item --insecure
+
+Accept untrusted SSL certificates when bootstrapping.
+
=item -s
=item --stats
=back
-=head1 "MRCONFIG FILES"
+=head1 MRCONFIG FILES
Here is an example .mrconfig file:
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
+anything. This flexibility is good, but it also allows a malicious mrconfig
file to delete your whole home directory. Such a file might be contained
inside a repository that your main ~/.mrconfig checks out and chains to. To
avoid worries about evil commands in a mrconfig file, mr
=head1 AUTHOR
-Copyright 2007-2009 Joey Hess <joey@kitenet.net>
+Copyright 2007-2010 Joey Hess <joey@kitenet.net>
Licensed under the GNU GPL version 2 or higher.
my $verbose=0;
my $quiet=0;
my $stats=0;
+my $insecure=0;
my $interactive=0;
my $max_depth;
my $no_chdir=0;
} @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;
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=~/\/$/;
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=~/\/$/;
}
}
$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;
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;
}
eval q{use File::Temp};
die $@ if $@;
my $tmpconfig=File::Temp->new();
- if (system("curl", "-A", "mr", "-s", $url, "-o", $tmpconfig) != 0) {
- die "mr bootstrap: download of $url failed\n";
- }
+ 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;
+ die "mr bootstrap: download of $url failed\n" if $curlstatus != 0;
if (! -e $dir) {
system("mkdir", "-p", $dir);
move($tmpconfig, ".mrconfig") || die "rename: $!";
}
- # Load the config file and checkout everything else.
+ # Reload the config file (in case we got a different version)
+ # and checkout everything else.
startingconfig();
loadconfig(".mrconfig");
dispatch("checkout");
"v|verbose" => \$verbose,
"q|quiet" => \$quiet,
"s|stats" => \$stats,
+ "k|insecure" => \$insecure,
"i|interactive" => \$interactive,
"n|no-recurse:i" => \$max_depth,
"j|jobs:i" => \$jobs,
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
}
darcs_update = darcs pull -a "$@"
svn_status = svn status "$@"
-git_status = git status "$@" || true
-bzr_status = bzr status "$@"
+git_status = git status -s "$@" || true
+bzr_status = bzr status --short "$@"
cvs_status = cvs status "$@"
hg_status = hg status "$@"
darcs_status = darcs whatsnew -ls "$@" || true