pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools/pkg_install/files pkg_install-20090225:



details:   https://anonhg.NetBSD.org/pkgsrc/rev/d778a7b8c576
branches:  trunk
changeset: 555162:d778a7b8c576
user:      joerg <joerg%pkgsrc.org@localhost>
date:      Wed Feb 25 16:29:08 2009 +0000

description:
pkg_install-20090225:
Rewrite pkg_delete to expand the list of packages to delete first and
reorder it if necessary. It will bail out if it knows in advance that it
can't remove a package. It will also fail for errors while removing one
package, unless forced. Add an option to remove automatically installed
packages that are no longer used.

The pkgviews support is kept, but untested. The error handling for
pkgviews most of all is as weak as before.

Basic review from hubertf@, man page changes by bad@.

diffstat:

 pkgtools/pkg_install/files/delete/Makefile.in     |    6 +-
 pkgtools/pkg_install/files/delete/delete.h        |   41 -
 pkgtools/pkg_install/files/delete/main.c          |  229 -----
 pkgtools/pkg_install/files/delete/perform.c       |  873 --------------------
 pkgtools/pkg_install/files/delete/pkg_delete.1    |   49 +-
 pkgtools/pkg_install/files/delete/pkg_delete.c    |  919 ++++++++++++++++++++++
 pkgtools/pkg_install/files/delete/pkg_delete.cat1 |   35 +-
 pkgtools/pkg_install/files/lib/version.h          |    4 +-
 8 files changed, 973 insertions(+), 1183 deletions(-)

diffs (truncated from 2295 to 300 lines):

diff -r ec868cc25844 -r d778a7b8c576 pkgtools/pkg_install/files/delete/Makefile.in
--- a/pkgtools/pkg_install/files/delete/Makefile.in     Wed Feb 25 16:16:33 2009 +0000
+++ b/pkgtools/pkg_install/files/delete/Makefile.in     Wed Feb 25 16:29:08 2009 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.in,v 1.12 2008/03/10 12:14:32 wiz Exp $
+# $NetBSD: Makefile.in,v 1.13 2009/02/25 16:29:08 joerg Exp $
 
 srcdir=                @srcdir@
 
@@ -14,7 +14,7 @@
 CC=            @CC@
 CCLD=          $(CC)
 LIBS=          -linstall @LIBS@
-CPPFLAGS=      @CPPFLAGS@ -I. -I$(srcdir) -I../lib
+CPPFLAGS=      @CPPFLAGS@ -I. -I$(srcdir) -I../lib -DBINDIR=\"$(sbindir)\"
 DEFS=          @DEFS@
 CFLAGS=                @CFLAGS@
 LDFLAGS=       @LDFLAGS@ -L../lib
@@ -23,7 +23,7 @@
 
 PROG=          pkg_delete
 
-OBJS=  main.o perform.o
+OBJS=          pkg_delete.o
 
 all: $(PROG)
 
diff -r ec868cc25844 -r d778a7b8c576 pkgtools/pkg_install/files/delete/delete.h
--- a/pkgtools/pkg_install/files/delete/delete.h        Wed Feb 25 16:16:33 2009 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/* $NetBSD: delete.h,v 1.6 2009/02/02 12:35:01 joerg Exp $ */
-
-/* from FreeBSD Id: delete.h,v 1.4 1997/02/22 16:09:35 peter Exp */
-
-/*
- * FreeBSD install - a package for the installation and maintainance
- * of non-core utilities.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * Jordan K. Hubbard
- * 18 July 1993
- *
- * Include and define various things wanted by the delete command.
- *
- */
-
-#ifndef _INST_DELETE_H_INCLUDE
-#define _INST_DELETE_H_INCLUDE
-
-extern char *Destdir;
-extern char *Prefix;
-extern char *ProgramPath;
-extern Boolean NoDeleteFiles;
-extern Boolean NoDeInstall;
-extern Boolean CleanDirs;
-extern Boolean Force;
-extern Boolean Recurse_up;
-extern Boolean Recurse_down;
-extern lpkg_head_t pkgs;
-
-int     pkg_perform(lpkg_head_t *);
-
-#endif                         /* _INST_DELETE_H_INCLUDE */
diff -r ec868cc25844 -r d778a7b8c576 pkgtools/pkg_install/files/delete/main.c
--- a/pkgtools/pkg_install/files/delete/main.c  Wed Feb 25 16:16:33 2009 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-/*     $NetBSD: main.c,v 1.22 2009/02/02 12:35:01 joerg Exp $  */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <nbcompat.h>
-#if HAVE_SYS_CDEFS_H
-#include <sys/cdefs.h>
-#endif
-__RCSID("$NetBSD: main.c,v 1.22 2009/02/02 12:35:01 joerg Exp $");
-
-/*
- *
- * FreeBSD install - a package for the installation and maintainance
- * of non-core utilities.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * Jordan K. Hubbard
- * 18 July 1993
- *
- * This is the delete module.
- *
- */
-
-#if HAVE_ERR_H
-#include <err.h>
-#endif
-#include "lib.h"
-#include "delete.h"
-
-static char Options[] = "DdFfhK:NnOp:P:RrVv";
-
-char   *Destdir = NULL;
-char   *Pkgdb = NULL;
-char   *Prefix = NULL;
-char   *ProgramPath = NULL;
-Boolean NoDeleteFiles = FALSE;
-Boolean NoDeInstall = FALSE;
-Boolean CleanDirs = FALSE;
-Boolean File2Pkg = FALSE;
-Boolean Recurse_up = FALSE;
-Boolean Recurse_down = FALSE;
-Boolean OnlyDeleteFromPkgDB = FALSE;
-lpkg_head_t pkgs;
-
-static void
-usage(void)
-{
-       fprintf(stderr, "usage: pkg_delete [-DdFfNnORrVv] [-K pkg_dbdir] [-P destdir] [-p prefix] pkg-name ...\n");
-       exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
-       lpkg_t *lpp;
-       int     ex;
-       int     ch;
-
-       setprogname(argv[0]);
-
-       ProgramPath = argv[0];
-
-       while ((ch = getopt(argc, argv, Options)) != -1)
-               switch (ch) {
-               case 'D':
-                       NoDeInstall = TRUE;
-                       break;
-
-               case 'd':
-                       CleanDirs = TRUE;
-                       break;
-
-               case 'F':
-                       File2Pkg = TRUE;
-                       break;
-
-               case 'f':
-                       Force += 1;
-                       break;
-
-               case 'K':
-                       Pkgdb = xstrdup(optarg);
-                       break;
-
-               case 'N':
-                       NoDeleteFiles = TRUE;
-                       NoDeInstall = TRUE;
-                       break;
-
-               case 'n':
-                       Fake = TRUE;
-                       Verbose = TRUE;
-                       break;
-
-               case 'O':
-                       OnlyDeleteFromPkgDB = TRUE;
-                       break;
-
-               case 'P':
-                       Destdir = optarg;
-                       break;
-
-               case 'p':
-                       Prefix = optarg;
-                       break;
-
-               case 'R':
-                       Recurse_down = TRUE;
-                       break;
-
-               case 'r':
-                       Recurse_up = TRUE;
-                       break;
-
-               case 'V':
-                       show_version();
-                       /* NOTREACHED */
-
-               case 'v':
-                       Verbose = TRUE;
-                       break;
-
-               case 'h':
-               case '?':
-               default:
-                       usage();
-                       break;
-               }
-
-       argc -= optind;
-       argv += optind;
-
-       TAILQ_INIT(&pkgs);
-
-       if (Pkgdb == NULL)
-               Pkgdb = xstrdup(_pkgdb_getPKGDB_DIR());
-
-       if (Destdir != NULL) {
-               char *pkgdbdir;
-
-               pkgdbdir = xasprintf("%s/%s", Destdir, Pkgdb);
-               _pkgdb_setPKGDB_DIR(pkgdbdir);
-               free(pkgdbdir);
-       } else {
-               _pkgdb_setPKGDB_DIR(Pkgdb);
-       }
-
-       /* Get all the remaining package names, if any */
-       if (File2Pkg && !pkgdb_open(ReadOnly)) {
-               err(EXIT_FAILURE, "cannot open pkgdb");
-       }
-
-       /* Get all the remaining package names, if any */
-       for ( ; *argv ; argv++) {
-               /* pkgdb: if -F flag given, don't add pkgnames to pkgs but
-                * rather resolve the given filenames to pkgnames using
-                * pkgdb_retrieve, then add these. */
-               if (File2Pkg) {
-                       char   *s;
-
-                       if ((s = pkgdb_retrieve(*argv)) == NULL) {
-                               errx(EXIT_FAILURE, "No matching pkg for %s in pkgdb.", *argv);
-                       }
-                       lpp = alloc_lpkg(s);
-                       TAILQ_INSERT_TAIL(&pkgs, lpp, lp_link);
-               } else if (ispkgpattern(*argv)) {
-                       switch (add_installed_pkgs_by_pattern(*argv, &pkgs)) {
-                       case 0:
-                               errx(EXIT_FAILURE, "No matching pkg for %s.", *argv);
-                       case -1:
-                               errx(EXIT_FAILURE, "error expanding '%s' ('%s' nonexistent?)", *argv, _pkgdb_getPKGDB_DIR());
-                       }
-               } else {
-                       if (**argv == '/' && strncmp(*argv, Pkgdb, strlen(Pkgdb)) == 0) {
-                               *argv += strlen(Pkgdb) + 1;
-                               if ((*argv)[strlen(*argv) - 1] == '/') {
-                                       (*argv)[strlen(*argv) - 1] = 0;
-                               }
-                       }
-                       lpp = alloc_lpkg(*argv);
-                       TAILQ_INSERT_TAIL(&pkgs, lpp, lp_link);
-               }
-       }
-
-       if (File2Pkg) {
-               pkgdb_close();
-       }
-
-       /* If no packages, yelp */
-       if (TAILQ_FIRST(&pkgs) == NULL) {
-               warnx("missing package name(s)");
-               usage();
-       }
-
-       if (OnlyDeleteFromPkgDB) {
-               /* Only delete the given packages' files from pkgdb, do not
-                * touch the pkg itself. Used by "make reinstall" in
-                * bsd.pkg.mk */
-               char    cachename[MaxPathSize];
-
-               if (!pkgdb_open(ReadWrite)) {
-                       err(EXIT_FAILURE, "cannot open %s", _pkgdb_getPKGDB_FILE(cachename, sizeof(cachename)));
-               }
-               ex = EXIT_SUCCESS;
-               for (lpp = TAILQ_FIRST(&pkgs); lpp ; lpp = TAILQ_NEXT(lpp, lp_link)) {
-                       if (!pkgdb_remove_pkg(lpp->lp_name)) {
-                               ex = EXIT_FAILURE;
-                       }
-               }
-               pkgdb_close();
-               return ex;
-       }
-       if ((ex = pkg_perform(&pkgs)) != 0) {
-               if (Verbose) {
-                       warnx("%d package deletion(s) failed", ex);



Home | Main Index | Thread Index | Old Index