X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/60545177be81428ab485ff3bc1eb93895194c683..43e4e88d09d24f71414b966ecc4c534beb94a0ce:/webcheckout
diff --git a/webcheckout b/webcheckout
index 6df790d..47b3bb4 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
@@ -75,7 +75,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;
@@ -182,15 +182,38 @@ sub parse {
my @ret;
my $parser=HTML::Parser->new(api_version => 3);
+ my $abody=undef;
+ my $aref=undef;
$parser->handler(start => sub {
my $tagname=shift;
my $attr=shift;
- return if lc $tagname ne 'link';
- 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}) {
+ $abody="";
+ $aref=$attr;
+ }
+
push @ret, $attr;
}, "tagname, attr");
+ $parser->handler(text => sub {
+ if (defined $aref) {
+ $abody.=join(" ", @_);
+ }
+ }, "text");
+ $parser->handler(end => sub {
+ my $tagname=shift;
+ if ($tagname eq "a" && defined $aref) {
+ $aref->{title}=$abody;
+ $aref=undef;
+ $abody=undef;
+ }
+ }, "tagname");
+ $parser->report_tags(qw{link a});
$parser->parse($page);
$parser->eof;
@@ -209,6 +232,10 @@ if (! @repos) {
die "no repositories found on $url\n";
}
+#use Data::Dumper;
+#print Dumper(\@repos);
+#exit;
+
if (defined $destdir && @repos > 1) {
# create subdirs of $destdir for the multiple repos
if (! $noact) {
@@ -234,6 +261,3 @@ foreach my $repo (@repos) {
}
}
exit($errors > 0);
-
-#use Data::Dumper;
-#print Dumper(\@repos);