Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
script.c: code simplification.
Philippe Pepiot committed 14 years ago
commit e12cd5a08f40f979079f261793c2c4bc1fc705d6
parent e3ae210
4 files changed +42 -197
modified libpkg/pkg.h
@@ -608,10 +608,5 @@ int pkg_copy_tree(struct pkg *, const char *src, const char *dest);
/**
 * scripts handling
 */
-
int pkg_script_pre_install(struct pkg *);
-
int pkg_script_post_install(struct pkg *);
-
int pkg_script_pre_upgrade(struct pkg *);
-
int pkg_script_post_upgrade(struct pkg *);
-
int pkg_script_pre_deinstall(struct pkg *);
-
int pkg_script_post_deinstall(struct pkg *);
+
int pkg_script_run(struct pkg *, pkg_script_t type);
#endif
modified libpkg/pkg_add.c
@@ -164,7 +164,7 @@ pkg_add(struct pkgdb *db, const char *path, struct pkg **pkg_p)
	/*
	 * Execute pre-install scripts
	 */
-
	pkg_script_pre_install(pkg);
+
	pkg_script_run(pkg, PKG_SCRIPT_PRE_INSTALL);

	/*
	 * Extract the files on disk.
@@ -179,7 +179,7 @@ pkg_add(struct pkgdb *db, const char *path, struct pkg **pkg_p)
	/*
	 * Execute post install scripts
	 */
-
	pkg_script_post_install(pkg);
+
	pkg_script_run(pkg, PKG_SCRIPT_POST_INSTALL);

	cleanup_reg:
	pkgdb_register_finale(db, retcode);
modified libpkg/pkg_delete.c
@@ -60,13 +60,13 @@ pkg_delete(struct pkg *pkg, struct pkgdb *db, int force)
		sbuf_free(rdep_msg);
	}

-
	if ((ret = pkg_script_pre_deinstall(pkg)) != EPKG_OK)
+
	if ((ret = pkg_script_run(pkg, PKG_SCRIPT_PRE_DEINSTALL)) != EPKG_OK)
		return (ret);

	if ((ret = pkg_delete_files(pkg, force)) != EPKG_OK)
		return (ret);

-
	if ((ret = pkg_script_post_deinstall(pkg)) != EPKG_OK)
+
	if ((ret = pkg_script_run(pkg, PKG_SCRIPT_POST_DEINSTALL)) != EPKG_OK)
		return (ret);

	if ((ret = pkg_delete_dirs(pkg, force)) != EPKG_OK)
modified libpkg/scripts.c
@@ -3,206 +3,56 @@
#include <pkg_error.h>

int
-
pkg_script_pre_install(struct pkg *pkg)
+
pkg_script_run(struct pkg *pkg, pkg_script_t type)
{
	struct pkg_script *script = NULL;
+
	pkg_script_t stype;
	struct sbuf *script_cmd = sbuf_new_auto();
-

-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		switch (pkg_script_type(script)) {
-
			case PKG_SCRIPT_INSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s PRE-INSTALL\n%s",
-
					pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
					pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_PRE_INSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* ignored to prevent warning */
-
				break;
-
		}
-
	}
-

-
	sbuf_delete(script_cmd);
-

-
	return (EPKG_OK);
-
}
-

-
int
-
pkg_script_post_install(struct pkg *pkg)
-
{
-
	struct pkg_script *script = NULL;
-
	struct sbuf *script_cmd = sbuf_new_auto();
-

-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		switch (pkg_script_type(script)) {
-
			case PKG_SCRIPT_INSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s POST-INSTALL\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_POST_INSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* ignored to prevent warning */
-
				break;
-
		}
-
	}
-

-
	sbuf_delete(script_cmd);
-

-
	return (EPKG_OK);
-
}
-

-
int
-
pkg_script_pre_upgrade(struct pkg *pkg)
-
{
-
	struct pkg_script *script = NULL;
-
	struct sbuf *script_cmd = sbuf_new_auto();
-

-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		switch (pkg_script_type(script)) {
-
			case PKG_SCRIPT_UPGRADE:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s PRE-UPGRADE\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_PRE_UPGRADE:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* ignored to prevent warning */
-
				break;
-
		}
-
	}
-

-
	sbuf_delete(script_cmd);
-

-
	return (EPKG_OK);
-
}
-

-
int
-
pkg_script_post_upgrade(struct pkg *pkg)
-
{
-
	struct pkg_script *script = NULL;
-
	struct sbuf *script_cmd = sbuf_new_auto();
-

-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		switch (pkg_script_type(script)) {
-
			case PKG_SCRIPT_UPGRADE:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s POST-UPGRADE\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_POST_UPGRADE:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* ignored to prevent warning */
-
				break;
-
		}
+
	size_t i;
+

+
	struct {
+
		const char *arg;
+
		const pkg_script_t b;
+
		const pkg_script_t a;
+
	} const map[] = {
+
		/* a implies b with argument arg */
+
		{"PRE-INSTALL",    PKG_SCRIPT_INSTALL,   PKG_SCRIPT_PRE_INSTALL},
+
		{"POST-INSTALL",   PKG_SCRIPT_INSTALL,   PKG_SCRIPT_POST_INSTALL},
+
		{"PRE-UPGRADE",    PKG_SCRIPT_UPGRADE,   PKG_SCRIPT_PRE_UPGRADE},
+
		{"POST-UPGRADE",   PKG_SCRIPT_UPGRADE,   PKG_SCRIPT_POST_UPGRADE},
+
		{"PRE-DEINSTALL",  PKG_SCRIPT_DEINSTALL, PKG_SCRIPT_PRE_DEINSTALL},
+
		{"POST-DEINSTALL", PKG_SCRIPT_DEINSTALL, PKG_SCRIPT_POST_DEINSTALL},
+
	};
+

+
	for (i = 0; i < sizeof(map) / sizeof(map[0]); i++) {
+
		if (map[i].a == type)
+
			break;
	}

-
	sbuf_delete(script_cmd);
-

-
	return (EPKG_OK);
-
}
-

-
int
-
pkg_script_pre_deinstall(struct pkg *pkg)
-
{
-
	struct pkg_script *script = NULL;
-
	struct sbuf *script_cmd = sbuf_new_auto();
+
	if (map[i].a != type)
+
		return (pkg_error_set(EPKG_FATAL, "bad type arg (%d)", type));

	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		switch (pkg_script_type(script)) {
-
			case PKG_SCRIPT_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s DEINSTALL\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_PRE_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* ignored to prevent warning */
-
				break;
-
		}
-
	}

-
	sbuf_delete(script_cmd);
-

-
	return (EPKG_OK);
-
}
-

-
int
-
pkg_script_post_deinstall(struct pkg *pkg)
-
{
-
	struct pkg_script *script = NULL;
-
	struct sbuf *script_cmd = sbuf_new_auto();
+
		stype = pkg_script_type(script);

-
	/* two loops because the order matters */
-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		if (pkg_script_type(script) == PKG_SCRIPT_DEINSTALL) {
+
		if (stype == map[i].a || stype == map[i].b) {
			sbuf_reset(script_cmd);
-
			sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s POST-DEINSTALL\n%s",
-
					pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
					pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
+
			sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s",
+
				pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
+
				pkg_get(pkg, PKG_VERSION));
+

+
			if (stype == map[i].b) {
+
				/* add arg **/
+
				sbuf_cat(script_cmd, " ");
+
				sbuf_cat(script_cmd, map[i].arg);
+
			}
+

+
			sbuf_cat(script_cmd, "\n");
+
			sbuf_cat(script_cmd, pkg_script_data(script));
			sbuf_finish(script_cmd);
			system(sbuf_data(script_cmd));
-
		}
-
	}

-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		if (pkg_script_type(script) == PKG_SCRIPT_POST_DEINSTALL) {
-
			sbuf_reset(script_cmd);
-
			sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
					pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
					pkg_get(pkg, PKG_VERSION), pkg_script_data(script));
-
			sbuf_finish(script_cmd);
-
			system(sbuf_data(script_cmd));
		}
	}