X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=utils%2Fcreate-package-feed.pl;h=aff89ed3e9b55f0cac97030b2eb1fefc3aa235cb;hp=22fb11058c13222581ed7e9473892f2b0936c0f6;hb=88647d49d4fe80ff540e6d91bd61adb4b95d0654;hpb=4a5e7f016a245c7c54f16ba12f7a3490daaeaf22
diff --git a/utils/create-package-feed.pl b/utils/create-package-feed.pl
index 22fb1105..aff89ed3 100644
--- a/utils/create-package-feed.pl
+++ b/utils/create-package-feed.pl
@@ -2,15 +2,18 @@
#< LICENSE: WTFPL >
use warnings;
use strict;
-use Digest::SHA1;
+use Digest::SHA;
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
#< Config START >
-my $scan_dir = '/xxxxxxxxxxxxxxxxxxxxxx/sf-download/';
+my $scan_dir = shift(@ARGV)
+ or die "Local package directory not specified (first argument)\n";
+my $save_rss_file = shift(@ARGV)
+ or die "RSS output file path not specified (second argument)\n";
my $base_dlurl = 'https://www.privoxy.org/sf-download-mirror/';
-my $save_rss_file ='/xxxxxxxxxxxxxxxxxxxxxx/release.xml'; # e.g., release.rss
my $maxlimit = 1000;
+my $max_advertised_files = 100;
#< Config END >
@@ -26,7 +29,7 @@ my $wday;
my $yday;
my $isdst;
my $target;
-my $target_sha1;
+my $target_sha256;
my $target_uri;
my $target_time;
my $target_line;
@@ -34,34 +37,37 @@ my $target_line;
#
# 1st & 2nd directory should NOT contain ANY 'FILES'. (expecting only 'Directory')
#
-opendir(D1, $scan_dir) or die "Can't open 1st directory! /";
-while (my $fi1 = readdir(D1)) {
+opendir(my $D1, $scan_dir) or die "Can't open 1st directory! /";
+while (my $fi1 = readdir($D1)) {
next if ($fi1 =~ m/^\./);
next if ($fi1 eq 'OldFiles' or $fi1 eq 'pkgsrc');
- opendir(D2, $scan_dir . $fi1 . '/')
+ opendir(my $D2, $scan_dir . $fi1 . '/')
or die "Can't open 2nd directory! /$fi1";
- while (my $fi2 = readdir(D2)) {
+ while (my $fi2 = readdir($D2)) {
next if ($fi2 =~ m/^\./);
## start listing /OS/Version/FILE
- opendir(D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
+ opendir(my $D3, $scan_dir . $fi1 . '/' . $fi2 . '/')
or die "Can't open 3rd directory! /$fi1/$fi2";
- while (my $fi3 = readdir(D3)) {
+ while (my $fi3 = readdir($D3)) {
next if ($fi3 =~ m/^\./);
$target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3;
next if (!-e $target); # skip if file is not exist
- # Get SHA-1 hash
+ # Get SHA-256 hash
my $filedata;
- unless (open $filedata, $target) { next; }
- my $sha1 = Digest::SHA1->new;
- $sha1->addfile($filedata);
- close $filedata;
- $target_sha1 = $sha1->hexdigest;
+ open($filedata, "<", $target)
+ or die "Can't open '$target' to generate checksum $!";
+ my $sha256 = Digest::SHA->new("SHA-256");
+ $sha256->addfile($filedata);
+ close($filedata);
+ $target_sha256 = $sha256->hexdigest;
# URI and Time
$target_uri = $fi1 . '/' . $fi2 . '/' . $fi3;
+ my $escaped_target_uri = $target_uri;
+ $escaped_target_uri =~ s@ @%20@g;
$target_time = (stat $target)[9];
# RSS line
@@ -70,57 +76,68 @@ while (my $fi1 = readdir(D1)) {
$target_line .=
'';
$target_line .=
''
. $base_dlurl
- . $target_uri
+ . $escaped_target_uri
. ''
. $base_dlurl
- . $target_uri
+ . $escaped_target_uri
. '';
$target_line .= '';
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
gmtime($target_time);
- $target_line .=
- "$days[$wday], $mday $months[$mon] "
- . ($year + 1900)
- . " $hour:$min:$sec GMT";
+ $target_line .= sprintf("%s, %s %s %d %.2d:%.2d:%.2d GMT",
+ $days[$wday], $mday, $months[$mon], ($year + 1900),
+ $hour, $min, $sec);
$target_line .= '';
+ $target_line .= "\n";
# Add it to Array
$Array[$i] = ([$target_time, $target_line]);
$i++;
die "maxlimit $maxlimit reached!" unless ($i < $maxlimit);
}
- closedir D3;
+ closedir($D3);
## end listing /OS/Version/FILE
}
- closedir D2;
+ closedir($D2);
}
-closedir D1;
+closedir($D1);
# Result = Full XML Codes
my $result =
- 'Privoxy Releaseshttps://www.privoxy.org/announce.txt';
+ '
+
+
+ Privoxy Releases
+ https://www.privoxy.org/announce.txt
+
+ ';
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime();
$result .=
"$days[$wday], $mday $months[$mon] "
. ($year + 1900)
. " $hour:$min:$sec GMT";
$result .= '';
+$result .= "\n";
# Sort Array
my @resArray = sort { @$a[0] <=> @$b[0] } @Array;
$i--;
-while ($i >= 0) { $result .= $resArray[$i][1]; $i--; }
-$result .= '';
+while ($max_advertised_files-- > 0 && $i >= 0) {
+ $result .= $resArray[$i][1];
+ $i--;
+}
+$result .= '
+ ';
# Save it.
-open(XMLF, "> $save_rss_file") or die "Failed to write XML file";
-print XMLF $result;
-close(XMLF);
+open(my $XMLF, ">", $save_rss_file) or die "Failed to write XML file";
+print $XMLF $result;
+close($XMLF);