X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/d8426f37c88c5d980aa93855e40b50c97c282590..refs/heads/deploy:/webcheckout?ds=sidebyside diff --git a/webcheckout b/webcheckout index a6ae94f..e48d9de 100755 --- a/webcheckout +++ b/webcheckout @@ -16,7 +16,7 @@ a subdirectory of the current directory, using whatever VCS program is appropriate for that repository (git, svn, etc). The information about the repositories is embedded in the web page using -the rel=vcs microformat, which is documented at +the rel=vcs-* microformat, which is documented at . If the optional destdir parameter is specified, VCS programs will be asked @@ -35,25 +35,33 @@ anonymous repositories when possible. If you have an account that allows you to use authenticated repositories, you might want to use this option. -=item -n +=item --no-act, -n Do not actually check anything out, just print out the commands that would be run to check out the repositories. -=item -q +=item --quiet, -q Quiet mode. Do not print out the commands being run. (The VCS commands may still be noisy however.) =back +=head1 PREREQUISITES + +To use this program you will need lots of VCS programs installed, +obviously. It also depends on the perl LWP and HTML::Parser modules. + +If the perl URI module is installed, webcheckout can heuristically guess +what you mean by partial URLs, such as "kitenet.net/~joey"' + =head1 AUTHOR Copyright 2009 Joey Hess Licensed under the GNU GPL version 2 or higher. -This program is included in mr +This program is included in myrepos =cut @@ -75,7 +83,7 @@ my $noact=0; # Controls whether to perfer repos that use authentication. my $want_auth=0; -# Controls where to check out to. If not set, the vcs is allowed to +# Controls where to check out to. If not set, the VCS is allowed to # decide. my $destdir; @@ -111,6 +119,11 @@ sub getopts { $url=shift @ARGV; $destdir=shift @ARGV; + eval q{use URI::Heuristic}; + if (! $@) { + $url=URI::Heuristic::uf_uristr($url); + } + if ($noact) { $quiet=0; } @@ -187,9 +200,10 @@ sub parse { $parser->handler(start => sub { my $tagname=shift; my $attr=shift; - return if ! exists $attr->{rel} || lc $attr->{rel} ne 'vcs'; + return if ! exists $attr->{href} || ! length $attr->{href}; - return if ! exists $attr->{type} || ! length $attr->{type}; + return if ! exists $attr->{rel} || $attr->{rel} !~ /^vcs-(.+)/i; + $attr->{type}=lc($1); # need to collect the body of the tag if there is no title if ($tagname eq "a" && ! exists $attr->{title}) {