Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Scripts are now in manifest + fix pkg2ng
Baptiste Daroussin committed 14 years ago
commit 15b44897bd80888106653572c5b2808c1c2e2628
parent 47d5847f6f3c9d0db76b9eb567047cef1eb7576a
4 files changed +106 -65
modified libpkg/pkg_create.c
@@ -21,55 +21,17 @@ pkg_create_from_dir(struct pkg *pkg, const char *root, struct packing *pkg_archi
{
	char fpath[MAXPATHLEN];
	struct pkg_file *file = NULL;
-
	struct pkg_script *script = NULL;
	char *m;
	const char *mtree;
-
	const char *scriptname = NULL;

	pkg_emit_manifest(pkg, &m);
	packing_append_buffer(pkg_archive, m, "+MANIFEST", strlen(m));
	free(m);

-
	packing_append_buffer(pkg_archive, pkg_get(pkg, PKG_DESC), "+DESC", strlen(pkg_get(pkg, PKG_DESC)));
-

	mtree = pkg_get(pkg, PKG_MTREE);
	if (mtree != NULL)
		packing_append_buffer(pkg_archive, mtree, "+MTREE_DIRS", strlen(mtree));

-
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
-
		switch (pkg_script_type(script)) {
-
			case PKG_SCRIPT_PRE_INSTALL:
-
				scriptname = "+PRE_INSTALL";
-
				break;
-
			case PKG_SCRIPT_POST_INSTALL:
-
				scriptname = "+POST_INSTALL";
-
				break;
-
			case PKG_SCRIPT_INSTALL:
-
				scriptname = "+INSTALL";
-
				break;
-
			case PKG_SCRIPT_PRE_DEINSTALL:
-
				scriptname = "+PRE_DEINSTALL";
-
				break;
-
			case PKG_SCRIPT_POST_DEINSTALL:
-
				scriptname = "+POST_DEINSTALL";
-
				break;
-
			case PKG_SCRIPT_DEINSTALL:
-
				scriptname = "+DEINSTALL";
-
				break;
-
			case PKG_SCRIPT_PRE_UPGRADE:
-
				scriptname = "+PRE_UPGRADE";
-
				break;
-
			case PKG_SCRIPT_POST_UPGRADE:
-
				scriptname = "+POST_UPGRADE";
-
				break;
-
			case PKG_SCRIPT_UPGRADE:
-
				scriptname = "+UPGRADE";
-
				break;
-
		}
-
		packing_append_buffer(pkg_archive, pkg_script_data(script),
-
							  scriptname, strlen(pkg_script_data(script)));
-
	}
-

	while (pkg_files(pkg, &file) == EPKG_OK) {

		if (root != NULL)
modified libpkg/pkg_manifest.c
@@ -22,6 +22,7 @@
#define PKG_FILES -4
#define PKG_DIRS -5
#define PKG_FLATSIZE -6
+
#define PKG_SCRIPTS -7

static void parse_mapping(struct pkg *, yaml_node_pair_t *, yaml_document_t *, int);
static void parse_node(struct pkg *, yaml_node_t *, yaml_document_t *, int);
@@ -44,7 +45,8 @@ static struct manifest_key {
	{ "files", PKG_FILES},
	{ "dirs", PKG_DIRS},
	{ "flatsize", PKG_FLATSIZE},
-
	{ "desc", PKG_FLATSIZE },
+
	{ "desc", PKG_DESC },
+
	{ "scripts", PKG_SCRIPTS},
};

#define manifest_key_len (int)(sizeof(manifest_key)/sizeof(manifest_key[0]))
@@ -86,6 +88,7 @@ parse_mapping(struct pkg *pkg, yaml_node_pair_t *pair, yaml_document_t *document
	yaml_node_pair_t *subpair;
	char origin[BUFSIZ];
	char version[BUFSIZ];
+
	pkg_script_t script_type;

	key = yaml_document_get_node(document, pair->key);
	val = yaml_document_get_node(document, pair->value);
@@ -109,6 +112,29 @@ parse_mapping(struct pkg *pkg, yaml_node_pair_t *pair, yaml_document_t *document
			}
			pkg_adddep(pkg, key->data.scalar.value, origin, version);
			break;
+
		case PKG_SCRIPTS:
+
			if (strcmp(key->data.scalar.value, "pre-install") == 0) {
+
				script_type = PKG_SCRIPT_PRE_INSTALL;
+
			} else if (strcmp(key->data.scalar.value, "install") == 0) {
+
				script_type = PKG_SCRIPT_INSTALL;
+
			} else if (strcmp(key->data.scalar.value, "post-install") == 0) {
+
				script_type = PKG_SCRIPT_POST_INSTALL;
+
			} else if (strcmp(key->data.scalar.value, "pre-upgrade") == 0) {
+
				script_type = PKG_SCRIPT_PRE_UPGRADE;
+
			} else if (strcmp(key->data.scalar.value, "upgrade") == 0) {
+
				script_type = PKG_SCRIPT_UPGRADE;
+
			} else if (strcmp(key->data.scalar.value, "post-upgrade") == 0) {
+
				script_type = PKG_SCRIPT_POST_UPGRADE;
+
			} else if (strcmp(key->data.scalar.value, "pre-deinstall") == 0) {
+
				script_type = PKG_SCRIPT_PRE_DEINSTALL;
+
			} else if (strcmp(key->data.scalar.value, "deinstall") == 0) {
+
				script_type = PKG_SCRIPT_DEINSTALL;
+
			} else if (strcmp(key->data.scalar.value, "post-deinstall") == 0) {
+
				script_type = PKG_SCRIPT_POST_DEINSTALL;
+
			}
+

+
			pkg_addscript(pkg, val->data.scalar.value, script_type);
+
			break;
		default:
			type = manifest_type(key->data.scalar.value);
			if (type == -1) {
@@ -199,9 +225,8 @@ pkg_parse_manifest(struct pkg *pkg, char *buf)
static int
yaml_write_buf(void *data, unsigned char *buffer, size_t size)
{
-
	char **dest = (char **)data;
-
	*dest = malloc(size);
-
	strlcpy(*dest, buffer, size);
+
	struct sbuf *dest = (struct sbuf *)data;
+
	sbuf_bcat(dest, buffer, size);
	return (1);
}

@@ -216,6 +241,7 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)
	struct pkg_option *option = NULL;
	struct pkg_file *file = NULL;
	struct pkg_dir *dir = NULL;
+
	struct pkg_script *script = NULL;
	int rc = EPKG_OK;
	int mapping;
	int depsmap = -1;
@@ -224,16 +250,23 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)
	int files = -1;
	int dirs = -1;
	int options = -1;
+
	int scripts = -1;
+
	const char *script_types;
+
	struct sbuf *destbuf = sbuf_new_auto();

	yaml_emitter_initialize(&emitter);
-
	yaml_emitter_set_output(&emitter, yaml_write_buf, dest);
+
	yaml_emitter_set_output(&emitter, yaml_write_buf, destbuf);

#define manifest_append_kv(map, key, val) yaml_document_append_mapping_pair(&doc, map, \
-
		yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, key), strlen(key), YAML_ANY_SCALAR_STYLE), \
-
		yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, val), strlen(val), YAML_ANY_SCALAR_STYLE));
+
		yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, key), strlen(key), YAML_PLAIN_SCALAR_STYLE), \
+
		yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, val), strlen(val), YAML_PLAIN_SCALAR_STYLE));
+

+
#define manifest_append_kv_literal(map, key, val) yaml_document_append_mapping_pair(&doc, map, \
+
		yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, key), strlen(key), YAML_PLAIN_SCALAR_STYLE), \
+
		yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, val), strlen(val), YAML_LITERAL_SCALAR_STYLE));

	yaml_document_initialize(&doc, NULL, NULL, NULL, 1, 1);
-
	mapping = yaml_document_add_mapping(&doc, NULL, YAML_ANY_MAPPING_STYLE);
+
	mapping = yaml_document_add_mapping(&doc, NULL, YAML_BLOCK_MAPPING_STYLE);

	manifest_append_kv(mapping, "name", pkg_get(pkg, PKG_NAME));
	manifest_append_kv(mapping, "version", pkg_get(pkg, PKG_VERSION));
@@ -246,18 +279,19 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)
	manifest_append_kv(mapping, "prefix", pkg_get(pkg, PKG_PREFIX));
	snprintf(tmpbuf, BUFSIZ, "%ld", pkg_flatsize(pkg));
	manifest_append_kv(mapping, "flatsize", tmpbuf);
+
	manifest_append_kv_literal(mapping, "desc", pkg_get(pkg, PKG_DESC));

	while (pkg_deps(pkg, &dep) == EPKG_OK) {
		if (depsmap == -1) {
-
			depsmap = yaml_document_add_mapping(&doc, NULL, YAML_ANY_MAPPING_STYLE);
+
			depsmap = yaml_document_add_mapping(&doc, NULL, YAML_BLOCK_MAPPING_STYLE);
			yaml_document_append_mapping_pair(&doc, mapping,
-
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "deps"), 4, YAML_ANY_SCALAR_STYLE),
+
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "deps"), 4, YAML_PLAIN_SCALAR_STYLE),
					depsmap);
		}

-
		depkv = yaml_document_add_mapping(&doc, NULL, YAML_ANY_MAPPING_STYLE);
+
		depkv = yaml_document_add_mapping(&doc, NULL, YAML_BLOCK_MAPPING_STYLE);
		yaml_document_append_mapping_pair(&doc, depsmap,
-
				yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, pkg_dep_name(dep)), strlen(pkg_dep_name(dep)), YAML_ANY_SCALAR_STYLE),
+
				yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, pkg_dep_name(dep)), strlen(pkg_dep_name(dep)), YAML_PLAIN_SCALAR_STYLE),
				depkv);

		manifest_append_kv(depkv, "origin", pkg_dep_origin(dep));
@@ -266,20 +300,20 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)

	while (pkg_conflicts(pkg, &conflict) == EPKG_OK) {
		if (conflicts == -1) {
-
			conflicts = yaml_document_add_sequence(&doc, NULL, YAML_ANY_SEQUENCE_STYLE);
+
			conflicts = yaml_document_add_sequence(&doc, NULL, YAML_BLOCK_SEQUENCE_STYLE);
			yaml_document_append_mapping_pair(&doc, mapping,
-
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "conflicts"), 9, YAML_ANY_SCALAR_STYLE),
+
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "conflicts"), 9, YAML_PLAIN_SCALAR_STYLE),
					conflicts);
		}
		yaml_document_append_sequence_item(&doc, conflicts,
-
				yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, pkg_conflict_glob(conflict)), strlen(pkg_conflict_glob(conflict)), YAML_ANY_SCALAR_STYLE));
+
				yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, pkg_conflict_glob(conflict)), strlen(pkg_conflict_glob(conflict)), YAML_PLAIN_SCALAR_STYLE));
	}

	while (pkg_options(pkg, &option) == EPKG_OK) {
		if (options == -1) {
-
			options = yaml_document_add_mapping(&doc, NULL, YAML_ANY_MAPPING_STYLE);
+
			options = yaml_document_add_mapping(&doc, NULL, YAML_BLOCK_MAPPING_STYLE);
			yaml_document_append_mapping_pair(&doc, mapping,
-
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "options"), 7, YAML_ANY_SCALAR_STYLE),
+
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "options"), 7, YAML_PLAIN_SCALAR_STYLE),
					options);
		}
		manifest_append_kv(files, pkg_option_opt(option), pkg_option_value(option));
@@ -287,9 +321,9 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)

	while (pkg_files(pkg, &file) == EPKG_OK) {
		if (files == -1) {
-
			files = yaml_document_add_mapping(&doc, NULL, YAML_ANY_MAPPING_STYLE);
+
			files = yaml_document_add_mapping(&doc, NULL, YAML_BLOCK_MAPPING_STYLE);
			yaml_document_append_mapping_pair(&doc, mapping,
-
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "files"), 5, YAML_ANY_SCALAR_STYLE),
+
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "files"), 5, YAML_PLAIN_SCALAR_STYLE),
					files);
		}
		manifest_append_kv(files, pkg_file_path(file), pkg_file_sha256(file) && strlen(pkg_file_sha256(file)) > 0 ? pkg_file_sha256(file) : "-");
@@ -297,18 +331,61 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)

	while (pkg_dirs(pkg, &dir) == EPKG_OK) {
		if (dirs == -1) {
-
			dirs = yaml_document_add_sequence(&doc, NULL, YAML_ANY_SEQUENCE_STYLE);
+
			dirs = yaml_document_add_sequence(&doc, NULL, YAML_BLOCK_SEQUENCE_STYLE);
			yaml_document_append_mapping_pair(&doc, mapping,
-
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "dirs"), 4, YAML_ANY_SCALAR_STYLE),
+
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "dirs"), 4, YAML_PLAIN_SCALAR_STYLE),
					dirs);
		}
		yaml_document_append_sequence_item(&doc, dirs,
-
				yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, pkg_dir_path(dir)), strlen(pkg_dir_path(dir)), YAML_ANY_SCALAR_STYLE));
+
				yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, pkg_dir_path(dir)), strlen(pkg_dir_path(dir)), YAML_PLAIN_SCALAR_STYLE));
+
	}
+

+
	while (pkg_scripts(pkg, &script) == EPKG_OK) {
+
		if (scripts == -1) {
+
			scripts = yaml_document_add_mapping(&doc, NULL, YAML_BLOCK_MAPPING_STYLE);
+
			yaml_document_append_mapping_pair(&doc, mapping, 
+
					yaml_document_add_scalar(&doc, NULL, __DECONST(yaml_char_t*, "scripts"), 7, YAML_PLAIN_SCALAR_STYLE),
+
					scripts);
+
		}
+
		switch (pkg_script_type(script)) {
+
			case PKG_SCRIPT_PRE_INSTALL:
+
				script_types = "pre-install";
+
				break;
+
			case PKG_SCRIPT_INSTALL:
+
				script_types = "install";
+
				break;
+
			case PKG_SCRIPT_POST_INSTALL:
+
				script_types = "post-install";
+
				break;
+
			case PKG_SCRIPT_PRE_UPGRADE:
+
				script_types = "pre-upgrade";
+
				break;
+
			case PKG_SCRIPT_UPGRADE:
+
				script_types = "upgrade";
+
				break;
+
			case PKG_SCRIPT_POST_UPGRADE:
+
				script_types = "post-upgrade";
+
				break;
+
			case PKG_SCRIPT_PRE_DEINSTALL:
+
				script_types = "pre-deinstall";
+
				break;
+
			case PKG_SCRIPT_DEINSTALL:
+
				script_types = "deinstall";
+
				break;
+
			case PKG_SCRIPT_POST_DEINSTALL:
+
				script_types = "post-deinstall";
+
				break;
+
		}
+
		manifest_append_kv_literal(scripts, script_types, pkg_script_data(script));
	}

	if (!yaml_emitter_dump(&emitter, &doc))
		rc = EPKG_FATAL;

+
	sbuf_finish(destbuf);
+
	*dest = strdup(sbuf_data(destbuf));
+
	sbuf_delete(destbuf);
+

	yaml_emitter_delete(&emitter);
	return (rc);

modified libpkg/pkg_ports.c
@@ -187,11 +187,11 @@ ports_parse_plist(struct pkg *pkg, char *plist)

	pkg_setflatsize(pkg, flatsize);
	if (sbuf_len(exec_scripts) > 0) {
-
		sbuf_done(exec_scripts);
+
		sbuf_finish(exec_scripts);
		pkg_appendscript(pkg, sbuf_data(exec_scripts), PKG_SCRIPT_POST_INSTALL);
	}
	if (sbuf_len(unexec_scripts) > 0) {
-
		sbuf_done(unexec_scripts);
+
		sbuf_finish(unexec_scripts);
		pkg_appendscript(pkg, sbuf_data(unexec_scripts), PKG_SCRIPT_POST_DEINSTALL);
	}

modified ports/pkg2ng
@@ -33,12 +33,14 @@ do
	echo "comment: ${COMMENT}" >> ${MANIFEST}
	echo "maintainer: ${MAINTAINER}" >> ${MANIFEST}
	echo "prefix: ${PREFX##* }" >> ${MANIFEST}
+
	echo "deps:" >> ${MANIFEST}
	pkg_info -qr ${PKG} | while read ignore dep; do
		deporigin=$(pkg_info -qo ${dep})
-
		echo "dep: ${dep%-*} ${deporigin} ${dep##*-}" >> ${MANIFEST}
+
		echo -e "  ${dep%-*}:\n    origin: ${deporigin}\n    version: ${dep##*-}" >> ${MANIFEST}
	done
-
	egrep -v "^@[pkgdep|ignore|conflicts]" ${DB}/+CONTENTS >> ${PLIST}
-
	awk '/^@conflicts/ { print "conflict: "$2 }' ${DB}/+CONTENTS >> ${MANIFEST}
+
	egrep -v "^@(name|pkgdep|ignore|conflicts|display)" ${DB}/+CONTENTS >> ${PLIST}
+
	echo "conflicts:" >> ${MANIFEST}
+
	awk '/^@conflicts/ { print "- "$2 }' ${DB}/+CONTENTS >> ${MANIFEST}

	OPTIONS=""