From 206657b510468784afe65c00cd79b72bc9a1827c Mon Sep 17 00:00:00 2001 From: John McQuah Date: Mon, 18 Sep 2023 20:46:14 +0000 Subject: [PATCH] pkg-repgen: change some function signatures --- scripts/pkg-repgen.pl | 104 +++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/scripts/pkg-repgen.pl b/scripts/pkg-repgen.pl index 9ccb959..605b90c 100755 --- a/scripts/pkg-repgen.pl +++ b/scripts/pkg-repgen.pl @@ -29,7 +29,7 @@ $compress =~ s/["' ]//g; $prtget .= " --no-std-config --config-set=\"prtdir $prtdir\"" if ($prtdir); -my @packages; my @dirlist; my %isDup; +my @packages; my %isDup; sub pkg_mtime { my $aName = $a; my $bName = $b; @@ -46,33 +46,35 @@ sub pkg_mtime { else { return 1; } } -if ($#ARGV > 1) { # single packages - my ($pkgdir, @args) = @ARGV; - chdir($pkgdir) or die "cannot chdir to $pkgdir!"; - foreach my $name (sort @args) { - my @hits = glob("$name#*.pkg.tar.$compress"); +my $pkgdir = shift @ARGV; my $quickMode=0; +my @dirlist = ("$pkgdir") ? glob("$pkgdir/*.pkg.tar.$compress") : glob("*.pkg.tar.$compress"); +@dirlist = sort pkg_mtime @dirlist; +%isDup = map { $_ => 0 } @dirlist; + +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); } -} else { # one or zero arguments passed - ($#ARGV == 0) or chdir($ARGV[0]) or die "cannot chdir to $ARGV[0]!"; - @dirlist = glob("*.pkg.tar.$compress"); - @packages = sort pkg_mtime @dirlist; - %isDup = map { $_ => 0 } @packages; +} else { # the entire directory + @packages = @dirlist; } # hashes to determine the package name ... -our %pname = map { $_ => $_ } @packages; -foreach my $p (@packages) { $pname{$p} =~ s/\#.*//; } +our %pname = map { $_ => (split /\//, $_)[-1] } @dirlist; +foreach my $p (@dirlist) { $pname{$p} =~ s/\#.*//; } # ... 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) { ($#queue < 0) or ($pname{$q} ne $pname{$queue[0]}) or $isDup{$q} = 1; } # Populate some other hashes using a single run of prt-get our %path; our %depends; our %descrip; our %flags; -my @validkeys = @dirlist; +my @validkeys = map { (split /\//, $_)[-1] } @dirlist; map { s/\#.*// } @validkeys; my %printme = map { $_ => 1 } @validkeys; 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" ); # Generate the metadata files -($#ARGV >= 1) ? pkg_single() : pkg_dir(); +($quickMode) ? pkg_single() : pkg_dir(); # Generate README and PKGINST pkgreadscripts(); @@ -103,14 +105,14 @@ sub pkg_single { my $count = 0; # needed for the html index my %firstrun = map { $_ => 0 } ("PKGREPO", "PKGDEPS", "index.html"); - open ($oR, "PKGREPO") or $firstrun{"PKGREPO"} = 1; - open ($oD, "PKGDEPS") or $firstrun{"PKGDEPS"} = 1; - open ($oH, "index.html") or $firstrun{"index.html"} = 1; - open ($nR, ">PKGREPO.new"); - open ($nD, ">PKGDEPS.new"); + open ($oR, "$pkgdir/PKGREPO") or $firstrun{"PKGREPO"} = 1; + open ($oD, "$pkgdir/PKGDEPS") or $firstrun{"PKGDEPS"} = 1; + open ($oH, "$pkgdir/index.html") or $firstrun{"index.html"} = 1; + open ($nR, ">$pkgdir/PKGREPO.new"); + open ($nD, ">$pkgdir/PKGDEPS.new"); printheader(1); - open ($nH, ">>index.html.new"); + open ($nH, ">>$pkgdir/index.html.new"); foreach my $mf ("repository", "dependency map", "html index") { print "+ Updating specified entries in $mf\n"; @@ -119,8 +121,9 @@ sub pkg_single { PACKAGE: while (my $p =shift @packages) { 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", - $p, $du, $md5, $desc, $ppr; + $basename, $du, $md5, $desc, $ppr; ($firstrun{"PKGDEPS"}==0) or ($pdeps eq "") or ($isDup{$p}) or printf $nD "%-30s : %-s\n", $pname{$p}, $pdeps; if ($firstrun{"index.html"} == 1) { @@ -133,13 +136,13 @@ sub pkg_single { # that would come after the current package. while ( ($firstrun{"PKGREPO"}==0) and $oline = <$oR> ) { chomp($oline); $oname = $oline; - $oname =~ s/\#.*//; + $oname =~ s/#.*//; print $nR "$oline\n" if ($oname lt $pname{$p}); # before breaking out of the loop, either overwrite the old # entry in the repository, or insert the requested package # 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}); # 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, # 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 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 next if ($oline !~ m/^ ) { chomp($oline); $oname = $oline; $oname =~ s/\s*\:.*//; if ($oname lt $pname{$p}) { print $nD "$oline\n"; - } elsif ( ($pdeps ne "") and (! $isDup{$p}) ) { + } else { printf $nD "%-30s : %-s\n", $pname{$p}, $pdeps; - } - if ($oname gt $pname{$p}) { - $followD{$pname{$p}} = $oline; - print $nD "$oline\n"; + $followD{$pname{$p}} = $oline if ($oname gt $pname{$p}); } last if ($oname ge $pname{$p}); } @@ -226,24 +224,25 @@ sub pkg_single { ($firstrun{"PKGDEPS"}==1) or close($oD); ($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); } ######################## full repository ######################## sub pkg_dir { print "+ Generating dependencies\n"; - open (my $iD, ">PKGDEPS"); + open (my $iD, ">$pkgdir/PKGDEPS"); print "+ Generating repository\n"; - open (my $iR, ">PKGREPO"); + open (my $iR, ">$pkgdir/PKGREPO"); printheader(0); my $count = 0; - open (my $ih, '>>index.html'); + open (my $ih, ">>$pkgdir/index.html"); foreach my $p (@packages) { my ($pver, $url, $du, $md5, $desc, $ppr, $pdeps, $date) = metadata($p); ($pdeps eq "") or ($isDup{$p}) 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++; 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 sub pkgreadscripts { 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 "+ Generating scripts\n"; - open (my $fS, '>PKGINST'); + open (my $fS, ">$pkgdir/PKGINST"); print $fS '#!/usr/bin/env bash # # PKGINST: pre- and post-install scripts for CRUX packages @@ -271,7 +270,8 @@ run_script() { my %seen; foreach my $name (@dirlist) { - $name =~ s/\#.*//; next if ($seen{$name}); + $name =~ s/\#.*//; $name = (split /\//, $name)[-1]; + next if ($seen{$name}); $seen{$name} = 1; next if (! $path{$name}); if (-f "$path{$name}/README"){ @@ -304,7 +304,7 @@ run_script() { sub printheader { 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 < @@ -376,7 +376,7 @@ sub htmlrow { sub printfooter { my $count = shift; - open (my $ih, '>>index.html'); + open (my $ih, ">>$pkgdir/index.html"); print $ih " \n"; print $ih "

$count packages

\n"; if ($footer) { @@ -396,7 +396,7 @@ sub metadata { my $p = shift; my ($pver, $url) = ($p, $p); $pver =~ s/.*\#//; $pver =~ s/\.pkg\.tar.*//; - $url =~ s/\#/\%23/; + $url =~ s/\#/\%23/; while ($url =~ s/.*\///) {}; my $du = (-s $p); my $md5 = digest_file_hex($p,"MD5"); my $desc = (! $descrip{$pname{$p}}) ? "N.A." : $descrip{$pname{$p}};