Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
format keywords scripts using format_exec_cmd
Baptiste Daroussin committed 14 years ago
commit 7a00d498e5343bdf5c18e0f6e8bbe4c4b1540d68
parent bffc314
3 files changed +46 -15
modified libpkg/pkg_ports.c
@@ -262,7 +262,7 @@ meta_exec(struct plist *p, char *line, bool unexec)
	char path[MAXPATHLEN + 1];
	regmatch_t pmatch[2];

-
	if (format_exec_cmd(&cmd, line, p->prefix, p->last_file) != EPKG_OK)
+
	if (format_exec_cmd(&cmd, line, p->prefix, p->last_file, NULL) != EPKG_OK)
		return (EPKG_OK);

	if (unexec) {
@@ -504,6 +504,7 @@ parse_and_apply_keyword_file(yaml_document_t *doc, yaml_node_t *node, struct pli
{
	yaml_node_pair_t *pair;
	yaml_node_t *key, *val;
+
	char *cmd;

	pair = node->data.mapping.pairs.start;
	while (pair < node->data.mapping.pairs.top) {
@@ -521,43 +522,61 @@ parse_and_apply_keyword_file(yaml_document_t *doc, yaml_node_t *node, struct pli
		}

		if (!strcasecmp(key->data.scalar.value, "pre-install")) {
-
			if (val->data.scalar.length != 0)
-
				sbuf_printf(p->pre_install_buf, val->data.scalar.value, line);
+
			if (val->data.scalar.length != 0) {
+
				format_exec_cmd(&cmd, val->data.scalar.value, p->prefix, p->last_file, line);
+
				sbuf_cat(p->pre_install_buf, cmd);
+
				free(cmd);
+
			}
			++pair;
			continue;
		}

		if (!strcasecmp(key->data.scalar.value, "post-install")) {
-
			if (val->data.scalar.length != 0)
-
				sbuf_printf(p->post_install_buf, val->data.scalar.value, line);
+
			if (val->data.scalar.length != 0) {
+
				format_exec_cmd(&cmd, val->data.scalar.value, p->prefix, p->last_file, line);
+
				sbuf_cat(p->post_install_buf, cmd);
+
				free(cmd);
+
			}
			++pair;
			continue;
		}

		if (!strcasecmp(key->data.scalar.value, "pre-deinstall")) {
-
			if (val->data.scalar.length != 0)
-
				sbuf_printf(p->pre_deinstall_buf, val->data.scalar.value, line);
+
			if (val->data.scalar.length != 0) {
+
				format_exec_cmd(&cmd, val->data.scalar.value, p->prefix, p->last_file, line);
+
				sbuf_cat(p->pre_deinstall_buf, cmd);
+
				free(cmd);
+
			}
			++pair;
			continue;
		}

		if (!strcasecmp(key->data.scalar.value, "post-deinstall")) {
-
			if (val->data.scalar.length != 0)
-
				sbuf_printf(p->post_deinstall_buf, val->data.scalar.value, line);
+
			if (val->data.scalar.length != 0) { 
+
				format_exec_cmd(&cmd, val->data.scalar.value, p->prefix, p->last_file, line);
+
				sbuf_cat(p->post_deinstall_buf, cmd);
+
				free(cmd);
+
			}
			++pair;
			continue;
		}

		if (!strcasecmp(key->data.scalar.value, "pre-upgrade")) {
-
			if (val->data.scalar.length != 0)
-
				sbuf_printf(p->pre_upgrade_buf, val->data.scalar.value, line);
+
			if (val->data.scalar.length != 0) {
+
				format_exec_cmd(&cmd, val->data.scalar.value, p->prefix, p->last_file, line);
+
				sbuf_cat(p->pre_upgrade_buf, cmd);
+
				free(cmd);
+
			}
			++pair;
			continue;
		}

		if (!strcasecmp(key->data.scalar.value, "post-upgrade")) {
-
			if (val->data.scalar.length != 0)
-
				sbuf_printf(p->post_upgrade_buf, val->data.scalar.value, line);
+
			if (val->data.scalar.length != 0) {
+
				format_exec_cmd(&cmd, val->data.scalar.value, p->prefix, p->last_file, line);
+
				sbuf_cat(p->post_upgrade_buf, cmd);
+
				free(cmd);
+
			}
			++pair;
			continue;
		}
modified libpkg/pkg_util.c
@@ -138,7 +138,7 @@ file_to_buffer(const char *path, char **buffer, off_t *sz)
}

int
-
format_exec_cmd(char **dest, const char *in, const char *prefix, const char *plist_file)
+
format_exec_cmd(char **dest, const char *in, const char *prefix, const char *plist_file, char *line)
{
	struct sbuf *buf = sbuf_new_auto();
	char path[MAXPATHLEN + 1];
@@ -190,7 +190,19 @@ format_exec_cmd(char **dest, const char *in, const char *prefix, const char *pli
					cp[0] = '\0';
					sbuf_cat(buf, path);
					break;
+
				case '@':
+
					if (line != NULL) {
+
						sbuf_cat(buf, line);
+
						break;
+
					}
+

+
					/*
+
					 * no break here because if line is not
+
					 * given (default exec) %@ does not
+
					 * exists
+
					 */
				default:
+
					sbuf_putc(buf, '%');
					sbuf_putc(buf, in[0]);
					break;
			}
modified libpkg/pkg_util.h
@@ -19,7 +19,7 @@ void sbuf_free(struct sbuf *);

int mkdirs(const char *path);
int file_to_buffer(const char *, char **, off_t *);
-
int format_exec_cmd(char **, const char *, const char *, const char *);
+
int format_exec_cmd(char **, const char *, const char *, const char *, char *);
int split_chr(char *, char);
int file_fetch(const char *, const char *);
int is_dir(const char *);