Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
triggers: add a "pkg_upgrade" variable for per packages triggers
Baptiste Daroussin committed 2 months ago
commit 4b9ba49865962bbc7d9a90dfcc7ee288bdc7e78d
parent c0006d2
5 files changed +21 -9
modified libpkg/pkg_add.c
@@ -1469,7 +1469,7 @@ pkg_add_common(struct pkgdb *db, const char *path, unsigned flags,
	 * Execute per-package pre-install triggers
	 */
	if (t != NULL)
-
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_PRE_INSTALL);
+
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_PRE_INSTALL, (local != NULL));

	/* add the user and group if necessary */

@@ -1532,7 +1532,7 @@ pkg_add_common(struct pkgdb *db, const char *path, unsigned flags,
	 * Execute per-package post-install triggers
	 */
	if (t != NULL)
-
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_POST_INSTALL);
+
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_POST_INSTALL, (local != NULL));

	/*
	 * start the different related services if the users do want that
modified libpkg/pkg_delete.c
@@ -104,7 +104,8 @@ pkg_delete(struct pkg *pkg, struct pkg *rpkg, struct pkgdb *db, int flags,
	 * Execute per-package pre-deinstall triggers
	 */
	if (t != NULL)
-
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_PRE_DEINSTALL);
+
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_PRE_DEINSTALL,
+
		    (flags & PKG_DELETE_UPGRADE) != 0);

	if ((flags & PKG_DELETE_KEEPFILES) == 0) {
		ret = pkg_delete_files(db, pkg, rpkg, flags, t);
@@ -126,7 +127,8 @@ pkg_delete(struct pkg *pkg, struct pkg *rpkg, struct pkgdb *db, int flags,
	 * Execute per-package post-deinstall triggers
	 */
	if (t != NULL)
-
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_POST_DEINSTALL);
+
		triggers_execute_perpackage(t, pkg, TRIGGER_PHASE_POST_DEINSTALL,
+
		    (flags & PKG_DELETE_UPGRADE) != 0);

	if ((flags & PKG_DELETE_KEEPFILES) == 0) {
		ret = pkg_delete_dirs(db, pkg, NULL);
modified libpkg/private/pkg.h
@@ -923,7 +923,7 @@ void trigger_is_it_a_cleanup(struct triggers *t, const char *path);
void trigger_free(struct trigger *);
void append_touched_dir(const char *path);
void append_touched_file(const char *path);
-
int triggers_execute_perpackage(struct triggers *t, struct pkg *pkg, trigger_phase_t phase);
+
int triggers_execute_perpackage(struct triggers *t, struct pkg *pkg, trigger_phase_t phase, bool upgrade);

int pkg_parse_manifest_ucl(struct pkg *pkg, ucl_object_t *o);
int pkg_get_reposdirfd(void);
modified libpkg/triggers.c
@@ -442,7 +442,7 @@ save_trigger(const char *script, bool sandbox, pkghash *args)

static int
trigger_execute_lua_common(const char *script, bool sandbox, pkghash *args,
-
    bool defer, const char *pkgname, const char *pkgversion)
+
    bool defer, const char *pkgname, const char *pkgversion, bool upgrade)
{
	lua_State *L;
	int pstat;
@@ -480,6 +480,8 @@ trigger_execute_lua_common(const char *script, bool sandbox, pkghash *args,
			lua_pushstring(L, pkgversion);
			lua_setglobal(L, "pkg_version");
		}
+
		lua_pushboolean(L, upgrade);
+
		lua_setglobal(L, "pkg_upgrade");
		char **arguments = NULL;
		int i = 0;
		if (args != NULL) {
@@ -532,7 +534,7 @@ static int
trigger_execute_lua(const char *script, bool sandbox, pkghash *args)
{
	return (trigger_execute_lua_common(script, sandbox, args,
-
	    true, NULL, NULL));
+
	    true, NULL, NULL, false));
}

static void
@@ -683,7 +685,7 @@ triggers_load_perpackage(trigger_phase_t phase)
 */
int
triggers_execute_perpackage(struct triggers *t, struct pkg *pkg,
-
    trigger_phase_t phase)
+
    trigger_phase_t phase, bool upgrade)
{
	struct pkg_file *f = NULL;
	struct pkg_dir *d = NULL;
@@ -739,7 +741,7 @@ triggers_execute_perpackage(struct triggers *t, struct pkg *pkg,
		if (trig->script.type == SCRIPT_LUA) {
			ret = trigger_execute_lua_common(trig->script.script,
			    trig->script.sandbox, local_matched, false,
-
			    pkg->name, pkg->version);
+
			    pkg->name, pkg->version, upgrade);
		}
		pkghash_destroy(local_matched);
		if (ret != EPKG_OK) {
modified tests/frontend/triggers.sh
@@ -216,6 +216,7 @@ trigger: {
	sandbox: false
	script: <<EOS
print("ldconfig: pre_install for " .. pkg_name .. "-" .. pkg_version)
+
print("upgrade: " .. tostring(pkg_upgrade))
for i, v in ipairs(arg) do
	print("  path: " .. v)
end
@@ -229,6 +230,7 @@ EOF
	atf_check pkg create -M mylib.ucl -p plist -r .
	unset PKG_TRIGGERS_DIR
	atf_check -o match:"ldconfig: pre_install for mylib-1.0" \
+
	    -o match:"upgrade: false" \
	    -o match:"path: /usr/local/libdata/ldconfig" \
	    pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg
}
@@ -243,6 +245,7 @@ trigger: {
	sandbox: false
	script: <<EOS
print("ldconfig: post_install for " .. pkg_name .. "-" .. pkg_version)
+
print("upgrade: " .. tostring(pkg_upgrade))
for i, v in ipairs(arg) do
	print("  path: " .. v)
end
@@ -257,6 +260,7 @@ EOF
	atf_check pkg create -M mylib.ucl -p plist -r .
	unset PKG_TRIGGERS_DIR
	atf_check -o match:"ldconfig: post_install for mylib-1.0" \
+
	    -o match:"upgrade: false" \
	    -o match:"path: /usr/local/libdata/ldconfig" \
	    pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg
}
@@ -271,6 +275,7 @@ trigger: {
	sandbox: false
	script: <<EOS
print("ldconfig: pre_deinstall for " .. pkg_name .. "-" .. pkg_version)
+
print("upgrade: " .. tostring(pkg_upgrade))
for i, v in ipairs(arg) do
	print("  path: " .. v)
end
@@ -285,6 +290,7 @@ EOF
	unset PKG_TRIGGERS_DIR
	atf_check pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg
	atf_check -o match:"ldconfig: pre_deinstall for mylib-1.0" \
+
	    -o match:"upgrade: false" \
	    -o match:"path: /usr/local/libdata/ldconfig" \
	    pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target delete -qy mylib
}
@@ -299,6 +305,7 @@ trigger: {
	sandbox: false
	script: <<EOS
print("ldconfig: post_deinstall for " .. pkg_name .. "-" .. pkg_version)
+
print("upgrade: " .. tostring(pkg_upgrade))
for i, v in ipairs(arg) do
	print("  path: " .. v)
end
@@ -313,6 +320,7 @@ EOF
	unset PKG_TRIGGERS_DIR
	atf_check pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg
	atf_check -o match:"ldconfig: post_deinstall for mylib-1.0" \
+
	    -o match:"upgrade: false" \
	    -o match:"path: /usr/local/libdata/ldconfig" \
	    pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target delete -qy mylib
}