X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/19b4e0426d12b36770810e502be86ff2ec1aa6f0..4b6f84321972510b5422bb80ef2f2d81f4b33a4c:/mr?ds=sidebyside diff --git a/mr b/mr index b606736..dba54cc 100755 --- a/mr +++ b/mr @@ -152,6 +152,11 @@ C. You can retrieve the config file by other means and pass its B as C. +=item standard input + +If source C consists in a single dash C<->, config file is read from +standard input. + =back The directory will be created if it does not exist. If no directory is @@ -1240,7 +1245,7 @@ my %loaded; sub loadconfig { my $f=shift; my $dir=shift; - my $bootstrap_url=shift; + my $bootstrap_src=shift; my @toload; @@ -1328,8 +1333,8 @@ sub loadconfig { my $trusterror = sub { my $msg=shift; - if (defined $bootstrap_url) { - die "mr: $msg in untrusted $bootstrap_url line $lineno\n". + if (defined $bootstrap_src) { + die "mr: $msg in untrusted $bootstrap_src line $lineno\n". "(To trust this url, --trust-all can be used; but please use caution;\n". "this can allow arbitrary code execution!)\n"; } @@ -1689,10 +1694,10 @@ sub bootstrap { eval q{use File::Copy}; die $@ if $@; - my $url=shift @ARGV; + my $src=shift @ARGV; my $dir=shift @ARGV || "."; - if (! defined $url || ! length $url) { + if (! defined $src || ! length $src) { die "mr: bootstrap requires source\n"; } @@ -1700,26 +1705,30 @@ sub bootstrap { eval q{use File::Temp}; die $@ if $@; my $tmpconfig=File::Temp->new(); - if ($url =~ m!^[\w\d]+://!) { + if ($src =~ m!^[\w\d]+://!) { # Download the config file to a temporary location. my @downloader; - if ($url =~ m!^ssh://(.*)!) { + if ($src =~ m!^ssh://(.*)!) { @downloader = ("scp", $1, $tmpconfig); } else { - @downloader = ("curl", "-A", "mr", "-L", "-s", $url, "-o", $tmpconfig); + @downloader = ("curl", "-A", "mr", "-L", "-s", $src, "-o", $tmpconfig); push(@downloader, "-k") if $insecure; } my $status = system(@downloader); - die "mr bootstrap: invalid SSL certificate for $url (consider -k)\n" + die "mr bootstrap: invalid SSL certificate for $src (consider -k)\n" if $downloader[0] eq 'curl' && $status >> 8 == 60; - die "mr bootstrap: download of $url failed\n" if $status != 0; + die "mr bootstrap: download of $src failed\n" if $status != 0; + } + elsif ($src eq '-') { + # Config file is read from stdin. + copy(\*STDIN, $tmpconfig) || die "stdin: $!"; } else { # Config file is local. - die "mr bootstrap: cannot read file '$url'" - unless -r $url; - copy($url, $tmpconfig) || die "copy: $!"; + die "mr bootstrap: cannot read file '$src'" + unless -r $src; + copy($src, $tmpconfig) || die "copy: $!"; } # Sanity check on destination directory. @@ -1732,12 +1741,12 @@ sub bootstrap { # would normally be skipped. my $topdir=abs_path(".")."/"; my @repo=($topdir, $topdir, "."); - loadconfig($tmpconfig, $topdir, $url); + loadconfig($tmpconfig, $topdir, $src); record(\@repo, action("checkout", @repo, 1)) if exists $config{$topdir}{"."}{"checkout"}; if (-e ".mrconfig") { - print STDERR "mr bootstrap: .mrconfig file already exists, not overwriting with $url\n"; + print STDERR "mr bootstrap: .mrconfig file already exists, not overwriting with $src\n"; } else { move($tmpconfig, ".mrconfig") || die "rename: $!";