Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Read ucl keywords in priority and only then fallback on yaml one
Baptiste Daroussin committed 12 years ago
commit 1ef8f965841c5e31a52eb625c78cc51f27bbad38
parent 74a509c129eae7d4a7e3b8510d3abf5082dabb99
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);