Package: check-dfsg-status Version: 1.32 Severity: normal X-Debbugs-Cc: debian-devel-ga...@lists.debian.org
Hi, I was playing around adding detection for "local/" in this tool. I did like how it was done for contrib/: a lot of copy-pasting. (see this ugly patch in attachment). Now I realize all this code should be copy-pasted once again for "non-free-firmware/" which feels wrong. By the way the current regexp works by luck but does not seems to work by design; so I get false positives for packages actually in (main)/locales. I would factorize this duplicated/triplicated code, but I just don't know Perl engouh. The "local/" trick could later be mandated for other tools that generate or handle locally built .deb not meant to me distributed, like "non-free" but even worse/restrictive; which now get mixed up with the official packages. Greetings, ------------------------ Sample output: ======================================== Locally built packages installed on brix ! debconf-i18n full internationalization support for debconf doom-wad IWAD for "Doom" game doom2-masterlevels-wad game PWAD for Master Levels for DOOM II doom2-nerve-wad game PWAD for Doom 2: No Rest for the Living doom2-wad game IWAD for Doom 2: Hell on Earth ! gnupg-l10n GNU privacy guard - localization files griffon-legend-data game data for The Griffon Legend grimfandango-demo-en-data game data for Grim Fandango (demo) hhgg-data game data for The Hitchhiker's Guide to the Galaxy jazz-jackrabbit-hh95-data game data for Jazz Jackrabbit Holiday Hare '95 .... .... .... Locally built packages with status other than installed on brix grimfandango-fr-data ( ins) 12 non-free packages, 0.4% of 3396 installed packages. ! -> missing one count for non-free-firmware 16 contrib packages, 0.5% of 3396 installed packages. 77 local packages, 2.3% of 3396 installed packages. -- System Information: Debian Release: bookworm/sid APT prefers testing APT policy: (501, 'testing'), (450, 'unstable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 6.0.0-6-amd64 (SMP w/2 CPU threads; PREEMPT) Locale: LANG=fr_BE.UTF-8, LC_CTYPE=fr_BE.UTF-8 (charmap=UTF-8), LANGUAGE=fr_BE:fr Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) -- no debconf information
--- /usr/bin/check-dfsg-status 2021-04-09 23:09:03.000000000 +0200 +++ check-dfsg-status 2022-12-30 16:29:30.215084872 +0100 @@ -108,6 +108,10 @@ my %contrib = (); my $is_other_contrib = 0; ### preset none found, yet my %other_contrib = (); +my $is_local = 0; ### preset none found, yet +my %local = (); +my $is_other_local = 0; ### preset none found, yet +my %other_local = (); my %pkg_status = (); my $pkgcnt = 0; my $clumpcnt = 0; @@ -167,7 +171,7 @@ ($label, $section) = split(/:\s+/,$_,2); print "\tsection=[$section]\n" if $debug >= 1; $has_section = 1; ### we have necessary section - if ($section =~ /contrib|non-free|restricted|multiverse|partner/) { + if ($section =~ /contrib|non-free|restricted|multiverse|partner|local/) { ### read thru rest of array to find descr instead of waiting for it my $found_descr =0; while (! $found_descr) { @@ -191,6 +195,14 @@ $is_other_contrib = 1; $other_contrib{$pkg} = $shortdescr; } + } elsif ($section =~ /local/) { + if (lc $status eq 'installed') { + $is_local = 1; + $local{$pkg} = $shortdescr; + } else { + $is_other_local = 1; + $other_local{$pkg} = $shortdescr; + } } else { if (lc $status eq 'installed') { $is_nonfree = 1; @@ -276,6 +288,8 @@ } } +################################################################## + my $cbcnt = 0; my $contribcnt = (keys %contrib); @@ -321,6 +335,53 @@ } } +################################################################## + +my $loccnt = 0; + +my $localcnt = (keys %local); + +if($is_contrib) { + print "\n"; + if($sparse) { + foreach $pkgname (sort keys (%local)) { + $localcnt++; + print "$pkgname\n"; + } + } else { + $~ = "local_head"; + write ; + $~ = "locp"; + foreach $pkgname (sort keys(%local) ) { + $localcnt++; + write ; + print " Reason: $reason{$pkgname}\n" + if (exists $reason{$pkgname} and $explain); + } + } +} + +my $ploccnt = 0; +my $other_localcnt = (keys %other_local); +if($is_local) { + if($sparse) { + foreach $pkgname (sort keys(%other_local)) { + $ploccnt++; + print "$pkgname\n"; + } + } else { + $~ = "local_partialhead"; + write; + $~ = "ploc"; + foreach $pkgname (sort keys(%other_local)) { + $ploccnt++; + write; + print " Reason: $reason{$pkgname}\n" + if (exists $reason{$pkgname} and $explain); + } + } +} + if (!$quiet and !$sparse) { printf "\n"; if ($nfcnt != 0 or $pnfcnt != 0) { @@ -337,6 +398,13 @@ printf " %d contrib packages, %2.1f%% of %d installed packages.\n", $total_contrib, $percentage, $total_installed; } + if ($loccnt != 0 or $ploccnt != 0) { + my $total_local = $localcnt + $other_localcnt; + my $total_installed = $pkgcnt; + my $percentage = $total_local * 100 / $total_installed; + printf " %d local packages, %2.1f%% of %d installed packages.\n", + $total_local, $percentage, $total_installed; + } } if (!$quiet and $nfcnt == 0 and $pnfcnt == 0 and $cbcnt == 0 and $pcbcnt == 0) { print "No non-free or contrib packages installed on $sysname! You have completed the first step to enlightenment.\n" @@ -366,6 +434,18 @@ "Contrib packages with status other than installed on $sysname" . +format local_head = +@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"Locally built packages installed on $sysname" + +. +format local_partialhead = + +@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"Locally built packages with status other than installed on $sysname" + + +. format nfp = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -386,3 +466,13 @@ @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<@<<@< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $pkgname, '(', $pkg_status{$pkgname},')', $other_contrib{$pkgname} . + +format locp = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +$pkgname, $local{$pkgname} +. + +format ploc = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<@<<@< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +$pkgname, '(', $pkg_status{$pkgname},')', $other_local{$pkgname} +.