Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
rework scripts handling
Baptiste Daroussin committed 14 years ago
commit 9eeb4d0f0af93f21d4a55d7e72faf5d5030ddd0f
parent 44de3ba
5 files changed +229 -121
modified libpkg/Makefile
@@ -25,7 +25,8 @@ SRCS= pkg.c \
		pkg_version.c \
		pkgdb.c \
		fetch.c \
-
		packing.c
+
		packing.c \
+
		scripts.c

CFLAGS+=	-std=c99
CFLAGS+=	-I${.CURDIR} \
modified libpkg/pkg.h
@@ -530,9 +530,7 @@ int pkg_repo_fetch(struct pkg *pkg, void *data, fetch_cb cb);
 * Generally speaking, external consumers should not use these.
 * @return An error code on failure, or EPKG_OK.
 */
-
int pkg_pre_deinstall(struct pkg *pkg);
int pkg_delete_files(struct pkg *pkg, int force);
-
int pkg_post_deinstall(struct pkg *pkg);
int pkg_run_unexecs(struct pkg *pkg);

/**
@@ -584,4 +582,13 @@ void pkg_error_warn(const char *fmt, ...);
 */
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 *);
#endif
modified libpkg/pkg_add.c
@@ -59,8 +59,6 @@ pkg_add(struct pkgdb *db, const char *path, struct pkg **pkg_p)
	struct pkg *pkg = NULL;
	struct pkg **deps;
	struct pkg_exec **execs;
-
	struct pkg_script **scripts;
-
	struct sbuf *script_cmd;
	bool extract = true;
	char dpath[MAXPATHLEN];
	const char *basedir;
@@ -156,28 +154,7 @@ pkg_add(struct pkgdb *db, const char *path, struct pkg **pkg_p)
	/*
	 * Execute pre-install scripts
	 */
-
	script_cmd = sbuf_new_auto();
-

-
	if ((scripts = pkg_scripts(pkg)) != NULL)
-
		for (i= 0; scripts[i] != NULL; i++) {
-
			switch (pkg_script_type(scripts[i])) {
-
				case PKG_SCRIPT_INSTALL:
-
					sbuf_reset(script_cmd);
-
					sbuf_printf(script_cmd, "set -- %s-%s INSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
					sbuf_finish(script_cmd);
-
					system(sbuf_data(script_cmd));
-
					break;
-
				case PKG_SCRIPT_PRE_INSTALL:
-
					sbuf_reset(script_cmd);
-
					sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
					sbuf_finish(script_cmd);
-
					system(sbuf_data(script_cmd));
-
					break;
-
				default:
-
					/* just ignore */
-
					break;
-
			}
-
		}
+
	pkg_script_pre_install(pkg);

	/*
	 * Extract the files on disk.
@@ -188,28 +165,7 @@ pkg_add(struct pkgdb *db, const char *path, struct pkg **pkg_p)
	/*
	 * Execute post install scripts
	 */
-
	if (scripts != NULL)
-
		for (i= 0; scripts[i] != NULL; i++) {
-
			switch (pkg_script_type(scripts[i])) {
-
				case PKG_SCRIPT_INSTALL:
-
					sbuf_reset(script_cmd);
-
					sbuf_printf(script_cmd, "set -- %s-%s POST-INSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
					sbuf_finish(script_cmd);
-
					system(sbuf_data(script_cmd));
-
					break;
-
				case PKG_SCRIPT_POST_INSTALL:
-
					sbuf_reset(script_cmd);
-
					sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
					sbuf_finish(script_cmd);
-
					system(sbuf_data(script_cmd));
-
					break;
-
				default:
-
					/* just ignore */
-
					break;
-
			}
-
		}
-

-
	sbuf_free(script_cmd);
+
	pkg_script_post_install(pkg);

	/*
	 * Execute @exec
modified libpkg/pkg_delete.c
@@ -58,13 +58,13 @@ pkg_delete(struct pkg *pkg, struct pkgdb *db, int force)
		sbuf_free(rdep_msg);
	}

-
	if ((ret = pkg_pre_deinstall(pkg)) != EPKG_OK)
+
	if ((ret = pkg_script_pre_deinstall(pkg)) != EPKG_OK)
		return (ret);

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

-
	if ((ret = pkg_post_deinstall(pkg)) != EPKG_OK)
+
	if ((ret = pkg_script_post_deinstall(pkg)) != EPKG_OK)
		return (ret);

	if ((ret = pkg_run_unexecs(pkg)) != EPKG_OK)
@@ -148,73 +148,3 @@ pkg_delete_files(struct pkg *pkg, int force)

	return (ret);
}
-

-
int
-
pkg_pre_deinstall(struct pkg *pkg)
-
{
-
	int ret = EPKG_OK;
-
	int i;
-
	struct sbuf *script_cmd;
-
	struct pkg_script **scripts;
-

-
	script_cmd = sbuf_new_auto();
-
	scripts = pkg_scripts(pkg);
-
	/* execute PRE_DEINSTALL */
-
	for (i = 0; scripts[i] != NULL; i++) {
-
		switch (pkg_script_type(scripts[i])) {
-
			case PKG_SCRIPT_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "set -- %s-%s DEINSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_PRE_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* just ignore */
-
				break;
-
		}
-
	}
-
	sbuf_free(script_cmd);
-

-
	return (ret);
-
}
-

-
int
-
pkg_post_deinstall(struct pkg *pkg)
-
{
-
	int i;
-
	int ret = EPKG_OK;
-
	struct sbuf *script_cmd;
-
	struct pkg_script **scripts;
-

-
	script_cmd = sbuf_new_auto();
-
	scripts = pkg_scripts(pkg);
-

-
	for (i = 0; scripts[i] != NULL; i++) {
-
		switch (pkg_script_type(scripts[i])) {
-
			case PKG_SCRIPT_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "set -- %s-%s POST-DEINSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_POST_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* just ignore */
-
				break;
-
		}
-
	}
-
	sbuf_free(script_cmd);
-

-
	return (ret);
-
}
added libpkg/scripts.c
@@ -0,0 +1,214 @@
+
#include <pkg.h>
+
#include <pkg_private.h>
+
#include <pkg_error.h>
+

+
int
+
pkg_script_pre_install(struct pkg *pkg)
+
{
+
	int i;
+
	struct pkg_script **scripts;
+
	struct sbuf *script_cmd = sbuf_new_auto();
+

+
	if ((scripts = pkg_scripts(pkg)) == NULL)
+
		return (EPKG_OK);
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		switch (pkg_script_type(scripts[i])) {
+
			case PKG_SCRIPT_INSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s PRE-INSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			case PKG_SCRIPT_PRE_INSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			default:
+
				/* ignored to prevent warning */
+
				break;
+
		}
+
	}
+

+
	sbuf_clear(script_cmd);
+

+
	return (EPKG_OK);
+
}
+

+
int
+
pkg_script_post_install(struct pkg *pkg)
+
{
+
	int i;
+
	struct pkg_script **scripts;
+
	struct sbuf *script_cmd = sbuf_new_auto();
+

+
	if ((scripts = pkg_scripts(pkg)) == NULL)
+
		return (EPKG_OK);
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		switch (pkg_script_type(scripts[i])) {
+
			case PKG_SCRIPT_INSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s POST-INSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			case PKG_SCRIPT_POST_INSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			default:
+
				/* ignored to prevent warning */
+
				break;
+
		}
+
	}
+

+
	sbuf_clear(script_cmd);
+

+
	return (EPKG_OK);
+
}
+

+
int
+
pkg_script_pre_upgrade(struct pkg *pkg)
+
{
+
	int i;
+
	struct pkg_script **scripts;
+
	struct sbuf *script_cmd = sbuf_new_auto();
+

+
	if ((scripts = pkg_scripts(pkg)) == NULL)
+
		return (EPKG_OK);
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		switch (pkg_script_type(scripts[i])) {
+
			case PKG_SCRIPT_UPGRADE:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s PRE-UPGRADE\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			case PKG_SCRIPT_PRE_UPGRADE:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			default:
+
				/* ignored to prevent warning */
+
				break;
+
		}
+
	}
+

+
	sbuf_clear(script_cmd);
+

+
	return (EPKG_OK);
+
}
+

+
int
+
pkg_script_post_upgrade(struct pkg *pkg)
+
{
+
	int i;
+
	struct pkg_script **scripts;
+
	struct sbuf *script_cmd = sbuf_new_auto();
+

+
	if ((scripts = pkg_scripts(pkg)) == NULL)
+
		return (EPKG_OK);
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		switch (pkg_script_type(scripts[i])) {
+
			case PKG_SCRIPT_UPGRADE:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s POST-UPGRADE\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			case PKG_SCRIPT_POST_UPGRADE:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			default:
+
				/* ignored to prevent warning */
+
				break;
+
		}
+
	}
+

+
	sbuf_clear(script_cmd);
+

+
	return (EPKG_OK);
+
}
+

+
int
+
pkg_script_pre_deinstall(struct pkg *pkg)
+
{
+
	int i;
+
	struct pkg_script **scripts;
+
	struct sbuf *script_cmd = sbuf_new_auto();
+

+
	if ((scripts = pkg_scripts(pkg)) == NULL)
+
		return (EPKG_OK);
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		switch (pkg_script_type(scripts[i])) {
+
			case PKG_SCRIPT_DEINSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s PRE-DEINSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			case PKG_SCRIPT_PRE_DEINSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			default:
+
				/* ignored to prevent warning */
+
				break;
+
		}
+
	}
+

+
	sbuf_clear(script_cmd);
+

+
	return (EPKG_OK);
+
}
+

+
int
+
pkg_script_post_deinstall(struct pkg *pkg)
+
{
+
	int i;
+
	struct pkg_script **scripts;
+
	struct sbuf *script_cmd = sbuf_new_auto();
+

+
	if ((scripts = pkg_scripts(pkg)) == NULL)
+
		return (EPKG_OK);
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		switch (pkg_script_type(scripts[i])) {
+
			case PKG_SCRIPT_DEINSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s POST-DEINSTALL\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			case PKG_SCRIPT_POST_DEINSTALL:
+
				sbuf_reset(script_cmd);
+
				sbuf_printf(script_cmd, "set -- %s-%s\n%s", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
				sbuf_finish(script_cmd);
+
				system(sbuf_data(script_cmd));
+
				break;
+
			default:
+
				/* ignored to prevent warning */
+
				break;
+
		}
+
	}
+

+
	sbuf_clear(script_cmd);
+

+
	return (EPKG_OK);
+
}
+