pkg-repgen: change some function signatures
This commit is contained in:
parent
1697d4af31
commit
206657b510
|
@ -29,7 +29,7 @@ $compress =~ s/["' ]//g;
|
||||||
|
|
||||||
$prtget .= " --no-std-config --config-set=\"prtdir $prtdir\"" if ($prtdir);
|
$prtget .= " --no-std-config --config-set=\"prtdir $prtdir\"" if ($prtdir);
|
||||||
|
|
||||||
my @packages; my @dirlist; my %isDup;
|
my @packages; my %isDup;
|
||||||
|
|
||||||
sub pkg_mtime {
|
sub pkg_mtime {
|
||||||
my $aName = $a; my $bName = $b;
|
my $aName = $a; my $bName = $b;
|
||||||
|
@ -46,33 +46,35 @@ sub pkg_mtime {
|
||||||
else { return 1; }
|
else { return 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($#ARGV > 1) { # single packages
|
my $pkgdir = shift @ARGV; my $quickMode=0;
|
||||||
my ($pkgdir, @args) = @ARGV;
|
my @dirlist = ("$pkgdir") ? glob("$pkgdir/*.pkg.tar.$compress") : glob("*.pkg.tar.$compress");
|
||||||
chdir($pkgdir) or die "cannot chdir to $pkgdir!";
|
@dirlist = sort pkg_mtime @dirlist;
|
||||||
foreach my $name (sort @args) {
|
%isDup = map { $_ => 0 } @dirlist;
|
||||||
my @hits = glob("$name#*.pkg.tar.$compress");
|
|
||||||
|
if (@ARGV) { # individual packages
|
||||||
|
$quickMode=1;
|
||||||
|
my @updates = sort @ARGV;
|
||||||
|
while (my $name = shift @updates) {
|
||||||
|
my @hits = grep { m/$name#.*\.pkg/ } @dirlist;
|
||||||
push(@packages,@hits);
|
push(@packages,@hits);
|
||||||
}
|
}
|
||||||
} else { # one or zero arguments passed
|
} else { # the entire directory
|
||||||
($#ARGV == 0) or chdir($ARGV[0]) or die "cannot chdir to $ARGV[0]!";
|
@packages = @dirlist;
|
||||||
@dirlist = glob("*.pkg.tar.$compress");
|
|
||||||
@packages = sort pkg_mtime @dirlist;
|
|
||||||
%isDup = map { $_ => 0 } @packages;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# hashes to determine the package name ...
|
# hashes to determine the package name ...
|
||||||
our %pname = map { $_ => $_ } @packages;
|
our %pname = map { $_ => (split /\//, $_)[-1] } @dirlist;
|
||||||
foreach my $p (@packages) { $pname{$p} =~ s/\#.*//; }
|
foreach my $p (@dirlist) { $pname{$p} =~ s/\#.*//; }
|
||||||
|
|
||||||
# ... or to look up the successor when merging old metadata files
|
# ... or to look up the successor when merging old metadata files
|
||||||
my %followR; my %followH; my %followD; my @queue = @packages;
|
my %followR; my %followH; my %followD; my @queue = @dirlist;
|
||||||
while (my $q = shift @queue) {
|
while (my $q = shift @queue) {
|
||||||
($#queue < 0) or ($pname{$q} ne $pname{$queue[0]}) or $isDup{$q} = 1;
|
($#queue < 0) or ($pname{$q} ne $pname{$queue[0]}) or $isDup{$q} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Populate some other hashes using a single run of prt-get
|
# Populate some other hashes using a single run of prt-get
|
||||||
our %path; our %depends; our %descrip; our %flags;
|
our %path; our %depends; our %descrip; our %flags;
|
||||||
my @validkeys = @dirlist;
|
my @validkeys = map { (split /\//, $_)[-1] } @dirlist;
|
||||||
map { s/\#.*// } @validkeys;
|
map { s/\#.*// } @validkeys;
|
||||||
my %printme = map { $_ => 1 } @validkeys;
|
my %printme = map { $_ => 1 } @validkeys;
|
||||||
open (my $ppf, "$prtget printf '%n^%p^%e^%d^%E:%O:%R\n' |");
|
open (my $ppf, "$prtget printf '%n^%p^%e^%d^%E:%O:%R\n' |");
|
||||||
|
@ -92,7 +94,7 @@ close ($ppf);
|
||||||
my %parity = ( 0 => "even", 1 => "odd" );
|
my %parity = ( 0 => "even", 1 => "odd" );
|
||||||
|
|
||||||
# Generate the metadata files
|
# Generate the metadata files
|
||||||
($#ARGV >= 1) ? pkg_single() : pkg_dir();
|
($quickMode) ? pkg_single() : pkg_dir();
|
||||||
|
|
||||||
# Generate README and PKGINST
|
# Generate README and PKGINST
|
||||||
pkgreadscripts();
|
pkgreadscripts();
|
||||||
|
@ -103,14 +105,14 @@ sub pkg_single {
|
||||||
my $count = 0; # needed for the html index
|
my $count = 0; # needed for the html index
|
||||||
|
|
||||||
my %firstrun = map { $_ => 0 } ("PKGREPO", "PKGDEPS", "index.html");
|
my %firstrun = map { $_ => 0 } ("PKGREPO", "PKGDEPS", "index.html");
|
||||||
open ($oR, "PKGREPO") or $firstrun{"PKGREPO"} = 1;
|
open ($oR, "$pkgdir/PKGREPO") or $firstrun{"PKGREPO"} = 1;
|
||||||
open ($oD, "PKGDEPS") or $firstrun{"PKGDEPS"} = 1;
|
open ($oD, "$pkgdir/PKGDEPS") or $firstrun{"PKGDEPS"} = 1;
|
||||||
open ($oH, "index.html") or $firstrun{"index.html"} = 1;
|
open ($oH, "$pkgdir/index.html") or $firstrun{"index.html"} = 1;
|
||||||
open ($nR, ">PKGREPO.new");
|
open ($nR, ">$pkgdir/PKGREPO.new");
|
||||||
open ($nD, ">PKGDEPS.new");
|
open ($nD, ">$pkgdir/PKGDEPS.new");
|
||||||
|
|
||||||
printheader(1);
|
printheader(1);
|
||||||
open ($nH, ">>index.html.new");
|
open ($nH, ">>$pkgdir/index.html.new");
|
||||||
|
|
||||||
foreach my $mf ("repository", "dependency map", "html index") {
|
foreach my $mf ("repository", "dependency map", "html index") {
|
||||||
print "+ Updating specified entries in $mf\n";
|
print "+ Updating specified entries in $mf\n";
|
||||||
|
@ -119,8 +121,9 @@ sub pkg_single {
|
||||||
PACKAGE: while (my $p =shift @packages) {
|
PACKAGE: while (my $p =shift @packages) {
|
||||||
my ($pver, $url, $du, $md5, $desc, $ppr, $pdeps, $date) = metadata($p);
|
my ($pver, $url, $du, $md5, $desc, $ppr, $pdeps, $date) = metadata($p);
|
||||||
|
|
||||||
|
my $basename = (split /\//, $p)[-1];
|
||||||
($firstrun{"PKGREPO"}==0) or printf $nR "%-s:%-s:%-s:%-s:%-s\n",
|
($firstrun{"PKGREPO"}==0) or printf $nR "%-s:%-s:%-s:%-s:%-s\n",
|
||||||
$p, $du, $md5, $desc, $ppr;
|
$basename, $du, $md5, $desc, $ppr;
|
||||||
($firstrun{"PKGDEPS"}==0) or ($pdeps eq "") or ($isDup{$p})
|
($firstrun{"PKGDEPS"}==0) or ($pdeps eq "") or ($isDup{$p})
|
||||||
or printf $nD "%-30s : %-s\n", $pname{$p}, $pdeps;
|
or printf $nD "%-30s : %-s\n", $pname{$p}, $pdeps;
|
||||||
if ($firstrun{"index.html"} == 1) {
|
if ($firstrun{"index.html"} == 1) {
|
||||||
|
@ -133,13 +136,13 @@ sub pkg_single {
|
||||||
# that would come after the current package.
|
# that would come after the current package.
|
||||||
while ( ($firstrun{"PKGREPO"}==0) and $oline = <$oR> ) {
|
while ( ($firstrun{"PKGREPO"}==0) and $oline = <$oR> ) {
|
||||||
chomp($oline); $oname = $oline;
|
chomp($oline); $oname = $oline;
|
||||||
$oname =~ s/\#.*//;
|
$oname =~ s/#.*//;
|
||||||
print $nR "$oline\n" if ($oname lt $pname{$p});
|
print $nR "$oline\n" if ($oname lt $pname{$p});
|
||||||
|
|
||||||
# before breaking out of the loop, either overwrite the old
|
# before breaking out of the loop, either overwrite the old
|
||||||
# entry in the repository, or insert the requested package
|
# entry in the repository, or insert the requested package
|
||||||
# where it should appear.
|
# where it should appear.
|
||||||
printf $nR "%-s:%-s:%-s:%-s:%-s\n", $p, $du, $md5, $desc, $ppr
|
printf $nR "%-s:%-s:%-s:%-s:%-s\n", $basename, $du, $md5, $desc, $ppr
|
||||||
if ($oname ge $pname{$p});
|
if ($oname ge $pname{$p});
|
||||||
|
|
||||||
# save what got popped from the repository, in case of dups
|
# save what got popped from the repository, in case of dups
|
||||||
|
@ -151,7 +154,7 @@ sub pkg_single {
|
||||||
|
|
||||||
# if the current package comes after everything in the old repository,
|
# if the current package comes after everything in the old repository,
|
||||||
# just append its metadata
|
# just append its metadata
|
||||||
($followR{$pname{$p}}) or printf $nR "%-s:%-s:%-s:%-s:%-s\n", $p, $du, $md5, $desc, $ppr;
|
($followR{$pname{$p}}) or printf $nR "%-s:%-s:%-s:%-s:%-s\n", $basename, $du, $md5, $desc, $ppr;
|
||||||
|
|
||||||
# Likewise for the html index
|
# Likewise for the html index
|
||||||
while ( ($firstrun{"index.html"}==0) and $oline=<$oH> ) {
|
while ( ($firstrun{"index.html"}==0) and $oline=<$oH> ) {
|
||||||
|
@ -159,35 +162,30 @@ sub pkg_single {
|
||||||
# no need to copy the header, it should already be there
|
# no need to copy the header, it should already be there
|
||||||
next if ($oline !~ m/^<tr class="(odd|even)"/);
|
next if ($oline !~ m/^<tr class="(odd|even)"/);
|
||||||
|
|
||||||
$count++;
|
|
||||||
$oname = $oline;
|
$oname = $oline;
|
||||||
$oname =~ s/.*a href="(.*)"/$1/;
|
$oname =~ s/.*a href="(.*)"/$1/;
|
||||||
$oname =~ s/\%23.*//;
|
$oname =~ s/\%23.*//;
|
||||||
|
|
||||||
print $nH "$oline\n" if ($oname lt $pname{$p});
|
if ($oname lt $pname{$p}) {
|
||||||
htmlrow($nH,$count,$pname{$p},$url,
|
print $nH "$oline\n";
|
||||||
$pver,$desc,$date) if ($oname ge $pname{$p});
|
} elsif ($oname eq $pname{$p}) {
|
||||||
$followH{$pname{$p}} = $oline if ($oname gt $pname{$p});
|
$count++;
|
||||||
|
htmlrow($nH,$count,$pname{$p},$url, $pver,$desc,$date);
|
||||||
|
} else {
|
||||||
|
$followH{$pname{$p}} = $oline;
|
||||||
|
}
|
||||||
last if ($oname ge $pname{$p});
|
last if ($oname ge $pname{$p});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $followH{$pname{$p}}) {
|
|
||||||
$count++;
|
|
||||||
htmlrow($nH,$count,$pname{$p},$url,$pver,$desc,$date);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Likewise for the dependency map, but avoid creating duplicate entries
|
# Likewise for the dependency map, but avoid creating duplicate entries
|
||||||
while ( ($firstrun{"PKGDEPS"}==0) and $oline = <$oD> ) {
|
while ( ($firstrun{"PKGDEPS"}==0) and $oline = <$oD> ) {
|
||||||
chomp($oline); $oname = $oline;
|
chomp($oline); $oname = $oline;
|
||||||
$oname =~ s/\s*\:.*//;
|
$oname =~ s/\s*\:.*//;
|
||||||
if ($oname lt $pname{$p}) {
|
if ($oname lt $pname{$p}) {
|
||||||
print $nD "$oline\n";
|
print $nD "$oline\n";
|
||||||
} elsif ( ($pdeps ne "") and (! $isDup{$p}) ) {
|
} else {
|
||||||
printf $nD "%-30s : %-s\n", $pname{$p}, $pdeps;
|
printf $nD "%-30s : %-s\n", $pname{$p}, $pdeps;
|
||||||
}
|
$followD{$pname{$p}} = $oline if ($oname gt $pname{$p});
|
||||||
if ($oname gt $pname{$p}) {
|
|
||||||
$followD{$pname{$p}} = $oline;
|
|
||||||
print $nD "$oline\n";
|
|
||||||
}
|
}
|
||||||
last if ($oname ge $pname{$p});
|
last if ($oname ge $pname{$p});
|
||||||
}
|
}
|
||||||
|
@ -226,24 +224,25 @@ sub pkg_single {
|
||||||
($firstrun{"PKGDEPS"}==1) or close($oD);
|
($firstrun{"PKGDEPS"}==1) or close($oD);
|
||||||
($firstrun{"index.html"}==1) or close($oH);
|
($firstrun{"index.html"}==1) or close($oH);
|
||||||
|
|
||||||
foreach my $db (keys %firstrun) { rename("$db.new", "$db"); }
|
foreach my $db (keys %firstrun) { rename("$pkgdir/$db.new", "$pkgdir/$db"); }
|
||||||
printfooter($count) if ($firstrun{"index.html"} == 1);
|
printfooter($count) if ($firstrun{"index.html"} == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
######################## full repository ########################
|
######################## full repository ########################
|
||||||
sub pkg_dir {
|
sub pkg_dir {
|
||||||
print "+ Generating dependencies\n";
|
print "+ Generating dependencies\n";
|
||||||
open (my $iD, ">PKGDEPS");
|
open (my $iD, ">$pkgdir/PKGDEPS");
|
||||||
print "+ Generating repository\n";
|
print "+ Generating repository\n";
|
||||||
open (my $iR, ">PKGREPO");
|
open (my $iR, ">$pkgdir/PKGREPO");
|
||||||
printheader(0);
|
printheader(0);
|
||||||
my $count = 0;
|
my $count = 0;
|
||||||
open (my $ih, '>>index.html');
|
open (my $ih, ">>$pkgdir/index.html");
|
||||||
foreach my $p (@packages) {
|
foreach my $p (@packages) {
|
||||||
my ($pver, $url, $du, $md5, $desc, $ppr, $pdeps, $date) = metadata($p);
|
my ($pver, $url, $du, $md5, $desc, $ppr, $pdeps, $date) = metadata($p);
|
||||||
($pdeps eq "") or ($isDup{$p})
|
($pdeps eq "") or ($isDup{$p})
|
||||||
or printf $iD "%-30s : %-s\n", $pname{$p}, $pdeps;
|
or printf $iD "%-30s : %-s\n", $pname{$p}, $pdeps;
|
||||||
printf $iR "%-s:%-s:%-s:%-s:%-s\n", $p,$du,$md5,$desc,$ppr;
|
my $basename = (split /\//, $p)[-1];
|
||||||
|
printf $iR "%-s:%-s:%-s:%-s:%-s\n", $basename,$du,$md5,$desc,$ppr;
|
||||||
$count++;
|
$count++;
|
||||||
htmlrow($ih,$count,$pname{$p},$url,$pver,$desc,$date);
|
htmlrow($ih,$count,$pname{$p},$url,$pver,$desc,$date);
|
||||||
}
|
}
|
||||||
|
@ -256,11 +255,11 @@ sub pkg_dir {
|
||||||
# consolidate all the README and install scripts for the available packages
|
# consolidate all the README and install scripts for the available packages
|
||||||
sub pkgreadscripts {
|
sub pkgreadscripts {
|
||||||
print "+ Generating README\n";
|
print "+ Generating README\n";
|
||||||
open (my $fR, '>PKGREAD');
|
open (my $fR, ">$pkgdir/PKGREAD");
|
||||||
print $fR "# README files for repository. Do NOT remove this line.\n";
|
print $fR "# README files for repository. Do NOT remove this line.\n";
|
||||||
|
|
||||||
print "+ Generating scripts\n";
|
print "+ Generating scripts\n";
|
||||||
open (my $fS, '>PKGINST');
|
open (my $fS, ">$pkgdir/PKGINST");
|
||||||
print $fS '#!/usr/bin/env bash
|
print $fS '#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# PKGINST: pre- and post-install scripts for CRUX packages
|
# PKGINST: pre- and post-install scripts for CRUX packages
|
||||||
|
@ -271,7 +270,8 @@ run_script() {
|
||||||
|
|
||||||
my %seen;
|
my %seen;
|
||||||
foreach my $name (@dirlist) {
|
foreach my $name (@dirlist) {
|
||||||
$name =~ s/\#.*//; next if ($seen{$name});
|
$name =~ s/\#.*//; $name = (split /\//, $name)[-1];
|
||||||
|
next if ($seen{$name});
|
||||||
$seen{$name} = 1;
|
$seen{$name} = 1;
|
||||||
next if (! $path{$name});
|
next if (! $path{$name});
|
||||||
if (-f "$path{$name}/README"){
|
if (-f "$path{$name}/README"){
|
||||||
|
@ -304,7 +304,7 @@ run_script() {
|
||||||
|
|
||||||
sub printheader {
|
sub printheader {
|
||||||
my $isTemp = shift; my $ih;
|
my $isTemp = shift; my $ih;
|
||||||
($isTemp == 0) ? open ($ih, '>index.html') : open ($ih, '>index.html.new');
|
($isTemp == 0) ? open ($ih, ">$pkgdir/index.html") : open ($ih, ">$pkgdir/index.html.new");
|
||||||
print $ih <<EOH;
|
print $ih <<EOH;
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
|
@ -376,7 +376,7 @@ sub htmlrow {
|
||||||
|
|
||||||
sub printfooter {
|
sub printfooter {
|
||||||
my $count = shift;
|
my $count = shift;
|
||||||
open (my $ih, '>>index.html');
|
open (my $ih, ">>$pkgdir/index.html");
|
||||||
print $ih " </table>\n";
|
print $ih " </table>\n";
|
||||||
print $ih " <p><b>$count packages</b></p>\n";
|
print $ih " <p><b>$count packages</b></p>\n";
|
||||||
if ($footer) {
|
if ($footer) {
|
||||||
|
@ -396,7 +396,7 @@ sub metadata {
|
||||||
my $p = shift;
|
my $p = shift;
|
||||||
my ($pver, $url) = ($p, $p);
|
my ($pver, $url) = ($p, $p);
|
||||||
$pver =~ s/.*\#//; $pver =~ s/\.pkg\.tar.*//;
|
$pver =~ s/.*\#//; $pver =~ s/\.pkg\.tar.*//;
|
||||||
$url =~ s/\#/\%23/;
|
$url =~ s/\#/\%23/; while ($url =~ s/.*\///) {};
|
||||||
my $du = (-s $p);
|
my $du = (-s $p);
|
||||||
my $md5 = digest_file_hex($p,"MD5");
|
my $md5 = digest_file_hex($p,"MD5");
|
||||||
my $desc = (! $descrip{$pname{$p}}) ? "N.A." : $descrip{$pname{$p}};
|
my $desc = (! $descrip{$pname{$p}}) ? "N.A." : $descrip{$pname{$p}};
|
||||||
|
|
Loading…
Reference in New Issue