#!/usr/bin/perl -w use HTTP::Request; use LWP::UserAgent; use strict; &main(\@ARGV); sub main ($) { local *FH; if (!-d "downloads") { if (!mkdir("downloads")) { die "Could not create downloads/ directory"; } } open(FH, ")) { chomp $_; $_ =~ s/#.*//gs; $_ =~ s/^\s+|\s+$//gs; if (length($_) == 0) { next; } &process_index($_); } close FH; } sub process_index ($) { my $top = shift @_; my($agent, $res, $url); local *FH; $agent = LWP::UserAgent->new(); $agent->env_proxy(); $url = &slash_remove("$top/xa-index.txt"); print " GET $url\n"; $res = $agent->get($url); if (!$res->is_success()) { print STDERR " `-> ", $res->status_line(), "\n"; return; } foreach my $ext (split(/\s+/, $res->content())) { my($ex_url, $ex_res); $ex_url = &slash_remove("$top/$ext"); print " GET $ex_url\n"; $ex_res = $agent->mirror($ex_url, "downloads/$ext"); if ($ex_res->code() == 304) { # "Not modified" = up to date next; } if (!$ex_res->is_success()) { print STDERR " `-> ", $ex_res->status_line(), "\n"; next; } print " UNPACK downloads/$ext\n"; system "tar", "-xjf", "downloads/$ext"; } } sub slash_remove ($) { my $s = shift @_; $s =~ s{(\w+://)(.*)}{$1.&slash_remove2($2)}eg; return $s; } sub slash_remove2 ($) { my $s = shift @_; $s =~ s{/+}{/}g; return $s; }