mirror of
git://git.code.sf.net/p/xtables-addons/xtables-addons
synced 2025-09-06 04:35:12 +02:00
84 lines
1.4 KiB
Perl
Executable File
84 lines
1.4 KiB
Perl
Executable File
#!/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, "<sources");
|
|
while (defined($_ = <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;
|
|
}
|