ports-mgmt/pkg_tree: support pkg_* and pkg

retrieve data from pkg info

PR:                  200730
Submitted by:        tatsuki_makino@hotmail.com
Approved by:         maintainer timeout (edwin@mavetju.org ; 18 days)
This commit is contained in:
Philip M. Gollucci 2015-06-27 19:32:38 +00:00
parent 7277285198
commit cedefb8580
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=390724
5 changed files with 162 additions and 69 deletions

View File

@ -3,7 +3,7 @@
PORTNAME= pkg_tree
PORTVERSION= 1.1
PORTREVISION= 2
PORTREVISION= 3
CATEGORIES= ports-mgmt
MASTER_SITES= http://www.mavetju.org/download/
@ -12,6 +12,8 @@ COMMENT= Get a 'graphical' tree-overview of installed packages
USES= perl5
NO_ARCH= yes
PLIST_FILES= bin/pkg_tree man/man7/pkg_tree.7.gz
post-patch:

View File

@ -1,6 +1,6 @@
--- Makefile.orig Wed Dec 12 23:06:13 2001
+++ Makefile Wed Dec 12 23:07:35 2001
@@ -11,8 +11,8 @@
--- Makefile.orig 2001-12-12 11:44:40 UTC
+++ Makefile
@@ -11,8 +11,8 @@ pkg_tree.7: pkg_tree.pod
--date="December 15, 2001" pkg_tree.pod > pkg_tree.7
install:

View File

@ -0,0 +1,141 @@
--- pkg_tree.orig 2001-12-12 11:44:40 UTC
+++ pkg_tree
@@ -26,7 +26,7 @@
# updated by a newer version. In case of tcl-8.3.3_3, this is tcl-8.3.3_4.
#
# PKG-TREE is (c) Edwin Groothuis, edwin@mavetju.org
-# For license issues, see the file LICESE.
+# For license issues, see the file LICENSE.
# For more information, see the website: http://www.mavetju.org
#
@@ -34,31 +34,95 @@ use strict;
use Getopt::Std;
-use vars qw/ $opt_v /;
+use vars qw/ $opt_b $opt_q $opt_t $opt_v /;
$opt_v=0;
-getopts("v");
+$opt_t=0;
+$opt_b=0;
+$opt_q=0;
+getopts("bqtv");
+
+my @args=@ARGV;
+my $hasargs=$#ARGV>=0;
+
+my %required; # this key is required by other packages
+my %requires; # this key requires other packages
+my @dirs;
+my $pkg;
+
+`pkg -N 2>&1`;
+my $child_error_pkg_N = $?;
+
+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;
+
+ $line = `pkg info -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 '') {
+ $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) {
+ $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;
+ }
+ }
+ }
+
+} # 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";
-my @dirs=readdir DIR;
+@dirs=readdir DIR;
closedir DIR;
@dirs=grep !/^\./,@dirs;
+@dirs=grep !/^pkgdb.db$/,@dirs;
@dirs=sort @dirs;
-my @args=@ARGV;
-my $hasargs=$#ARGV>=0;
-
-my %required; # this key is required by other packages
-my %requires; # this key requires other packages
-
#
# Read from every package the +REQUIRED_BY file. This file contains
# info about the packages which require this package.
#
-my $pkg;
foreach $pkg (@dirs) {
$required{$pkg}[0]=0;
if (open FILE,$PKGDIR."/".$pkg."/+REQUIRED_BY") {
@@ -101,6 +165,11 @@ foreach $pkg (@dirs) {
}
}
+} # end pkg_install
+else {
+ die;
+}
+
#
# Print the dependancies (recursive) of the packages
@@ -150,8 +219,10 @@ foreach $pkg (@dirs) {
}
next if (!$found);
}
+ next if ($opt_t && $required{$pkg}[0]!=0);
+ next if ($opt_b && $requires{$pkg}[0]!=0);
print "$pkg\n";
- if ($requires{$pkg}[0]!=0) {
+ if (!$opt_q && $requires{$pkg}[0]!=0) {
print_deps("|"," ",1,$pkg);
}
}

View File

@ -0,0 +1,15 @@
--- 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
|\__ 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.
+
=head1 RETURN VALUES
Always 0.

View File

@ -1,65 +0,0 @@
--- pkg_tree.orig Wed Dec 12 13:44:40 2001
+++ pkg_tree Mon Jan 6 23:02:31 2003
@@ -26,7 +26,7 @@
# updated by a newer version. In case of tcl-8.3.3_3, this is tcl-8.3.3_4.
#
# PKG-TREE is (c) Edwin Groothuis, edwin@mavetju.org
-# For license issues, see the file LICESE.
+# For license issues, see the file LICENSE.
# For more information, see the website: http://www.mavetju.org
#
@@ -34,10 +34,13 @@
use Getopt::Std;
-use vars qw/ $opt_v /;
+use vars qw/ $opt_b $opt_q $opt_t $opt_v /;
$opt_v=0;
-getopts("v");
+$opt_t=0;
+$opt_b=0;
+$opt_q=0;
+getopts("bqtv");
my $PKGDIR="/var/db/pkg";
@@ -46,6 +49,7 @@
closedir DIR;
@dirs=grep !/^\./,@dirs;
+@dirs=grep !/^pkgdb.db$/,@dirs;
@dirs=sort @dirs;
my @args=@ARGV;
@@ -150,8 +154,10 @@
}
next if (!$found);
}
+ next if ($opt_t && $required{$pkg}[0]!=0);
+ next if ($opt_b && $requires{$pkg}[0]!=0);
print "$pkg\n";
- if ($requires{$pkg}[0]!=0) {
+ if (!$opt_q && $requires{$pkg}[0]!=0) {
print_deps("|"," ",1,$pkg);
}
}
--- patch-aa ends here ---
--- patch-ab begins here ---
--- pkg_tree.pod.orig Wed Dec 12 13:44:40 2001
+++ pkg_tree.pod Mon Jan 6 23:20:49 2003
@@ -53,6 +53,12 @@
|\__ 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.
+
=head1 RETURN VALUES
Always 0.