Add -O option to only delete things from the pkgdb, and do not touch
anything else of the package or it's files. To be used on "make reinstall" by the buildsystem (quite exclusively).
This commit is contained in:
parent
3f2f7307b5
commit
fe7b9b969f
|
@ -1,11 +1,11 @@
|
|||
/* $NetBSD: main.c,v 1.8 1999/02/26 10:49:30 chopps Exp $ */
|
||||
/* $NetBSD: main.c,v 1.9 1999/03/03 17:29:58 hubertf Exp $ */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char *rcsid = "from FreeBSD Id: main.c,v 1.11 1997/10/08 07:46:48 charnier Exp";
|
||||
#else
|
||||
__RCSID("$NetBSD: main.c,v 1.8 1999/02/26 10:49:30 chopps Exp $");
|
||||
__RCSID("$NetBSD: main.c,v 1.9 1999/03/03 17:29:58 hubertf Exp $");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -31,10 +31,11 @@ __RCSID("$NetBSD: main.c,v 1.8 1999/02/26 10:49:30 chopps Exp $");
|
|||
*/
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include "lib.h"
|
||||
#include "delete.h"
|
||||
|
||||
static char Options[] = "hvDdnfFrp:";
|
||||
static char Options[] = "hvDdnfFrOp:";
|
||||
|
||||
char *Prefix = NULL;
|
||||
char *ProgramPath = NULL;
|
||||
|
@ -42,11 +43,12 @@ Boolean NoDeInstall = FALSE;
|
|||
Boolean CleanDirs = FALSE;
|
||||
Boolean File2Pkg = FALSE;
|
||||
Boolean Recurse = FALSE;
|
||||
Boolean OnlyDeleteFromPkgDB = FALSE;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: pkg_delete [-vDdnFfr] [-p prefix] pkg-name ...\n");
|
||||
fprintf(stderr, "usage: pkg_delete [-vDdnFfrO] [-p prefix] pkg-name ...\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -94,6 +96,10 @@ main(int argc, char **argv)
|
|||
Recurse = TRUE;
|
||||
break;
|
||||
|
||||
case 'O':
|
||||
OnlyDeleteFromPkgDB = TRUE;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
case '?':
|
||||
default:
|
||||
|
@ -139,7 +145,42 @@ main(int argc, char **argv)
|
|||
*pkgs = NULL;
|
||||
if (!Fake && getuid() != 0)
|
||||
errx(1, "you must be root to delete packages");
|
||||
if ((error = pkg_perform(start)) != 0) {
|
||||
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 *key, *val;
|
||||
char **s;
|
||||
|
||||
if (pkgdb_open(0)==-1) {
|
||||
err(1, "cannot open %s", _pkgdb_getPKGDB_FILE());
|
||||
}
|
||||
|
||||
error = 0;
|
||||
while ((key=pkgdb_iter())) {
|
||||
val=pkgdb_retrieve(key);
|
||||
|
||||
for (s=start; *s; s++) {
|
||||
if (strcmp(val, *s) == 0) {
|
||||
if (Verbose)
|
||||
printf("Removing file %s from pkgdb\n", key);
|
||||
|
||||
errno=0;
|
||||
if (pkgdb_remove(key)) {
|
||||
if (errno)
|
||||
printf("Error removing %s from pkgdb: %s\n", key, strerror(errno));
|
||||
else
|
||||
printf("Key %s not present in pkgdb?!\n", key);
|
||||
error = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pkgdb_close();
|
||||
|
||||
return error;
|
||||
|
||||
} else if ((error = pkg_perform(start)) != 0) {
|
||||
if (Verbose)
|
||||
warnx("%d package deletion(s) failed", error);
|
||||
return error;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: pkg_delete.1,v 1.7 1999/02/26 10:49:30 chopps Exp $
|
||||
.\" $NetBSD: pkg_delete.1,v 1.8 1999/03/03 17:29:58 hubertf Exp $
|
||||
.\"
|
||||
.\" FreeBSD install - a package for the installation and maintainance
|
||||
.\" of non-core utilities.
|
||||
|
@ -17,7 +17,7 @@
|
|||
.\"
|
||||
.\" from FreeBSD: @(#)pkg_delete.1
|
||||
.\"
|
||||
.Dd January 12, 1999
|
||||
.Dd March 3rd, 1999
|
||||
.Dt pkg_delete 1
|
||||
.Os FreeBSD 2.0
|
||||
.Sh NAME
|
||||
|
@ -25,7 +25,7 @@
|
|||
.Nd a utility for deleting previously installed software package distributions
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl vDdnFf
|
||||
.Op Fl vDdnFfO
|
||||
.Op Fl p Ar prefix
|
||||
.Ar pkg-name ...
|
||||
.Sh DESCRIPTION
|
||||
|
@ -79,6 +79,9 @@ If a deinstallation script exists for a given package, do not execute it.
|
|||
.It Fl n
|
||||
Don't actually deinstall a package, just report the steps that
|
||||
would be taken if it were.
|
||||
.It Fl O
|
||||
Only delete the package's entries from the package database, do not
|
||||
touch the package or it's files itself.
|
||||
.It Fl p Ar prefix
|
||||
Set
|
||||
.Ar prefix
|
||||
|
|
Loading…
Reference in New Issue