1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-21 20:38:45 +00:00

New script (and it's README) for searching the ports tree. Add this script

to the main README.

This was originally submitted as a port but was added to Tools/scripts
instead at alex's suggestion.

PR:		20863
Approved by:	alex
This commit is contained in:
Mark Ovens 2000-08-28 11:37:23 +00:00
parent 4098a1b135
commit c8794db7c3
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=32049
3 changed files with 349 additions and 0 deletions

View File

@ -19,6 +19,9 @@ prpatch - just does `patch $1 < pr-patch' (pr-patch is created by getpr)
prdone - checks in the port, attempting to fill out the commit message using
information from the problem report and then takes you into edit-pr
so you don't forget to close the PR.
portsearch - A utility for searching the ports tree. It allows more detailed
search criteria than ``make search key=<string>'' and accepts
all perl(1) regular expressions.
----------------------------------------------------------------------
@ -94,6 +97,45 @@ Please be warned, that the this only means that the ports listed by the script
required for correct removal of GNOME shared directories, not for the port
functionality, so actual {RUN,LIB}_DEPENDS may have more entries.
----------------------------------------------------------------------
portsearch - A utility for searching the ports tree.
portsearch is a utility to for searching of the ports tree. It permits
much more detailed searches to be performed than ``make search
key=<string>'' by allowing you to specify which field(s) to search. It
also supports all valid perl(1) regular expressions for pattern matching.
portsearch displays matching ports in the same format as ``make search''
and also displays the number of matching ports found.
The following command line options are supported:
-h Prints a multi-line help message and exits
-n name Search for name in the name field
-p path Search for path in the path field
-i info Search for info in the comments field
-m maint Search for maint in the Maintainer field
-x index Search for index in the category field
-b b_deps Search for b_deps in the build-depends field
-r r_deps Search for r_deps in the run-depends field
-d deps Search for deps in the both the build and run dependency
fields. This option behaves differently to the other op-
tions, see the EXAMPLES section
-f file Use the index file file instead of /usr/ports/INDEX
All searches are case-insensitive
See the file README.portsearch for further information.
----------------------------------------------------------------------
NOTE: These scripts need work and are *NOT* safe to use unless you know

View File

@ -0,0 +1,117 @@
PORTSEARCH(1) FreeBSD General Commands Manual PORTSEARCH(1)
NAME
portsearch - A utility for searching the ports tree.
SYNOPSIS
portsearch [-h] [-n name] [-p path] [-i info] [-m maint] [-x index] [-b
b_deps] [-r r_deps] [-d deps] [-f file]
DESCRIPTION
portsearch is a utility to for searching of the ports tree. It permits
much more detailed searches to be performed than ``make search
key=<string>'' by allowing you to specify which field(s) to search. It
also supports all valid perl(1) regular expressions for pattern matching.
portsearch displays matching ports in the same format as ``make search''
and also displays the number of matching ports found.
The following command line options are supported:
-h Prints a multi-line help message and exits
-n name Search for name in the name field
-p path Search for path in the path field
-i info Search for info in the comments field
-m maint Search for maint in the Maintainer field
-x index Search for index in the category field
-b b_deps Search for b_deps in the build-depends field
-r r_deps Search for r_deps in the run-depends field
-d deps Search for deps in the both the build and run dependency
fields. This option behaves differently to the other op-
tions, see the EXAMPLES section
-f file Use the index file file instead of /usr/ports/INDEX
All searches are case-insensitive
/usr/ports/INDEX is not updated everytime a change is made to the ports
tree so in order to get the most accurate results from using portsearch
you should consider rebuilding the index thus:
# cd /usr/ports && make index
FILES
/usr/ports/INDEX The ports master index file
EXAMPLES
Find all ports whose name contains "emacs":
portsearch -n emacs
Restrict the search to only those ports whose name begins with "emacs" by
anchoring the match to the beginning of the name:
portsearch -n ^emacs
Find all the ports in the textproc, print, and www categories that are
maintained by Nik or Jim and have a run-time dependency on the tidy(1)
port:
portsearch -x '(textproc|print|www)' -m '(nik|jim)' -r tidy
Note that the regular expression operators have to be quoted to protect
them from the shell.
The behaviour of the -d deps option is slightly different to the other
search options. If used it makes portsearch search both the build- and
run-dependency fields. If the -b b_deps and/or the -r r_deps are used as
well then they are ignored; the deps pattern is used to search both
fields.
Note that
portsearch -d foobar
is not the same as
portsearch -b foobar -r foobar
Normally all the options are logically ANDed together so in the above ex-
ample a port would need to have both a build and run dependency on
"foobar" to match, whereas the -d option logically ORs the two dependency
fields so that only a single dependency is required for a match. This is
primarily to provide an easy way of generating a list of all the depen-
dencies of a port; handy if the maintainer is making changes and needs to
know which other ports may be affected.
DIAGNOSTICS
portsearch exits 0 on success or 1 if a help message was output.
SEE ALSO
perlre(1), ports(7)
AUTHORS
Mark Ovens <marko@freebsd.org>
BUGS
The "Index" field would probably be better named "Category" but it has
been left unchanged to be consistent with ``make search''.
perl(1) treats ``-'' as a word boundary so when a dependency field is
wrapped over more than one line a port name may get split like this:
gettext-0.10.35 jpeg-6b libproplist-0.10.1 libungif-
4.1.0 png-1.0.6
FreeBSD 13 June 2000 2

190
Tools/scripts/portsearch Executable file
View File

@ -0,0 +1,190 @@
#!/usr/bin/perl
#-
# Copyright (c) 2000 Mark Ovens
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer
# in this position and unchanged.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $Id$
#
# Each port record in INDEX contains 10 fields, delimited by ``|'', some
# of which may be empty. The fields are:
#
# distribution-name|port-path|installation-prefix|comment| \
# description-file|maintainer|categories|build deps|run deps|www site
use strict;
use Getopt::Std;
use vars qw/ $key @list %fields %list %opts /;
#
# Global variables
#
my $VERSION = "1.0";
my $file = "/usr/ports/INDEX";
my $match = 1;
my $count = 0;
# We only need 7 of the 10 fields in a record; define which ones in a
# hash slice to ignore the un-needed ones. This also makes it easy to
# add or remove fields in the future.
@fields{qw(n p i m x b r)} = (0, 1, 3, 5, 6, 7, 8);
#
# Print a basic help message
#
sub usage() {
print(STDERR "
Usage: portsearch [-h] [-n name] [-p path] [-i info] [-m maint] [-x index]
[-b b_deps] [-r r_deps] [-d deps] [-f file]
");
} # usage()
#
# Print a more verbose help message
#
sub help() {
print(STDERR "portsearch $VERSION - A utility for searching the ports tree.
Options:
-n name Search for \"name\" in name of ports
-p path Search for \"path\" in location of ports
-i info Search for \"info\" in ports COMMENT files
-m maint Search for \"maint\" in ports Maintainer
-x index Search for \"index\" in ports categories
-b b_deps Search for \"b_deps\" in build depends of ports
-r r_deps Search for \"r_deps\" in run depends of ports
-d deps Search for \"deps\" in both build & run depends of ports
-f file Use \"file\" instead of /usr/ports/INDEX
-h Print this message and exit
Report bugs to <marko\@freebsd.org>.
");
} # help()
#
# The program proper
#
MAIN: {
# No command-line args
if ($#ARGV == -1) {
usage();
exit(1);
}
getopt('fnpimxbrd', \%opts);
# Command-line args, but without options
if (keys(%opts) == 0 ) {
usage();
exit(1);
}
# If ``-h'', ignore any other options
if (defined($opts{"h"})) {
help();
exit(1);
}
# A different INDEX file
if (defined($opts{"f"})) {
$file = $opts{"f"};
}
# If ``-d'' used we don't want ``-b'' & ``-r''
if (defined($opts{"d"})) {
delete $opts{"b"};
delete $opts{"r"};
}
# Finished with it now so remove it from hash
delete $opts{"f"};
open(INDEX, "$file") || die "Unable to open $file";
while (<INDEX>) {
chomp;
@list = split(/\|/);
$match = 1;
# All searches are case-insensitive!
# For ``-d'' search both build & run depends.
# Only fail to match if not found in either.
foreach $key (keys (%opts)) {
if ($key eq "d") {
if ($list[$fields{"b"}] !~ m#$opts{$key}#i &&
$list[$fields{"r"}] !~ m#$opts{$key}#i) {
$match = 0;
last;
}
} else {
if ($list[$fields{$key}] !~ m#$opts{$key}#i) {
$match = 0;
last;
}
}
} # foreach
if ($match == 1) {
$count++;
write;
}
} # while
close(INDEX);
print ("Number of matching ports = $count\n\n");
} # MAIN
format STDOUT =
Port: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[0]
Path: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[1]
Info: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[3]
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[3]
Maint: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[5]
Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[6]
B-deps: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[7]
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[7]
R-deps: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[8]
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$list[8]
.