Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Implement `pkg delete -D`.
Romain Tartière committed 13 years ago
commit 1610cfaff1c204d23fb824fc98249cdc35c43984
parent dd9bfd6
6 files changed +19 -7
modified libpkg/pkg.h.in
@@ -295,6 +295,7 @@ typedef enum _pkg_flags {
	PKG_FLAG_RECURSIVE = (1U << 2),
	PKG_FLAG_AUTOMATIC = (1U << 3),
	PKG_FLAG_WITH_DEPS = (1U << 4),
+
	PKG_FLAG_NOSCRIPT = (1U << 5),
} pkg_flags;

typedef enum _pkg_config_key {
modified libpkg/pkg_delete.c
@@ -97,6 +97,7 @@ pkg_delete(struct pkg *pkg, struct pkgdb *db, unsigned flags)
	if (handle_rc)
		pkg_start_stop_rc_scripts(pkg, PKG_RC_STOP);

+
	if ((flags & PKG_DELETE_NOSCRIPT) == 0) {
	if (flags & PKG_DELETE_UPGRADE) {
		ret = pkg_script_run(pkg, PKG_SCRIPT_PRE_UPGRADE);
		if (ret != EPKG_OK)
@@ -106,11 +107,12 @@ pkg_delete(struct pkg *pkg, struct pkgdb *db, unsigned flags)
		if (ret != EPKG_OK)
			return (ret);
	}
+
	}

	if ((ret = pkg_delete_files(pkg, flags & PKG_DELETE_FORCE)) != EPKG_OK)
		return (ret);

-
	if ((flags & PKG_DELETE_UPGRADE) == 0) {
+
	if ((flags & (PKG_DELETE_NOSCRIPT | PKG_DELETE_UPGRADE)) == 0) {
		ret = pkg_script_run(pkg, PKG_SCRIPT_POST_DEINSTALL);
		if (ret != EPKG_OK)
			return (ret);
modified libpkg/pkg_jobs.c
@@ -508,6 +508,9 @@ pkg_jobs_deinstall(struct pkg_jobs *j)
	if ((j->flags & PKG_FLAG_FORCE) != 0)
		flags = PKG_DELETE_FORCE;

+
	if ((j->flags & PKG_FLAG_NOSCRIPT) != 0)
+
		flags |= PKG_DELETE_NOSCRIPT;
+

	while (pkg_jobs(j, &p) == EPKG_OK) {
		retcode = pkg_delete(p, j->db, flags);

modified libpkg/private/pkg.h
@@ -257,6 +257,7 @@ typedef enum {
int pkg_delete(struct pkg *pkg, struct pkgdb *db, unsigned flags);
#define PKG_DELETE_FORCE (1<<0)
#define PKG_DELETE_UPGRADE (1<<1)
+
#define PKG_DELETE_NOSCRIPT (1<<2)

int pkg_fetch_file_to_fd(const char *url, int dest, time_t t);
int pkg_repo_fetch(struct pkg *pkg);
modified pkg/delete.c
@@ -40,8 +40,8 @@
void
usage_delete(void)
{
-
	fprintf(stderr, "usage: pkg delete [-fginqRxy] <pkg-name> ...\n");
-
	fprintf(stderr, "       pkg delete [-nqy] -a\n\n");
+
	fprintf(stderr, "usage: pkg delete [-DfginqRxy] <pkg-name> ...\n");
+
	fprintf(stderr, "       pkg delete [-Dnqy] -a\n\n");
	fprintf(stderr, "For more information see 'pkg help delete'.\n");
}

@@ -62,11 +62,14 @@ exec_delete(int argc, char **argv)

	pkg_config_bool(PKG_CONFIG_ASSUME_ALWAYS_YES, &yes);

-
	while ((ch = getopt(argc, argv, "afginqRxy")) != -1) {
+
	while ((ch = getopt(argc, argv, "aDfginqRxy")) != -1) {
		switch (ch) {
		case 'a':
			match = MATCH_ALL;
			break;
+
		case 'D':
+
			f |= PKG_FLAG_NOSCRIPT;
+
			break;
		case 'f':
			f |= PKG_FLAG_FORCE;
			force = true;
modified pkg/pkg-delete.8
@@ -15,7 +15,7 @@
.\"     @(#)pkg.8
.\" $FreeBSD$
.\"
-
.Dd January 20, 2013
+
.Dd January 25, 2013
.Dt PKG-DELETE 8
.Os
.Sh NAME
@@ -23,10 +23,10 @@
.Nd deletes packages from the database and the system
.Sh SYNOPSIS
.Nm
-
.Op Fl fginqRxy
+
.Op Fl DfginqRxy
.Ar <pkg-name> ...
.Nm
-
.Op Fl nqy
+
.Op Fl Dnqy
.Fl a
.Sh DESCRIPTION
.Nm
@@ -55,6 +55,8 @@ The following options are supported by
.Bl -tag -width F1
.It Fl a
Deletes all installed packages from the system and empties the database.
+
.It Fl D
+
If a deinstallation script exists for a given package, do not execute it.
.It Fl f
Forces packages to be removed despite leaving unresolved dependencies.
.It Fl g