Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Read ucl keywords in priority and only then fallback on yaml one
Baptiste Daroussin committed 12 years ago
commit 1ef8f965841c5e31a52eb625c78cc51f27bbad38
parent 74a509c
1 file changed +37 -4
modified libpkg/pkg_ports.c
@@ -782,9 +782,29 @@ parse_and_apply_keyword_file(ucl_object_t *obj, struct plist *p, char *line, str
	return (EPKG_OK);
}

+
static ucl_object_t *
+
external_yaml_keyword(char *keyword)
+
{
+
	const char *keyword_dir = NULL;
+
	char keyfile_path[MAXPATHLEN];
+

+
	keyword_dir = pkg_object_string(pkg_config_get("PLIST_KEYWORDS_DIR"));
+
	if (keyword_dir == NULL) {
+
		keyword_dir = pkg_object_string(pkg_config_get("PORTSDIR"));
+
		snprintf(keyfile_path, sizeof(keyfile_path),
+
		    "%s/Keywords/%s.yaml", keyword_dir, keyword);
+
	} else {
+
		snprintf(keyfile_path, sizeof(keyfile_path),
+
		    "%s/%s.yaml", keyword_dir, keyword);
+
	}
+

+
	return (yaml_to_ucl(keyfile_path, NULL, 0));
+
}
+

static int
external_keyword(struct plist *plist, char *keyword, char *line, struct file_attr *attr)
{
+
	struct ucl_parser *parser;
	const char *keyword_dir = NULL;
	char keyfile_path[MAXPATHLEN];
	int ret = EPKG_UNKNOWN;
@@ -794,14 +814,27 @@ external_keyword(struct plist *plist, char *keyword, char *line, struct file_att
	if (keyword_dir == NULL) {
		keyword_dir = pkg_object_string(pkg_config_get("PORTSDIR"));
		snprintf(keyfile_path, sizeof(keyfile_path),
-
		    "%s/Keywords/%s.yaml", keyword_dir, keyword);
+
		    "%s/Keywords/%s.ucl", keyword_dir, keyword);
	} else {
		snprintf(keyfile_path, sizeof(keyfile_path),
-
		    "%s/%s.yaml", keyword_dir, keyword);
+
		    "%s/%s.ucl", keyword_dir, keyword);
	}

-
	if ((o = yaml_to_ucl(keyfile_path, NULL, 0)) == NULL)
-
		return (EPKG_UNKNOWN);
+
	if (eaccess(keyfile_path, R_OK) != 0) {
+
		if ((o = external_yaml_keyword(keyword)) == NULL)
+
			return (EPKG_UNKNOWN);
+
	} else {
+
		parser = ucl_parser_new(0);
+
		if (!ucl_parser_add_file(parser, keyfile_path)) {
+
			pkg_emit_error("cannot parse keyword: %s",
+
			    ucl_parser_get_error(parser));
+
			ucl_parser_free(parser);
+
			return (EPKG_UNKNOWN);
+
		}
+

+
		o = ucl_parser_get_object(parser);
+
		ucl_parser_free(parser);
+
	}

	ret = parse_and_apply_keyword_file(o, plist, line, attr);