X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/29fed14147b460b1c873afc005ecc99698c97caf..8fcd326aac78ce67b3b9ffc43f726c01e1cfe52b:/mr?ds=sidebyside

diff --git a/mr b/mr
index abfbfaa..1f01803 100755
--- a/mr
+++ b/mr
@@ -219,6 +219,12 @@ Be verbose.
 
 Be quiet.
 
+=item -k
+
+=item --insecure
+
+Accept untrusted SSL certificates when bootstrapping.
+
 =item -s
 
 =item --stats
@@ -433,6 +439,7 @@ my $config_overridden=0;
 my $verbose=0;
 my $quiet=0;
 my $stats=0;
+my $insecure=0;
 my $interactive=0;
 my $max_depth;
 my $no_chdir=0;
@@ -780,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;
@@ -788,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=~/\/$/;
@@ -808,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=~/\/$/;
@@ -1021,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;
@@ -1057,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;
 			}
@@ -1343,9 +1359,11 @@ sub bootstrap {
 	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);
@@ -1369,7 +1387,8 @@ sub bootstrap {
 		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");
@@ -1423,6 +1442,7 @@ sub getopts {
 		"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,
@@ -1527,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
 	}