summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoerg <joerg>2009-03-02 17:13:49 +0000
committerjoerg <joerg>2009-03-02 17:13:49 +0000
commitb333f21216c294dae0da13cdf5678c2afe7a710a (patch)
tree82890a514370bff1dc520fadf9359dd8fceeda4d
parentd109f7e7a2b2877b9e359c303ef39b876dc8d040 (diff)
downloadpkgsrc-b333f21216c294dae0da13cdf5678c2afe7a710a.tar.gz
pkg_install-20090302:
Add new option -r to pkg_info, which works like -R, but expands it recursively.
-rw-r--r--pkgtools/pkg_install/files/info/info.h5
-rw-r--r--pkgtools/pkg_install/files/info/main.c12
-rw-r--r--pkgtools/pkg_install/files/info/perform.c54
-rw-r--r--pkgtools/pkg_install/files/info/pkg_info.19
-rw-r--r--pkgtools/pkg_install/files/info/pkg_info.cat16
-rw-r--r--pkgtools/pkg_install/files/info/show.c22
-rw-r--r--pkgtools/pkg_install/files/lib/version.h4
7 files changed, 95 insertions, 17 deletions
diff --git a/pkgtools/pkg_install/files/info/info.h b/pkgtools/pkg_install/files/info/info.h
index 233ade1f6fe..8615c5cb974 100644
--- a/pkgtools/pkg_install/files/info/info.h
+++ b/pkgtools/pkg_install/files/info/info.h
@@ -1,4 +1,4 @@
-/* $NetBSD: info.h,v 1.17 2008/02/02 16:21:45 joerg Exp $ */
+/* $NetBSD: info.h,v 1.18 2009/03/02 17:13:49 joerg Exp $ */
/* from FreeBSD Id: info.h,v 1.10 1997/02/22 16:09:40 peter Exp */
@@ -70,6 +70,7 @@ struct pkg_meta {
char *meta_preserve;
char *meta_views;
char *meta_installed_info;
+ int is_installed;
};
#ifndef MAXINDEXSIZE
@@ -99,6 +100,7 @@ struct pkg_meta {
#define SHOW_BLD_DEPENDS 0x20000
#define SHOW_BI_VAR 0x40000
#define SHOW_SUMMARY 0x80000
+#define SHOW_FULL_REQBY 0x100000
enum which {
WHICH_ALL,
@@ -128,6 +130,7 @@ void show_depends(const char *, package_t *);
void show_bld_depends(const char *, package_t *);
void show_index(const char *, const char *);
void show_summary(struct pkg_meta *, package_t *, const char *);
+void show_list(lpkg_head_t *, const char *);
int pkg_perform(lpkg_head_t *);
diff --git a/pkgtools/pkg_install/files/info/main.c b/pkgtools/pkg_install/files/info/main.c
index 6736f2e8754..b75ad227af2 100644
--- a/pkgtools/pkg_install/files/info/main.c
+++ b/pkgtools/pkg_install/files/info/main.c
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.24 2009/02/28 16:03:56 joerg Exp $ */
+/* $NetBSD: main.c,v 1.25 2009/03/02 17:13:49 joerg Exp $ */
#if HAVE_CONFIG_H
#include "config.h"
@@ -7,7 +7,7 @@
#if HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
-__RCSID("$NetBSD: main.c,v 1.24 2009/02/28 16:03:56 joerg Exp $");
+__RCSID("$NetBSD: main.c,v 1.25 2009/03/02 17:13:49 joerg Exp $");
/*
*
@@ -44,7 +44,7 @@ __RCSID("$NetBSD: main.c,v 1.24 2009/02/28 16:03:56 joerg Exp $");
#include "lib.h"
#include "info.h"
-static const char Options[] = ".aBbcDde:E:fFhIiK:kLl:mNnpQ:qRsSuvVX";
+static const char Options[] = ".aBbcDde:E:fFhIiK:kLl:mNnpQ:qrRsSuvVX";
int Flags = 0;
enum which Which = WHICH_LIST;
@@ -61,7 +61,7 @@ static void
usage(void)
{
fprintf(stderr, "%s\n%s\n%s\n%s\n",
- "usage: pkg_info [-BbcDdFfhIikLmNnpqRSsVvX] [-e package] [-E package]",
+ "usage: pkg_info [-BbcDdFfhIikLmNnpqrRSsVvX] [-e package] [-E package]",
" [-K pkg_dbdir] [-l prefix] pkg-name ...",
" pkg_info [-a | -u] [flags]",
" pkg_info [-Q variable] pkg-name ...");
@@ -172,6 +172,10 @@ main(int argc, char **argv)
Quiet = TRUE;
break;
+ case 'r':
+ Flags |= SHOW_FULL_REQBY;
+ break;
+
case 'R':
Flags |= SHOW_REQBY;
break;
diff --git a/pkgtools/pkg_install/files/info/perform.c b/pkgtools/pkg_install/files/info/perform.c
index 812fc2aa438..5f605dd2ed3 100644
--- a/pkgtools/pkg_install/files/info/perform.c
+++ b/pkgtools/pkg_install/files/info/perform.c
@@ -1,4 +1,4 @@
-/* $NetBSD: perform.c,v 1.52 2009/02/25 20:52:10 joerg Exp $ */
+/* $NetBSD: perform.c,v 1.53 2009/03/02 17:13:49 joerg Exp $ */
#if HAVE_CONFIG_H
#include "config.h"
@@ -13,7 +13,7 @@
#if HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
-__RCSID("$NetBSD: perform.c,v 1.52 2009/02/25 20:52:10 joerg Exp $");
+__RCSID("$NetBSD: perform.c,v 1.53 2009/03/02 17:13:49 joerg Exp $");
/*-
* Copyright (c) 2008 Joerg Sonnenberger <joerg@NetBSD.org>.
@@ -234,6 +234,7 @@ has_entry:
}
archive_read_finish(archive);
+ meta->is_installed = 0;
return meta;
}
@@ -279,9 +280,50 @@ read_meta_data_from_pkgdb(const char *pkg)
close(fd);
}
+ meta->is_installed = 1;
+
return meta;
}
+static void
+build_full_reqby(lpkg_head_t *reqby, struct pkg_meta *meta)
+{
+ char *iter, *eol, *next;
+ lpkg_t *lpp;
+ struct pkg_meta *meta_dep;
+
+ if (meta->is_installed == 0 || meta->meta_required_by == NULL)
+ return;
+
+ for (iter = meta->meta_required_by; *iter != '\0'; iter = next) {
+ eol = iter + strcspn(iter, "\n");
+ if (*eol == '\n')
+ next = eol + 1;
+ else
+ next = eol;
+ if (iter == eol)
+ continue;
+ TAILQ_FOREACH(lpp, reqby, lp_link) {
+ if (strlen(lpp->lp_name) != eol - iter)
+ continue;
+ if (memcmp(lpp->lp_name, iter, eol - iter) == 0)
+ break;
+ }
+ if (lpp != NULL)
+ continue;
+ *eol = '\0';
+ lpp = alloc_lpkg(iter);
+ if (next != eol)
+ *eol = '\n';
+ TAILQ_INSERT_TAIL(reqby, lpp, lp_link);
+ meta_dep = read_meta_data_from_pkgdb(lpp->lp_name);
+ if (meta_dep == NULL)
+ continue;
+ build_full_reqby(reqby, meta_dep);
+ free_pkg_meta(meta_dep);
+ }
+}
+
static lfile_head_t files;
static int
@@ -396,6 +438,12 @@ pkg_do(const char *pkg)
if ((Flags & SHOW_REQBY) && meta->meta_required_by) {
show_file(meta->meta_required_by, "Required by:\n", TRUE);
}
+ if ((Flags & SHOW_FULL_REQBY) && meta->is_installed) {
+ lpkg_head_t reqby;
+ TAILQ_INIT(&reqby);
+ build_full_reqby(&reqby, meta);
+ show_list(&reqby, "Full required by list:\n");
+ }
if (Flags & SHOW_DESC) {
show_file(meta->meta_desc, "Description:\n", TRUE);
}
@@ -587,7 +635,7 @@ pkg_perform(lpkg_head_t *pkghead)
desired_meta_data |= LOAD_SIZE_ALL;
if (Flags & (SHOW_SUMMARY | SHOW_DESC))
desired_meta_data |= LOAD_DESC;
- if (Flags & SHOW_REQBY)
+ if (Flags & (SHOW_REQBY | SHOW_FULL_REQBY))
desired_meta_data |= LOAD_REQUIRED_BY;
if (Flags & SHOW_DISPLAY)
desired_meta_data |= LOAD_DISPLAY;
diff --git a/pkgtools/pkg_install/files/info/pkg_info.1 b/pkgtools/pkg_install/files/info/pkg_info.1
index 89676dc8ad2..df22fbf626a 100644
--- a/pkgtools/pkg_install/files/info/pkg_info.1
+++ b/pkgtools/pkg_install/files/info/pkg_info.1
@@ -1,4 +1,4 @@
-.\" $NetBSD: pkg_info.1,v 1.23 2009/02/28 16:03:56 joerg Exp $
+.\" $NetBSD: pkg_info.1,v 1.24 2009/03/02 17:13:49 joerg Exp $
.\"
.\" FreeBSD install - a package for the installation and maintenance
.\" of non-core utilities.
@@ -17,7 +17,7 @@
.\"
.\" @(#)pkg_info.1
.\"
-.Dd February 27, 2009
+.Dd March 2, 2009
.Dt PKG_INFO 1
.Os
.Sh NAME
@@ -25,7 +25,7 @@
.Nd a utility for displaying information on software packages
.Sh SYNOPSIS
.Nm
-.Op Fl BbcDdFfhIikLmNnpqRSsVvX
+.Op Fl BbcDdFfhIikLmNnpqrRSsVvX
.Op Fl e Ar package
.Op Fl E Ar package
.Op Fl K Ar pkg_dbdir
@@ -176,6 +176,9 @@ in emitting report headers and such, just dump the
raw info (basically, assume a non-human reading).
.It Fl R
For each package, show the packages that require it.
+.It Fl r
+For each package, show the packages that require it.
+Continue recursively to show all dependents.
.It Fl S
Show the size of this package and all the packages it requires,
in bytes.
diff --git a/pkgtools/pkg_install/files/info/pkg_info.cat1 b/pkgtools/pkg_install/files/info/pkg_info.cat1
index 1e6a42b93d8..ecfd7b20c4c 100644
--- a/pkgtools/pkg_install/files/info/pkg_info.cat1
+++ b/pkgtools/pkg_install/files/info/pkg_info.cat1
@@ -4,7 +4,7 @@ NNAAMMEE
ppkkgg__iinnffoo -- a utility for displaying information on software packages
SSYYNNOOPPSSIISS
- ppkkgg__iinnffoo [--BBbbccDDddFFffhhIIiikkLLmmNNnnppqqRRSSssVVvvXX] [--ee _p_a_c_k_a_g_e] [--EE _p_a_c_k_a_g_e]
+ ppkkgg__iinnffoo [--BBbbccDDddFFffhhIIiikkLLmmNNnnppqqrrRRSSssVVvvXX] [--ee _p_a_c_k_a_g_e] [--EE _p_a_c_k_a_g_e]
[--KK _p_k_g___d_b_d_i_r] [--ll _p_r_e_f_i_x] _p_k_g_-_n_a_m_e _._._.
ppkkgg__iinnffoo [--aa | --uu] [flags]
ppkkgg__iinnffoo [--QQ _v_a_r_i_a_b_l_e] _p_k_g_-_n_a_m_e _._._.
@@ -107,6 +107,8 @@ DDEESSCCRRIIPPTTIIOONN
--RR For each package, show the packages that require it.
+ --rr For each package, recursively show the packages that require it.
+
--SS Show the size of this package and all the packages it requires,
in bytes.
@@ -184,4 +186,4 @@ AAUUTTHHOORRSS
NetBSD wildcard dependency processing, pkgdb, depends displaying,
pkg size display etc.
-NetBSD 5.0 February 27, 2009 NetBSD 5.0
+NetBSD 5.0 March 2, 2009 NetBSD 5.0
diff --git a/pkgtools/pkg_install/files/info/show.c b/pkgtools/pkg_install/files/info/show.c
index c3d6f6f873c..b6371065866 100644
--- a/pkgtools/pkg_install/files/info/show.c
+++ b/pkgtools/pkg_install/files/info/show.c
@@ -1,4 +1,4 @@
-/* $NetBSD: show.c,v 1.24 2009/02/11 23:51:30 joerg Exp $ */
+/* $NetBSD: show.c,v 1.25 2009/03/02 17:13:49 joerg Exp $ */
#if HAVE_CONFIG_H
#include "config.h"
@@ -7,7 +7,7 @@
#if HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
-__RCSID("$NetBSD: show.c,v 1.24 2009/02/11 23:51:30 joerg Exp $");
+__RCSID("$NetBSD: show.c,v 1.25 2009/03/02 17:13:49 joerg Exp $");
/*
* FreeBSD install - a package for the installation and maintainance
@@ -405,3 +405,21 @@ print_string_as_var(const char *var, const char *str)
return 0;
}
+
+void
+show_list(lpkg_head_t *pkghead, const char *title)
+{
+ lpkg_t *lpp;
+
+ if (!Quiet)
+ printf("%s%s", InfoPrefix, title);
+
+ while ((lpp = TAILQ_FIRST(pkghead)) != NULL) {
+ TAILQ_REMOVE(pkghead, lpp, lp_link);
+ puts(lpp->lp_name);
+ free_lpkg(lpp);
+ }
+
+ if (!Quiet)
+ printf("\n");
+}
diff --git a/pkgtools/pkg_install/files/lib/version.h b/pkgtools/pkg_install/files/lib/version.h
index 56b682760fb..d8962aa240c 100644
--- a/pkgtools/pkg_install/files/lib/version.h
+++ b/pkgtools/pkg_install/files/lib/version.h
@@ -1,4 +1,4 @@
-/* $NetBSD: version.h,v 1.116 2009/03/02 14:59:14 joerg Exp $ */
+/* $NetBSD: version.h,v 1.117 2009/03/02 17:13:49 joerg Exp $ */
/*
* Copyright (c) 2001 Thomas Klausner. All rights reserved.
@@ -27,6 +27,6 @@
#ifndef _INST_LIB_VERSION_H_
#define _INST_LIB_VERSION_H_
-#define PKGTOOLS_VERSION "20090301"
+#define PKGTOOLS_VERSION "20090302"
#endif /* _INST_LIB_VERSION_H_ */