bin/167336: pkg_info can't determine what package a missing file is related to

Jim Pirzyk pirzyk at FreeBSD.org
Thu Apr 26 16:40:11 UTC 2012


>Number:         167336
>Category:       bin
>Synopsis:       pkg_info can't determine what package a missing file is related to
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Apr 26 16:40:10 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Jim Pirzyk
>Release:        FreeBSD 9.0-RELEASE amd64
>Organization:
>Environment:
System: FreeBSD freebsd.home.pirzyk.org 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64

>Description:
	Can't programmatically determine the package that is related to the 'pkg_info -g' output like:

/usr/local/foo/bar/baz.txt doesn't exist

	This is because the "doesn't exist" line was written out using STDERR whereas the lines:

Information for pkg-1.2.3:

	was written out using STDOUT.  If you combine the output streams in a perl script ala:

open ($FP, "/usr/sbin/pkg_info -a -g 2>&1 |" ) ...

	then the order is undefined and you can't associate the "doesn't exist" line with the "Information for" line.
	Furthermore if you try to use the -W option on pkg_info, it does not process the file and just gives you the error:

pkg_info: /usr/local/foo/bar/baz.txt: file cannot be found

>How-To-Repeat:
	Remove a file from a package and then run:

pkg_info -a -g | cat

	and try to determine which package the missing file is from.  Then run:

pkg_info -W <DELETED_FILE>

>Fix:

--- ./pkg_install/info/show.c.orig	2012-01-02 22:25:51.000000000 -0500
+++ ./pkg_install/info/show.c	2012-04-26 11:21:58.039342463 -0400
@@ -330,7 +330,7 @@
 	} else if (p->type == PLIST_FILE) {
 	    snprintf(tmp, FILENAME_MAX, "%s/%s", dir, p->name);
 	    if (!fexists(tmp))
-		warnx("%s doesn't exist", tmp);
+		printf("%s doesn't exist\n", tmp);
 	    else if (p->next && p->next->type == PLIST_COMMENT &&
 	             (strncmp(p->next->name, "MD5:", 4) == 0)) {
 		char *cp = NULL, buf[33];
--- ./pkg_install/info/perform.c.orig	2012-01-02 22:25:51.000000000 -0500
+++ ./pkg_install/info/perform.c	2012-04-26 11:44:29.951086716 -0400
@@ -359,8 +359,6 @@
 	    }
 	    free(tmp);
 	}
-	if (wp->skip == TRUE)
-	    warnx("%s: %s", wp->file, msg);
     }
 
     installed = matchinstalled(MATCH_ALL, NULL, &errcode);
@@ -390,8 +388,6 @@
 		cwd = itr->name;
 	    } else if (itr->type == PLIST_FILE) {
 		TAILQ_FOREACH(wp, which_list, next) {
-		    if (wp->skip == TRUE)
-			continue;
 		    if (!cmp_path(wp->file, itr->name, cwd))
 			continue;
 		    if (wp->package[0] != '\0') {


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list