Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Emit files list in ucl
Baptiste Daroussin committed 12 years ago
commit efbda37c373e0f5eab84386be0837ff56253a1dd
parent be10c19
1 file changed +55 -97
modified libpkg/pkg_manifest.c
@@ -1370,79 +1370,83 @@ pkg_parse_manifest_file(struct pkg *pkg, FILE *f, struct pkg_manifest_key *keys)
	return (rc);
}

-
static void
-
manifest_append_seqval(yaml_document_t *doc, int parent, int *seq,
-
    const char *title, const char *value)
-
{
-
	int scalar;
-

-
	if (*seq == -1) {
-
		*seq = yaml_document_add_sequence(doc, NULL,
-
		    YAML_BLOCK_SEQUENCE_STYLE);
-
		scalar = yaml_document_add_scalar(doc, NULL,
-
		    __DECONST(yaml_char_t *, title), strlen(title),
-
		    YAML_PLAIN_SCALAR_STYLE);
-
		yaml_document_append_mapping_pair(doc, parent, scalar, *seq);
-
	}
-
	scalar = yaml_document_add_scalar(doc, NULL,
-
	    __DECONST(yaml_char_t *, value), strlen(value),
-
	    YAML_PLAIN_SCALAR_STYLE);
-
	yaml_document_append_sequence_item(doc, *seq, scalar);
-
}
+
#define obj_append_kv(o, k, v) do {        \
+
	sub = ucl_object_new();                     \
+
	sub->key = strdup(k);                  \
+
	sub->type = UCL_STRING;                  \
+
	sub->value.sv = strdup(v);           \
+
	HASH_ADD_KEYPTR(hh, o->value.ov, sub->key, strlen(sub->key), sub); \
+
} while (0)

-
#define	YAML_ADD_SCALAR(doc, name, style)				       \
-
	yaml_document_add_scalar(doc, NULL, __DECONST(yaml_char_t *, name),    \
-
	    strlen(name), YAML_##style##_SCALAR_STYLE)
+
#define obj_append_boolean(o, k, v) do {       \
+
	sub = ucl_object_new();                     \
+
	sub->key = strdup(k);                  \
+
	sub->type = UCL_BOOLEAN;                     \
+
	sub->value.iv = v;                   \
+
	HASH_ADD_KEYPTR(hh, o->value.ov, sub->key, strlen(sub->key), sub); \
+
} while (0);

-
#define manifest_append_kv(map, key, val, style) do {			\
-
	int key_obj = YAML_ADD_SCALAR(&doc, key, PLAIN);		\
-
	int val_obj = YAML_ADD_SCALAR(&doc, val, style);		\
-
	yaml_document_append_mapping_pair(&doc, map, key_obj, val_obj);	\
-
} while (0)
+
#define obj_append_int(o, k, v) do {       \
+
	sub = ucl_object_new();                     \
+
	sub->key = strdup(k);                  \
+
	sub->type = UCL_INT;                     \
+
	sub->value.iv = v;                   \
+
	HASH_ADD_KEYPTR(hh, o->value.ov, sub->key, strlen(sub->key), sub); \
+
} while (0);

+
#define obj_append_map(o, k, m) do {              \
+
	m = ucl_object_new();                     \
+
	m->key = strdup(k);                  \
+
	m->type = UCL_OBJECT;                  \
+
	HASH_ADD_KEYPTR(hh, o->value.ov, m->key, strlen(m->key), m); \
+
} while (0);
+

+
#define obj_append_seq(o, k, s) do {              \
+
	s = ucl_object_new();                     \
+
	s->key = strdup(k);                  \
+
	s->type = UCL_ARRAY;                  \
+
	HASH_ADD_KEYPTR(hh, o->value.ov, s->key, strlen(s->key), s); \
+
} while (0);
+

+
#define seq_append_val(o, v) do {             \
+
	sub = ucl_object_new();                      \
+
	sub->type = UCL_STRING;                   \
+
	sub->value.sv = strdup(v);            \
+
	LL_PREPEND(o->value.ov, sub);             \
+
} while (0);

int
pkg_emit_filelist(struct pkg *pkg, FILE *f)
{
-
	yaml_emitter_t emitter;
-
	yaml_document_t doc;
-

+
	ucl_object_t *obj, *sub, *seq;
	struct pkg_file *file = NULL;
-

+
	char *output;
	const char *name, *origin, *version;
-

-
	int mapping;
-
	int seq;
	struct sbuf *b = NULL;
-
	int rc = EPKG_OK;

-
	yaml_emitter_initialize(&emitter);
-
	yaml_emitter_set_unicode(&emitter, 1);
-
	yaml_emitter_set_output_file(&emitter, f);
-
	yaml_document_initialize(&doc, NULL, NULL, NULL, 0, 1);
-
	mapping = yaml_document_add_mapping(&doc, NULL,
-
	    YAML_BLOCK_MAPPING_STYLE);
+
	obj = ucl_object_new();

	pkg_get(pkg, PKG_NAME, &name, PKG_ORIGIN, &origin, PKG_VERSION, &version);
-
	manifest_append_kv(mapping, "origin", origin, PLAIN);
-
	manifest_append_kv(mapping, "name", name, PLAIN);
-
	manifest_append_kv(mapping, "version", version, PLAIN);
+
	obj_append_kv(obj, "origin", origin);
+
	obj_append_kv(obj, "name", name);
+
	obj_append_kv(obj, "version", version);

-
	seq = -1;
+
	seq = NULL;
	while (pkg_files(pkg, &file) == EPKG_OK) {
+
		if (seq == NULL)
+
			obj_append_seq(obj, "files", seq);
		urlencode(pkg_file_path(file), &b);
-
		manifest_append_seqval(&doc, mapping, &seq, "files", sbuf_data(b));
+
		seq_append_val(seq, sbuf_data(b));
	}

-
	if (!yaml_emitter_dump(&emitter, &doc))
-
		rc = EPKG_FATAL;
+
	output = ucl_object_emit(obj, UCL_EMIT_JSON_COMPACT);
+
	fprintf(f, "%s", output);
+
	free(output);

	if (b != NULL)
		sbuf_delete(b);

-
	yaml_emitter_delete(&emitter);
-

-
	return (rc);
+
	return (EPKG_OK);
}

static int
@@ -1468,52 +1472,6 @@ emit_manifest(struct pkg *pkg, char **out, short flags)
	int64_t flatsize, pkgsize;
	ucl_object_t *obj, *sub, *map, *seq, *submap;

-
#define obj_append_kv(o, k, v) do {        \
-
	sub = ucl_object_new();                     \
-
	sub->key = strdup(k);                  \
-
	sub->type = UCL_STRING;                  \
-
	sub->value.sv = strdup(v);           \
-
	HASH_ADD_KEYPTR(hh, o->value.ov, sub->key, strlen(sub->key), sub); \
-
} while (0)
-

-
#define obj_append_boolean(o, k, v) do {       \
-
	sub = ucl_object_new();                     \
-
	sub->key = strdup(k);                  \
-
	sub->type = UCL_BOOLEAN;                     \
-
	sub->value.iv = v;                   \
-
	HASH_ADD_KEYPTR(hh, o->value.ov, sub->key, strlen(sub->key), sub); \
-
} while (0);
-

-
#define obj_append_int(o, k, v) do {       \
-
	sub = ucl_object_new();                     \
-
	sub->key = strdup(k);                  \
-
	sub->type = UCL_INT;                     \
-
	sub->value.iv = v;                   \
-
	HASH_ADD_KEYPTR(hh, o->value.ov, sub->key, strlen(sub->key), sub); \
-
} while (0);
-

-
#define obj_append_map(o, k, m) do {              \
-
	m = ucl_object_new();                     \
-
	m->key = strdup(k);                  \
-
	m->type = UCL_OBJECT;                  \
-
	HASH_ADD_KEYPTR(hh, o->value.ov, m->key, strlen(m->key), m); \
-
} while (0);
-

-
#define obj_append_seq(o, k, s) do {              \
-
	s = ucl_object_new();                     \
-
	s->key = strdup(k);                  \
-
	s->type = UCL_ARRAY;                  \
-
	HASH_ADD_KEYPTR(hh, o->value.ov, s->key, strlen(s->key), s); \
-
} while (0);
-

-
#define seq_append_val(o, v) do {             \
-
	sub = ucl_object_new();                      \
-
	sub->type = UCL_STRING;                   \
-
	sub->value.sv = strdup(v);            \
-
	LL_PREPEND(o->value.ov, sub);             \
-
} while (0);
-

-

	obj = ucl_object_new();
	obj->type = UCL_OBJECT;