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);