mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-20 04:02:27 +00:00
ports-mgmt/pkg_tree: Retrieve data from pkg info at one time
The way it works is that it calls pkg info 3 times, so there is a possibility of losing consistency. The -r option added for displaying the "Required by" graph instead of the "Depends on" graph. Pass maintainership to submitter PR: 256214
This commit is contained in:
parent
ffd3e0f401
commit
4c6e492cd3
@ -6,7 +6,7 @@ PORTREVISION= 4
|
||||
CATEGORIES= ports-mgmt
|
||||
MASTER_SITES= http://www.mavetju.org/download/
|
||||
|
||||
MAINTAINER= ports@FreeBSD.org
|
||||
MAINTAINER= tatsuki_makino@hotmail.com
|
||||
COMMENT= Get a 'graphical' tree-overview of installed packages
|
||||
|
||||
LICENSE= BSD2CLAUSE
|
||||
|
@ -1,2 +1,3 @@
|
||||
TIMESTAMP = 1622170800
|
||||
SHA256 (pkg_tree-1.1.tar.gz) = f82a68ab0fda053654cc35a0864b55a9529287f58017b4a1b500e91076a458be
|
||||
SIZE (pkg_tree-1.1.tar.gz) = 5006
|
||||
|
@ -9,20 +9,21 @@
|
||||
# For more information, see the website: http://www.mavetju.org
|
||||
#
|
||||
|
||||
@@ -34,31 +34,95 @@ use strict;
|
||||
@@ -34,31 +34,77 @@ use strict;
|
||||
|
||||
use Getopt::Std;
|
||||
|
||||
-use vars qw/ $opt_v /;
|
||||
+use vars qw/ $opt_b $opt_q $opt_t $opt_v /;
|
||||
+use vars qw/ $opt_b $opt_q $opt_r $opt_t $opt_v /;
|
||||
|
||||
$opt_v=0;
|
||||
-getopts("v");
|
||||
+$opt_t=0;
|
||||
+$opt_b=0;
|
||||
+$opt_q=0;
|
||||
+getopts("bqtv");
|
||||
+
|
||||
+$opt_r=0;
|
||||
+getopts("bqrtv");
|
||||
|
||||
+my @args=@ARGV;
|
||||
+my $hasargs=$#ARGV>=0;
|
||||
+
|
||||
@ -37,59 +38,40 @@
|
||||
+if ($child_error_pkg_N == 0) { # begin pkgng
|
||||
+
|
||||
+ my $re_trim = qr/^\s+|\s+$/o;
|
||||
+ my $re_rtrim = qr/:\s*$/o;
|
||||
+ my $re_pkg = qr/^\s+/o;
|
||||
+ my $line;
|
||||
+ my $re_dep = qr/^Depends on :$/o;
|
||||
+ my $re_req = qr/^Required by :$/o;
|
||||
+ my($line, $r);
|
||||
+
|
||||
+ $line = `pkg info -r -a`;
|
||||
+ $line = `pkg info -d -r -a`;
|
||||
+ if ($? == 0) {
|
||||
+ my @lines = split(/^/, $line);
|
||||
+ $pkg = '';
|
||||
+ foreach $line (@lines) {
|
||||
+ if ($line !~ $re_pkg) {
|
||||
+ $pkg = $line;
|
||||
+ $pkg =~ s/$re_rtrim//;
|
||||
+ $required{$pkg}[0] = 0;
|
||||
+ } elsif ($pkg ne '') {
|
||||
+ if ($line =~ $re_dep) {
|
||||
+ $r = \%requires;
|
||||
+ } elsif ($line =~ $re_req) {
|
||||
+ $r = \%required;
|
||||
+ } elsif ($line =~ $re_pkg) {
|
||||
+ $line =~ s/$re_trim//g;
|
||||
+ $required{$pkg}[++$required{$pkg}[0]] = $line;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ $line = `pkg info -d -a`;
|
||||
+ if ($? == 0) {
|
||||
+ my @lines = split(/^/, $line);
|
||||
+ $pkg = '';
|
||||
+ foreach $line (@lines) {
|
||||
+ if ($line !~ $re_pkg) {
|
||||
+ ${$r}{$pkg}[++${$r}{$pkg}[0]] = $line;
|
||||
+ } else {
|
||||
+ $pkg = $line;
|
||||
+ $pkg =~ s/$re_rtrim//;
|
||||
+ $requires{$pkg}[0] = 0;
|
||||
+ } elsif ($pkg ne '') {
|
||||
+ $line =~ s/$re_trim//g;
|
||||
+ $requires{$pkg}[++$requires{$pkg}[0]] = $line;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ $line = `pkg info -q`;
|
||||
+ if ($? == 0) {
|
||||
+ @dirs = split(/^/, $line);
|
||||
+ foreach $pkg (@dirs) {
|
||||
+ $pkg =~ s/$re_trim//g;
|
||||
+ unless (exists $required{$pkg}) {
|
||||
+ $required{$pkg}[0] = 0;
|
||||
+ }
|
||||
+ unless (exists $requires{$pkg}) {
|
||||
+ $requires{$pkg}[0] = 0;
|
||||
+ $pkg =~ s/$re_trim//g;
|
||||
+ push(@dirs, $pkg);
|
||||
+ unless (exists $required{$pkg}) {
|
||||
+ $required{$pkg}[0] = 0;
|
||||
+ }
|
||||
+ unless (exists $requires{$pkg}) {
|
||||
+ $requires{$pkg}[0] = 0;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+} # end pkgng
|
||||
+elsif (-e '/usr/sbin/pkg_info') { # begin pkg_install
|
||||
|
||||
+
|
||||
my $PKGDIR="/var/db/pkg";
|
||||
|
||||
opendir DIR,$PKGDIR or die "Couldn't open $PKGDIR";
|
||||
@ -115,7 +97,7 @@
|
||||
foreach $pkg (@dirs) {
|
||||
$required{$pkg}[0]=0;
|
||||
if (open FILE,$PKGDIR."/".$pkg."/+REQUIRED_BY") {
|
||||
@@ -101,6 +165,11 @@ foreach $pkg (@dirs) {
|
||||
@@ -101,6 +147,10 @@ foreach $pkg (@dirs) {
|
||||
}
|
||||
}
|
||||
|
||||
@ -123,11 +105,22 @@
|
||||
+else {
|
||||
+ die;
|
||||
+}
|
||||
+
|
||||
|
||||
#
|
||||
# Print the dependancies (recursive) of the packages
|
||||
@@ -150,8 +219,10 @@ foreach $pkg (@dirs) {
|
||||
@@ -141,6 +191,11 @@ sub print_deps {
|
||||
# Print all packages or, if there is a command line argument, the ones which
|
||||
# matches one of the arguments.
|
||||
#
|
||||
+if ($opt_r) {
|
||||
+ my %t = %required;
|
||||
+ %required = %requires;
|
||||
+ %requires = %t;
|
||||
+}
|
||||
foreach $pkg (@dirs) {
|
||||
if ($hasargs) {
|
||||
my $found=0;
|
||||
@@ -150,8 +205,10 @@ foreach $pkg (@dirs) {
|
||||
}
|
||||
next if (!$found);
|
||||
}
|
||||
|
@ -1,15 +1,26 @@
|
||||
--- pkg_tree.pod.orig 2001-12-12 11:44:40 UTC
|
||||
+++ pkg_tree.pod
|
||||
@@ -53,6 +53,12 @@ E<32>[~] edwin@k7E<gt>B<pkg_tree -v linu
|
||||
@@ -8,7 +8,7 @@ B<pkg_tree> - Generate a graphical tree of packages an
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
-B<pkg_tree> [B<-v>] [I<package-prefix ...>]
|
||||
+B<pkg_tree> [B<-bqrtv>] [I<package-prefix ...>]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
@@ -52,6 +52,14 @@ E<32>[~] edwin@k7E<gt>B<pkg_tree -v linux-netscape>
|
||||
|\__ imake-4.1.0 (unknown)
|
||||
|\__ freetype2-2.0.5
|
||||
\__ XFree86-libraries-4.1.0 (unknown)
|
||||
|
||||
+
|
||||
+Use the B<-t> parameter to show only top level packages,
|
||||
+and B<-b> to show only bottom level packages. And B<-t> B<-q>
|
||||
+together will give the list of top level packages without their
|
||||
+dependencies, installing only these packages should install all
|
||||
+currently installed packages.
|
||||
+
|
||||
+Use the B<-r> parameter to show requirements relation.
|
||||
|
||||
=head1 RETURN VALUES
|
||||
|
||||
Always 0.
|
||||
|
Loading…
Reference in New Issue
Block a user