[Fpkg-cvs] CVS: freepkg/lib depend.c entry.c lib.h manager.c match.c msg.c package.c show.c
Status: Alpha
Brought to you by:
jlea
From: Jeremy L. <jl...@us...> - 2004-04-30 09:53:25
|
jlea 04/04/30 02:53:18 Modified: fpkg main.c info main.c lib depend.c entry.c lib.h manager.c match.c msg.c package.c show.c Log: Recursive deletes, list mode instead of show_index() and other fixes. Revision Changes Path 1.3 +34 -18 freepkg/fpkg/main.c Index: main.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/fpkg/main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- main.c 29 Apr 2004 13:25:30 -0000 1.2 +++ main.c 30 Apr 2004 09:53:18 -0000 1.3 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$Id: main.c,v 1.2 2004/04/29 13:25:30 jlea Exp $"); +__FBSDID("$Id: main.c,v 1.3 2004/04/30 09:53:18 jlea Exp $"); #include <sys/param.h> #include <sys/file.h> @@ -61,7 +61,7 @@ match_list ml = { PLIST_HEAD_INITIALIZER }; which_list wl = { PLIST_HEAD_INITIALIZER }; which_entry *w; - enum { DELETE, INFO, VERSION, WHICH } mode; + enum { DELETE, LIST, INFO, VERSION, WHICH } mode; signal(SIGINT, cleanup); signal(SIGHUP, cleanup); @@ -95,7 +95,7 @@ PkgMgr.verbose = TRUE; break; case 'i': - PkgMgr.interactive = INTERACT_USER; + PkgMgr.interactive = TRUE; break; case 'o': origin = TRUE; @@ -126,22 +126,24 @@ /* Process our command */ /* XXX: (jlea) Add abbrev. */ - if (!strcmp(*argv, "delete")) { + if (!strcmp(*argv, "delete")) mode = DELETE; - } else if (!strcmp(*argv, "info")) { + else if (!strcmp(*argv, "list")) + mode = LIST; + else if (!strcmp(*argv, "info")) mode = INFO; - if (!quiet) - PkgMgr.verbose = TRUE; - } else if (!strcmp(*argv, "version")) { + else if (!strcmp(*argv, "version")) mode = VERSION; - } else if (!strcmp(*argv, "which")) { + else if (!strcmp(*argv, "which")) mode = WHICH; - } else + else usage(); + if (!quiet && (mode == LIST || mode == INFO)) + PkgMgr.verbose = TRUE; switch(mode) { case DELETE: - while ((ch = getopt(argc, argv, "dD")) != -1) { + while ((ch = getopt(argc, argv, "dDrR")) != -1) { switch (ch) { case 'D': PkgMgr.noinstall = TRUE; @@ -149,6 +151,12 @@ case 'd': PkgMgr.cleandirs = TRUE; break; + case 'r': + PkgMgr.recurse = TRUE; + break; + case 'R': + PkgMgr.orphans = TRUE; + break; default: usage(); break; @@ -157,9 +165,15 @@ argc -= optind; argv += optind; break; + + case LIST: + argc -= optind; + argv += optind; + all = (*argv == NULL); + break; case INFO: - while ((ch = getopt(argc, argv, "cdDfgiIkl:LmoprRsv")) != -1) { + while ((ch = getopt(argc, argv, "cdDfgikl:LmoprRsv")) != -1) { switch (ch) { case 'c': flags |= PKG_SHOW_COMMENT; @@ -179,9 +193,6 @@ case 'i': flags |= PKG_SHOW_INSTALL; break; - case 'I': - flags |= PKG_SHOW_INDEX; - break; case 'k': flags |= PKG_SHOW_DEINSTALL; break; @@ -311,6 +322,10 @@ if ((err = pkg_mgr_delete(&ml)) != 0) msg_warn("%d package deletion(s) failed", err); break; + case LIST: + if ((err = pkg_mgr_list(&ml)) != 0) + msg_warn("%d package(s) failed", err); + break; case INFO: if (!flags) flags = PKG_SHOW_COMMENT | PKG_SHOW_DESC | PKG_SHOW_REQBY; @@ -344,9 +359,10 @@ " fpkg -e [package]\n" " fpkg -V\n" "commands: delete [-dD] [packages]\n" -" info [-l mask] -[I index] [packages]\n" -" version [-l mask] -[I index] [packages]\n" -" which [-F file] -[L lib] [-P plist]\n" +" list [packages]\n" +" info [-cdDfgikLmoprRsv] [-l prefix] [packages]\n" +" version [-l mask] [-I index] [packages]\n" +" which [-F file] [-L lib] [-P plist]\n" ); exit(1); } 1.4 +27 -37 freepkg/info/main.c Index: main.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/info/main.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- main.c 29 Apr 2004 14:14:08 -0000 1.3 +++ main.c 30 Apr 2004 09:53:18 -0000 1.4 @@ -47,10 +47,10 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.3 2004/04/29 14:14:08 jlea Exp $"; + "$Id: main.c,v 1.4 2004/04/30 09:53:18 jlea Exp $"; #endif -static char Options[] = "acdDe:fghiIkl:LmopqrRst:v"; +static char Options[] = "acdDe:fghiIkl:LmoOpqrRst:v"; static void usage(void); void cleanup(int); @@ -60,7 +60,7 @@ { int ch, err = 0; unsigned int flags = PKG_SHOW_NONE; - boolean all = FALSE; + boolean all = FALSE, index = FALSE, origin = FALSE; match_list ml = { PLIST_HEAD_INITIALIZER }; signal(SIGINT, cleanup); @@ -68,98 +68,78 @@ pkg_mgr_init(); PkgMgr.verbose = TRUE; - if (argc == 1) { - all = TRUE; - flags = PKG_SHOW_INDEX; - } + if (argc == 1) + all = index = TRUE; else while ((ch = getopt(argc, argv, Options)) != -1) { switch(ch) { case 'a': all = TRUE; break; - case 'v': /* Reasonable definition of 'everything' */ flags = PKG_SHOW_COMMENT | PKG_SHOW_DESC | PKG_SHOW_PLIST | PKG_SHOW_INSTALL | PKG_SHOW_DEINSTALL | PKG_SHOW_REQUIRE | PKG_SHOW_DISPLAY | PKG_SHOW_MTREE; break; - case 'I': - flags |= PKG_SHOW_INDEX; + index = TRUE; break; - case 'p': flags |= PKG_SHOW_PREFIX; break; - case 'c': flags |= PKG_SHOW_COMMENT; break; - case 'd': flags |= PKG_SHOW_DESC; break; - case 'D': flags |= PKG_SHOW_DISPLAY; break; - case 'f': flags |= PKG_SHOW_PLIST; break; - case 'g': flags |= PKG_SHOW_CHKSUM; break; - case 'i': flags |= PKG_SHOW_INSTALL; break; - case 'k': flags |= PKG_SHOW_DEINSTALL; break; - case 'r': flags |= PKG_SHOW_REQUIRE; break; - case 'R': flags |= PKG_SHOW_REQBY; break; - case 'L': flags |= PKG_SHOW_FILES; break; - case 'm': flags |= PKG_SHOW_MTREE; break; - case 's': flags |= PKG_SHOW_SIZE; break; - case 'o': flags |= PKG_SHOW_ORIGIN; break; - + case 'O': + origin = TRUE; + break; case 'l': PkgMgr.infoprefix = optarg; break; - case 'q': PkgMgr.verbose = FALSE; break; - case 't': strlcpy(PkgMgr.mktmp_template, optarg, PATH_MAX); break; - case 'e': pkg_mgr_start(); return (pkg_mgr_check(optarg) ? 0 : 1); - case 'h': case '?': default: @@ -176,21 +156,32 @@ pkg_mgr_start(); /* Set some reasonable defaults */ /* If no packages, yelp */ + if (!argc && index) + all = TRUE; if (!argc && !all) { - msg_warn("missing package name(s)"), usage(); + msg_warn("missing package name(s)"); + usage(); } /* Get all the remaining package names, if any */ if (all) { pkg_mgr_match(&ml, "*"); } else { - while (*argv) - pkg_mgr_match(&ml, *argv++); + while (*argv) { + if (origin) + pkg_mgr_origin(&ml, *argv++); + else + pkg_mgr_match(&ml, *argv++); + } } - if PLIST_EMPTY(&ml) { + if PLIST_EMPTY(&ml) msg_warn("no matching packages found"); + if (index) { + if ((err = pkg_mgr_list(&ml)) != 0) + msg_warn("%d package(s) failed", err); + } else { + if ((err = pkg_mgr_show(&ml, flags)) != 0) + msg_warn("%d package(s) failed", err); } - if ((err = pkg_mgr_show(&ml, flags)) != 0) - msg_warn("%d package(s) failed", err); free_match(&ml); return err; @@ -199,10 +190,9 @@ static void usage() { - fprintf(stderr, "%s\n%s\n%s\n%s\n", + fprintf(stderr, "%s\n%s\n%s\n", "usage: fpkg_info [-cdDfiIkLmoOpqrRsSvW] [-e package] [-l prefix]", " [-t template] [pkg-name ...]", - " fpkg_info [-W file] [-S shlib] [-O]", " fpkg_info -a [flags]"); exit(1); } 1.3 +10 -5 freepkg/lib/depend.c Index: depend.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/depend.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- depend.c 29 Apr 2004 13:25:31 -0000 1.2 +++ depend.c 30 Apr 2004 09:53:18 -0000 1.3 @@ -150,9 +150,16 @@ if (dl == NULL) return FAIL; PLIST_FOREACH(d, dl) { + if (d->w != NULL) + free(d->w); + d->w = NULL; + if (!NULLSTR(d->pkg) && pkg_mgr_check(d->pkg)) { + d->found = TRUE; + continue; + } else + d->found = FALSE; switch (d->type) { case DEPEND_PKG: - d->w = NULL; break; case DEPEND_LIB: d->w = add_which_entry(&wl, WHICH_LIBRARY, d->file); @@ -182,10 +189,8 @@ * Now that we have a good list, go through the work of checking it. */ PLIST_FOREACH(d, dl) { - if (!NULLSTR(d->pkg) && pkg_mgr_check(d->pkg)) { - d->found = TRUE; - break; - } + if (d->found) + continue; if (d->w != NULL) pe = scan_which_entry(d->w); else if (!NULLSTR(d->file)) 1.3 +94 -3 freepkg/lib/entry.c Index: entry.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/entry.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- entry.c 29 Apr 2004 13:25:31 -0000 1.2 +++ entry.c 30 Apr 2004 09:53:18 -0000 1.3 @@ -513,6 +513,7 @@ return FAIL; if (scan_pkg_entry(pe) == FAIL) return FAIL; + /* XXX: (jlea) This should be part of PkgMgr */ if (getuid() != 0) msg_warn("not running as root - trying to record install anyway"); msg_verbose("Attempting to record package into %s/.\n", pe->dbdir); @@ -521,7 +522,6 @@ pe->dbdir); return FAIL; } - msg_verbose("Attempting to record package into %s/.\n", pe->dbdir); if (register_package(pe->pkg, pe->dbdir) == FAIL) return FAIL; if (add_package_filedb(pe->pkg) == FAIL) @@ -577,12 +577,74 @@ } /* + * Build a list of all of the packages which require the package in + * question. + */ +error_code +requires_pkg_entry(match_list *ml, pkg_entry *pe) +{ + name_entry *n; + pkg_entry *rp; + + if (ml == NULL || pe == NULL) + return FAIL; + if (pe->status != PKG_REGISTERED || NULLSTR(pe->dbdir)) + return FAIL; + if (scan_pkg_entry(pe) == FAIL) + return FAIL; + PLIST_FOREACH(n, &pe->pkg->requires) { + if ((rp = find_pkg_entry(n->name)) == NULL) + return FAIL; + if (add_match_head(ml, rp) == NULL) + return FAIL; + } + return SUCCESS; +} + +/* + * Build a list of all of the packages which would be 'orphaned' if this + * package was deleted. These are ports which would no longer be required + * by any other port. + */ +error_code +orphaned_pkg_entry(match_list *ml, pkg_entry *pe) +{ + depend_entry *d; + name_entry *n; + pkg_entry *dp; + + if (ml == NULL || pe == NULL) + return FAIL; + if (pe->status != PKG_REGISTERED || NULLSTR(pe->dbdir)) + return FAIL; + if (scan_pkg_entry(pe) == FAIL) + return FAIL; + check_depend(&pe->pkg->depends); + PLIST_FOREACH(d, &pe->pkg->depends) { + if (!d->found) + continue; + if ((dp = find_pkg_entry(d->pkg)) == NULL) + return FAIL; + if (dp->status != PKG_REGISTERED || scan_pkg_entry(dp) == FAIL) + return FAIL; + n = PLIST_FIRST(&dp->pkg->requires); + if (n == PLIST_LAST(&dp->pkg->requires) + && strcmp(n->name, basename_of(pe->dbdir)) == 0) { + if (add_match_entry(ml, dp) == NULL) + return FAIL; + } + } + return SUCCESS; +} + +/* * Delete a package entry. */ error_code delete_pkg_entry(pkg_entry *pe) { plist_entry *p; + name_entry *n; if (pe == NULL) return FAIL; @@ -599,11 +661,18 @@ if (strcmp(p->name,PkgMgr.prefix_override) != 0) return FAIL; } + if (!PLIST_EMPTY(&pe->pkg->requires)) { + msg_note("package `%s' is required by these other packages\n" + "and may not be deinstalled%s:\n", + pe->pkg->name, PkgMgr.force ? " (but I'll delete it anyway)" : "" ); + PLIST_FOREACH(n, &pe->pkg->requires) + msg_note("%s\n", n->name); + if (!PkgMgr.force) + return FAIL; + } if (!msg_prompt(TRUE, "Do you really want to delete `%s'", pe->pkg->name)) return FAIL; - if (required_package(pe->pkg) && !PkgMgr.force) - return FAIL; pe->status = PKG_DELETE; if (remove_package_filedb(pe->pkg) == FAIL && !PkgMgr.force) return FAIL; @@ -695,6 +764,28 @@ } /* + * Output pretty information about a package entry. + */ +error_code +show_pkg_entry(pkg_entry *pe, unsigned int flags) +{ + + if (pe->status == PKG_UNKNOWN) { + /* XXX: (jlea) This should used pkg_mgr_add_master() */ + if (fetch_pkg_entry(pe) == FAIL) + return FAIL; + if (extract_pkg_entry(pe, FALSE) == FAIL) + return FAIL; + pe->status = PKG_TEMP; + /* We can't size packages that are not installed */ + flags &= ~PKG_SHOW_SIZE; + } + if (scan_pkg_entry(pe) == FAIL) + return FAIL; + return show_package(pe->pkg, flags); +} + +/* * Try to work out the version of a package entry compared to the latest * version. */ 1.3 +16 -18 freepkg/lib/lib.h Index: lib.h =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/lib.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- lib.h 29 Apr 2004 13:25:31 -0000 1.2 +++ lib.h 30 Apr 2004 09:53:18 -0000 1.3 @@ -338,11 +338,6 @@ * whatever operation it was asked to perform, but might call these * functions if there was an error. */ -enum _interact_t { - INTERACT_NONE, INTERACT_YES, INTERACT_NO, INTERACT_USER -}; -typedef enum _interact_t interact_t; - struct _pkg_mgr { char wrkdir[PATH_MAX]; char dbdir[PATH_MAX]; @@ -355,7 +350,9 @@ boolean norecord; boolean cleandirs; boolean dereference; - interact_t interactive; + boolean recurse; + boolean orphans; + boolean interactive; char * excludefrom; char * infoprefix; @@ -464,6 +461,7 @@ match_entry * new_match_entry(void); void free_match(match_list *); match_entry * add_match_entry(match_list *, pkg_entry *); +match_entry * add_match_head(match_list *, pkg_entry *); /* plist.c */ plist_entry * new_plist_entry(void); @@ -485,28 +483,25 @@ #define PKG_SHOW_DEINSTALL 0x0010 #define PKG_SHOW_REQUIRE 0x0020 #define PKG_SHOW_PREFIX 0x0040 -#define PKG_SHOW_INDEX 0x0080 -#define PKG_SHOW_FILES 0x0100 -#define PKG_SHOW_DISPLAY 0x0200 -#define PKG_SHOW_REQBY 0x0400 -#define PKG_SHOW_MTREE 0x0800 -#define PKG_SHOW_SIZE 0x1000 -#define PKG_SHOW_ORIGIN 0x2000 -#define PKG_SHOW_CHKSUM 0x4000 -#define PKG_SHOW_CONFLICTS 0x8000 +#define PKG_SHOW_FILES 0x0080 +#define PKG_SHOW_DISPLAY 0x0100 +#define PKG_SHOW_REQBY 0x0200 +#define PKG_SHOW_MTREE 0x0400 +#define PKG_SHOW_SIZE 0x0800 +#define PKG_SHOW_ORIGIN 0x1000 +#define PKG_SHOW_CHKSUM 0x2000 +#define PKG_SHOW_CONFLICTS 0x4000 error_code show_file(char *, char *); error_code show_plist(char *, package *, plist_t); error_code show_files(char *, package *); error_code show_depend(char *, depend_list *); -error_code show_index(char *, char *); error_code show_size(char *, package *); error_code show_chksum(char *, package *); error_code show_origin(char *, package *); error_code show_conflicts(char *, package *); error_code show_version(const char *, const char *, const char *); error_code show_package(package *, unsigned int); -error_code show_pkg_entry(pkg_entry *, unsigned int); /* package.c */ package * new_package(void); @@ -522,7 +517,6 @@ boolean conflict_package(package *); error_code depend_package(package *, char*); error_code undepend_package(package *); -boolean required_package(package *); error_code delete_package(package *); error_code make_package(package *, char *); error_code upgrade_package(package *, package *); @@ -542,10 +536,13 @@ error_code install_pkg_entry(pkg_entry *); error_code register_pkg_entry(pkg_entry *); error_code write_pkg_entry(pkg_entry *); +error_code requires_pkg_entry(match_list *, pkg_entry *); +error_code orphaned_pkg_entry(match_list *, pkg_entry *); error_code delete_pkg_entry(pkg_entry *); pkg_entry * create_pkg_entry(pkg_info *, char *); error_code package_pkg_entry(pkg_entry *, char *); error_code upgrade_pkg_entry(pkg_entry *, pkg_entry *); +error_code show_pkg_entry(pkg_entry *, unsigned int); error_code version_pkg_entry(pkg_entry *); /* manager.c */ @@ -566,6 +563,7 @@ char * pkg_mgr_create_port(pkg_info *, char *); error_code pkg_mgr_create_backup(char *, char *); error_count pkg_mgr_show(match_list *, unsigned int); +error_count pkg_mgr_list(match_list *); error_code pkg_mgr_which(which_list *); error_count pkg_mgr_version(match_list *); 1.3 +54 -10 freepkg/lib/manager.c Index: manager.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/manager.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- manager.c 29 Apr 2004 13:25:31 -0000 1.2 +++ manager.c 30 Apr 2004 09:53:18 -0000 1.3 @@ -83,7 +83,9 @@ PkgMgr.norecord = FALSE; PkgMgr.cleandirs = FALSE; PkgMgr.dereference = FALSE; - PkgMgr.interactive = INTERACT_NONE; + PkgMgr.recurse = FALSE; + PkgMgr.orphans = FALSE; + PkgMgr.interactive = FALSE; PkgMgr.msg = &vprintf; PkgMgr.warn = &vwarnx; PkgMgr.err = &verrx; @@ -475,8 +477,7 @@ } /* - * Delete all installed packages in the match_list. We stop after the first - * failure. + * Delete all installed packages in the match_list. */ error_count pkg_mgr_delete(match_list *ml) @@ -488,11 +489,24 @@ return FAIL; while (!PLIST_EMPTY(ml)) { m = PLIST_FIRST(ml); - if (delete_pkg_entry(m->pe) == FAIL) { - /* XXX: (jlea) Add recursive removal here! */ - err_cnt++; - break; + if (m->pe->status != PKG_REGISTERED || NULLSTR(m->pe->dbdir)) + return FAIL; + if (scan_pkg_entry(m->pe) == FAIL) + return FAIL; + if (PkgMgr.recurse) { + if (requires_pkg_entry(ml, m->pe) == FAIL) + return FAIL; } + /* If we added new packages in the recurse, start again... */ + if (m != PLIST_FIRST(ml)) + continue; + if (PkgMgr.orphans) { + if (orphaned_pkg_entry(ml, m->pe) == FAIL) + return FAIL; + } + if (delete_pkg_entry(m->pe) == FAIL) + err_cnt++; + /* XXX: (jlea) Should we exit after 1 error? */ PLIST_REMOVE_HEAD(ml, m); free(m); } @@ -557,7 +571,7 @@ /* * Show information about all the matching packages, fetching and extracting - * it if it is a URL. XXX: (jlea) This should be in show.c + * it if it is a URL. */ error_count pkg_mgr_show(match_list *ml, unsigned int flags) @@ -577,8 +591,38 @@ } /* - * Show information about a which list. XXX: (jlea) This should be in show.c? - * Split this into one check and one show? Use the matchlist as a hint? + * Show information about all the matching packages, fetching and extracting + * it if it is a URL. + */ +error_count +pkg_mgr_list(match_list *ml) +{ + error_count err_cnt = 0; + char *cp, tmp[PATH_MAX]; + match_entry *m; + + if (ml == NULL) + return FAIL; + PLIST_FOREACH(m, ml) { + if (m->pe->status != PKG_REGISTERED) + continue; + if (PkgMgr.verbose) { + snprintf(tmp, PATH_MAX, "%s/%s", m->pe->dbdir, COMMENT_FNAME); + if ((cp = read_file(tmp)) == NULL) + err_cnt++; + else { + msg_note("%-19.19s %-59.59s\n", basename_of(m->pe->dbdir), cp); + free(cp); + } + } else + msg_note("%s\n", basename_of(m->pe->dbdir)); + } + return err_cnt; +} + +/* + * Show information about a which list. XXX: (jlea) Split this into one + * check and one show? */ error_count pkg_mgr_which(which_list *wl) 1.2 +24 -0 freepkg/lib/match.c Index: match.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/match.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- match.c 26 Apr 2004 00:05:24 -0000 1.1 +++ match.c 30 Apr 2004 09:53:18 -0000 1.2 @@ -97,3 +97,27 @@ PLIST_INSERT_TAIL(ml, m); return m; } + +/* + * Add an item to a match list. We remove duplicates already in the list. + */ +match_entry * +add_match_head(match_list *ml, pkg_entry *pe) +{ + match_entry *nm, *m, *tmp; + + if (ml == NULL || pe == NULL) + return NULL; + if ((nm = new_match_entry()) == NULL) + return NULL; + PLIST_FOREACH(m, ml) { + if (m->pe == pe) { + PLIST_REMOVE(ml, m, tmp); + free(m); + m = tmp; + } + } + nm->pe = pe; + PLIST_INSERT_HEAD(ml, nm); + return nm; +} 1.2 +1 -13 freepkg/lib/msg.c Index: msg.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/msg.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- msg.c 26 Apr 2004 00:05:57 -0000 1.1 +++ msg.c 30 Apr 2004 09:53:18 -0000 1.2 @@ -142,20 +142,8 @@ if (fmt == NULL) return FALSE; va_start(args, fmt); - switch (PkgMgr.interactive) { - case INTERACT_NONE: - break; - case INTERACT_YES: - resp = TRUE; - break; - case INTERACT_NO: - resp = FALSE; - break; - case INTERACT_USER: - if (PkgMgr.prompt != NULL) + if (PkgMgr.interactive && PkgMgr.prompt != NULL) resp = PkgMgr.prompt(resp, fmt, args); - break; - } va_end(args); return resp; } 1.3 +2 -23 freepkg/lib/package.c Index: package.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/package.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- package.c 29 Apr 2004 13:25:31 -0000 1.2 +++ package.c 30 Apr 2004 09:53:18 -0000 1.3 @@ -1090,24 +1090,6 @@ } /* - * Checks is a package is required. - */ -boolean -required_package(package *pkg) -{ - name_entry *n; - - if (pkg == NULL || PLIST_EMPTY(&pkg->requires)) - return FALSE; - msg_warn("package `%s' is required by these other packages\n" - "and may not be deinstalled%s:", - pkg->name, PkgMgr.force ? " (but I'll delete it anyway)" : "" ); - PLIST_FOREACH(n, &pkg->requires) - msg_warn("%s\n", n->name); - return TRUE; -} - -/* * Delete the results of a package installation. */ error_code @@ -1337,12 +1319,11 @@ * We take the package name we are passed and first slurp in the CONTENTS * file, getting name and origin, then we look for it's corresponding * Makefile. If that fails we pull in the INDEX, and check there. - * XXX: (jlea) This should be in show.c */ error_code version_package(package *pkg) { - char tmp[PATH_MAX], tmp2[PATH_MAX], *latest = NULL; + char tmp[PATH_MAX], *latest = NULL; index_entry *ie; /* @@ -1373,9 +1354,7 @@ /* Chop off the versions and compare. */ if (pkgroot_of(tmp, ie->name, PATH_MAX) == NULL) msg_error(2, "The INDEX does not appear to be valid!"); - if (pkgroot_of(tmp2, pkg->name, PATH_MAX) == NULL) - msg_warn("%s is not a valid package!", pkg->name); - if (strcmp(tmp, tmp2) == 0) { + if (strpcmp(tmp, pkg->name) == 0) { if (latest != NULL) { /* Multiple matches */ snprintf(tmp, PATH_MAX, "%s|%s", latest, ie->name); 1.4 +2 -60 freepkg/lib/show.c Index: show.c =================================================================== RCS file: /cvsroot/fpkg/freepkg/lib/show.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- show.c 29 Apr 2004 14:14:08 -0000 1.3 +++ show.c 30 Apr 2004 09:53:18 -0000 1.4 @@ -69,22 +69,6 @@ } /* - * Show the index entry for a package (pkgname and +COMMENT). - */ -error_code -show_index(char *pkgname, char *fname) -{ - char *cp; - - if (NULLSTR(pkgname) || NULLSTR(fname)) - return FAIL; - if ((cp = read_file(fname)) == NULL) - return FAIL; - printf("%s%-19.19s %-59.59s\n", PkgMgr.infoprefix, pkgname, cp); - return SUCCESS; -} - -/* * Show a packing list item type. If type is -1, show all. */ error_code @@ -397,7 +381,7 @@ /* * Do the work of comparing and outputing. Ugly, but well that's what - * You get when you try to match perl output in C ;-). + * you get when you try to match perl output in C ;-). */ error_code show_version(const char *installed, const char *latest, const char *source) @@ -477,10 +461,6 @@ if (pkg == NULL) return FAIL; - if (flags & PKG_SHOW_INDEX) { - msg_warn("invalid show types for package"); - return TRUE; - } /* Start showing the package contents */ msg_verbose("%sInformation for %s:\n\n", PkgMgr.infoprefix, pkg->name); @@ -522,43 +502,5 @@ if (err_cnt != 0) return FAIL; - return FALSE; -} - -/* - * Output pretty information about a package entry. - */ -error_code -show_pkg_entry(pkg_entry *pe, unsigned int flags) -{ - char tmp[PATH_MAX]; - - /* - * Index is a special info types that has to override all others to make - * any sense. It only applies to registered pacakges. - */ - /* XXX: (jlea) This needs work! */ - if (pe->status == PKG_UNKNOWN) { - /* XXX: (jlea) This should used pkg_mgr_add_master() */ - if (fetch_pkg_entry(pe) == FAIL) - return FAIL; - if (extract_pkg_entry(pe, FALSE) == FAIL) - return FAIL; - pe->status = PKG_TEMP; - /* We can't size packages that are not installed */ - flags &= ~PKG_SHOW_SIZE; - } - if (flags & PKG_SHOW_INDEX) { - if (pe->status != PKG_REGISTERED) - return FAIL; - if (enter_dir(pe->dbdir) == FAIL) - return FAIL; - pkgname_of(tmp, pe->dbdir, PATH_MAX); - if (show_index(tmp, COMMENT_FNAME) == FAIL) - return FAIL; - return SUCCESS; - } - if (scan_pkg_entry(pe) == FAIL) - return FAIL; - return show_package(pe->pkg, flags); + return SUCCESS; } |