[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;
}
|