[pacman-dev] [PATCH] Show 'Required By' in -Si output
Dan McGee
dpmcgee at gmail.com
Wed Oct 7 23:36:15 EDT 2009
On Wed, Oct 7, 2009 at 10:14 PM, Allan McRae <allan at archlinux.org> wrote:
> Dan McGee wrote:
>>
>> Just as we do in -Qi, we can compute required by information for sync
>> database packages. The behavior seems sane; for a given package, the -Si
>> required by will show all packages in *any* sync database that require it.
>>
>> Implements FS#16244.
>>
>> Signed-off-by: Dan McGee <dan at archlinux.org>
>> ---
>> lib/libalpm/package.c | 46
>> ++++++++++++++++++++++++++++++++++++----------
>> src/pacman/package.c | 13 ++++---------
>> 2 files changed, 40 insertions(+), 19 deletions(-)
>>
>> diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
>> index de17166..b0b6480 100644
>> --- a/lib/libalpm/package.c
>> +++ b/lib/libalpm/package.c
>> @@ -556,6 +556,21 @@ unsigned short SYMEXPORT
>> alpm_pkg_has_scriptlet(pmpkg_t *pkg)
>> return pkg->scriptlet;
>> }
>> +static void find_requiredby(pmpkg_t *pkg, pmdb_t *db, alpm_list_t
>> **reqs)
>> +{
>> + const alpm_list_t *i;
>> + for(i = _alpm_db_get_pkgcache(db); i; i = i->next) {
>> + if(!i->data) {
>> + continue;
>> + }
>> + pmpkg_t *cachepkg = i->data;
>> + if(_alpm_dep_edge(cachepkg, pkg)) {
>> + const char *cachepkgname =
>> alpm_pkg_get_name(cachepkg);
>> + *reqs = alpm_list_add(*reqs,
>> strdup(cachepkgname));
>> + }
>> + }
>> +}
>> +
>> /**
>> * @brief Compute the packages requiring a given package.
>> * @param pkg a package
>> @@ -565,18 +580,29 @@ alpm_list_t SYMEXPORT
>> *alpm_pkg_compute_requiredby(pmpkg_t *pkg)
>> {
>> const alpm_list_t *i;
>> alpm_list_t *reqs = NULL;
>> + pmdb_t *db;
>> - pmdb_t *localdb = alpm_option_get_localdb();
>> - for(i = _alpm_db_get_pkgcache(localdb); i; i = i->next) {
>> - if(!i->data) {
>> - continue;
>> - }
>> - pmpkg_t *cachepkg = i->data;
>> - if(_alpm_dep_edge(cachepkg, pkg)) {
>> - const char *cachepkgname =
>> alpm_pkg_get_name(cachepkg);
>> - reqs = alpm_list_add(reqs, strdup(cachepkgname));
>> + if(pkg->origin == PKG_FROM_FILE) {
>> + /* The sane option; search locally for things that require
>> this. */
>> + db = alpm_option_get_localdb();
>> + fprintf(stderr, "db name: %s\n", db->treename);
>> + find_requiredby(pkg, db, &reqs);
>> + } else {
>> + /* We have a DB package. if it is a local package, then we
>> should
>> + * only search the local DB; else search all known sync
>> databases. */
>> + db = pkg->origin_data.db;
>> + if(db->is_local) {
>> + fprintf(stderr, "db name: %s\n", db->treename);
>> + find_requiredby(pkg, db, &reqs);
>> + } else {
>> + for(i = handle->dbs_sync; i; i = i->next) {
>> + db = i->data;
>> + fprintf(stderr, "db name: %s\n",
>> db->treename);
>> + find_requiredby(pkg, db, &reqs);
>> + }
>> }
>> }
>> +
>> return(reqs);
>> }
>> diff --git a/src/pacman/package.c b/src/pacman/package.c
>> index 3b14516..e7e2552 100644
>> --- a/src/pacman/package.c
>> +++ b/src/pacman/package.c
>> @@ -83,10 +83,8 @@ void dump_pkg_full(pmpkg_t *pkg, int level)
>> depstrings = alpm_list_add(depstrings,
>> alpm_dep_compute_string(dep));
>> }
>> - if(level>0) {
>> - /* compute this here so we don't get a pause in the middle
>> of output */
>> - requiredby = alpm_pkg_compute_requiredby(pkg);
>> - }
>> + /* compute this here so we don't get a pause in the middle of
>> output */
>> + requiredby = alpm_pkg_compute_requiredby(pkg);
>> /* actual output */
>> string_display(_("Name :"), alpm_pkg_get_name(pkg));
>> @@ -97,11 +95,7 @@ void dump_pkg_full(pmpkg_t *pkg, int level)
>> list_display(_("Provides :"), alpm_pkg_get_provides(pkg));
>> list_display(_("Depends On :"), depstrings);
>> list_display_linebreak(_("Optional Deps :"),
>> alpm_pkg_get_optdepends(pkg));
>> - /* Only applicable if installed */
>> - if(level > 0) {
>> - list_display(_("Required By :"), requiredby);
>> - FREELIST(requiredby);
>> - }
>> + list_display(_("Required By :"), requiredby);
>> list_display(_("Conflicts With :"), alpm_pkg_get_conflicts(pkg));
>> list_display(_("Replaces :"), alpm_pkg_get_replaces(pkg));
>> if(level < 0) {
>> @@ -142,6 +136,7 @@ void dump_pkg_full(pmpkg_t *pkg, int level)
>> printf("\n");
>> FREELIST(depstrings);
>> + FREELIST(requiredby);
>> }
>> /* Display the content of a sync package
>>
>
> Looking at this, I can not see a way of turning it off. I might be missing
> something....
>
>> cd /var/abs
>> grep -R "depends" {core,extra}/* | grep glibc | wc -l
> 365
>> grep -R "depends" {core,extra}/* | grep perl | wc -l
> 237
>
> How many lines of output will that result in?
Obviously glibc is the exception and not the rule, but yeah it is
pretty big. I'm not saying this is the final patch; putting this in
-Sii isn't a bad option (there is no such thing as -Sii right now
however). That is why I submit here first. :)
@Laszlo- I know you are trying to be helpful, but please let me speak
for myself when I am involved in this conversation to begin with.
dmcgee at galway ~/projects/pacman (master)
$ ./src/pacman/pacman -Si glibc
Repository : core
db name: testing
db name: core
db name: extra
db name: community-testing
db name: community
Name : glibc
Version : 2.10.1-4
URL : http://www.gnu.org/software/libc
Licenses : GPL LGPL
Groups : base
Provides : None
Depends On : kernel-headers>=2.6.30.5 tzdata
Optional Deps : None
Required By : archboot aufs2-util dhcpcd erlang fakeroot gzip
iptables librpcsecgss mlocate nfs-utils perl popt
wpa_actiond attr b43-fwcutter bash bin86 binutils bison
bridge-utils bzip2 coreutils cpio cracklib dcron
device-mapper dhcpcd diffutils ed eventlog expat
fakeroot file findutils flex gawk gcc-libs gdbm
gen-init-cpio grep gzip hdparm ifenslave initscripts
iptables iputils kbd libcap libevent libgpg-error libnl
libpcap librpcsecgss libtirpc linux-atm lzo2 m4 mailx
make mdadm mlocate module-init-tools nano ncurses
ndiswrapper-utils net-tools nfs-utils nfsidmap pam patch
pciutils pcmciautils perl pkgconfig popt ppp pptpclient
procinfo psmisc readline rpcbind run-parts sdparm sudo
sysfsutils sysvinit tar tcp_wrappers udev usbutils wget
which wireless_tools wlan-ng26-utils zlib a52dec aalib
acct acpi acpid alsa-lib alsa-oss anthy antiword
archboot arj audiofile aufs2-util babl barcode beep
bftpd biogrep biopython bladeenc c-ares cabextract
capi4hylafax capi4k-utils catdoc ccache cd-discid cdargs
cdparanoia chmlib compface cpudyn ctags dbh dcfldd di
diffstat dmapi dmidecode dnsmasq docker dosfstools
dvdrtools eject enscript erlang ethtool faac faad2
fbset fetchmail fftw fftw2 figlet flac flite fping
fribidi ftjam fuse glib gnu-netcat gnuchess gnugo gocr
gpart gsl hddtemp hdup help2man hexedit hping hspell
httptunnel i8kutils icmake id3v2 imake indent
isapnptools jhead joe latex2rtf lcab lensfun libao
libart-lgpl libburn libcdaudio libcddb libchewing
libdaemon libdatrie libdrm libdvbpsi libdvdcss
libdvdread libelf libexif libffi libfs libhangul
libical libice libidn libixp libjpeg libksba liblo
liblqr libmad libmcrypt libmikmod libmowgli libmpcdec
libmpdclient libmpeg2 libmspack libmusepack libmythes
libnet libnova libogg liboil libpciaccess libproxy
libraw1394 libsigsegv libstroke libtasn1 libusb1 libv4l
libvisual libx86 libxau libxdmcp libxmi libytnef
link-grammar linux_logo lpsolve lsof ltrace lxsplit lzo
m17n-db mcpp mhash mp3wrap mpck mpg123 mt-st mtx
muparser nasm ne netkit-bsd-finger netselect nspr
nss-mdns ntfs-3g ntfsprogs openal openjpeg openslp
pdksh perl-term-readkey pixman pm-utils potrace procmail
proftpd psutils pth pwgen pyogg qstat razor rcs
recode rpmunpack rssh sbcl sdl setserial sg3_utils
silc-toolkit slang snarf squashfs-tools srm strace
streamripper sysklogd syslinux tcl tidyhtml time tpb
tree tsocks unarj unison v86d valgrind vconfig vsftpd
watchdog wavpack wipe wmii xf86-input-aiptek
xf86-input-calcomp xf86-input-citron xf86-input-digitaledge
xf86-input-dmc xf86-input-dynapro xf86-input-elo2300
xf86-input-elographics xf86-input-evdev xf86-input-fpit
xf86-input-hyperpen xf86-input-jamstudio
xf86-input-joystick xf86-input-keyboard xf86-input-magellan
xf86-input-magictouch xf86-input-microtouch
xf86-input-mouse xf86-input-mutouch xf86-input-palmax
xf86-input-penmount xf86-input-spaceorb xf86-input-summa
xf86-input-tek4957 xf86-input-ur98 xf86-input-vmmouse
xf86-input-void xf86-video-apm xf86-video-ark
xf86-video-chips xf86-video-cirrus xf86-video-dummy
xf86-video-fbdev xf86-video-glint xf86-video-i128
xf86-video-i740 xf86-video-mach64 xf86-video-mga
xf86-video-neomagic xf86-video-nv xf86-video-r128
xf86-video-radeonhd xf86-video-rendition xf86-video-s3
xf86-video-s3virge xf86-video-savage
xf86-video-siliconmotion xf86-video-sis xf86-video-sisusb
xf86-video-tdfx xf86-video-trident xf86-video-tseng
xf86-video-v4l xf86-video-vesa xf86-video-vga
xf86-video-vmware xf86-video-voodoo xsnow xtermcontrol
xvidcore yasm yp-tools zip nvidia-cg-toolkit adns
anacron apg arpack aumix-gtk axel bbpager bchunk
bin2iso binutils-avr calc ccd2iso ccrypt chrootuid
chrpath cksfv confuse cross-arm-elf-binutils
cross-arm-wince-cegcc-cegccdll
cross-arm-wince-cegcc-cegccdll-dummy
cross-arm-wince-cegcc-cegccthrddll
cross-arm-wince-cegcc-docs cross-arm-wince-cegcc-gcc-base
cross-arm-wince-cegcc-importlibs
cross-arm-wince-cegcc-libstdcppdll
cross-arm-wince-cegcc-newlib cross-arm-wince-cegcc-profile
cross-arm-wince-cegcc-w32api cutter cvs-feature darkhttpd
datemath dgpsip docbook2x duff dumb eina-svn embryo-svn
esekeyd fcrackzip floyd freedroid gavl gnustep-make
hashcash iasl iniparser inputattach ircservices jbigkit
jdk jre libasyncns libcgi libdlna libev libmemcached
libnfnetlink libnsbmp libnsgif libparserutils librcd
libtextcat libtlen libtrash libupnp libvc libxdg-basedir
linuxtv-dvb-apps mdf2iso mingw32-binutils moreutils
mp3gain mxml nemesis nrg2iso oidentd optipng pdnsd
pptpd pv pyid3lib recoverdm sarg scponly
selinux-coreutils selinux-flex selinux-pam
selinux-sysvinit ser2net shapelib shfs-utils simh splint
sshguard stegdetect swarp synce-libsynce synce-rra
sysstat t1utils tclgeomap tinycdb toolame tre
ultimate-ircd unrtf uptimed ustr visitors xmms-volnorm
xvkbd
Conflicts With : None
Replaces : glibc-xen
Download Size : 12559.29 K
Installed Size : 35776.00 K
Packager : Jan de Groot <jgc at archlinux.org>
Architecture : x86_64
Build Date : Sun 23 Aug 2009 09:24:37 AM CDT
MD5 Sum : c9ab969684213e48b8d0b80ae18a89cd
Description : GNU C Library
More information about the pacman-dev
mailing list