Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Convert dependencies to khash.
Baptiste Daroussin committed 10 years ago
commit 103ce1c804983caf6c74bdc010f15aebb41be804
parent fd8895b
5 files changed +23 -23
modified libpkg/pkg.c
@@ -514,7 +514,7 @@ pkg_deps(const struct pkg *pkg, struct pkg_dep **d)
{
	assert(pkg != NULL);

-
	HASH_NEXT(pkg->deps, (*d));
+
	kh_next(pkg_deps, pkg->deps, (*d), name);
}

int
@@ -522,7 +522,7 @@ pkg_rdeps(const struct pkg *pkg, struct pkg_dep **d)
{
	assert(pkg != NULL);

-
	HASH_NEXT(pkg->rdeps, (*d));
+
	kh_next(pkg_deps, pkg->rdeps, (*d), name);
}

int
@@ -684,8 +684,7 @@ pkg_adddep(struct pkg *pkg, const char *name, const char *origin, const char *ve
	assert(origin != NULL && origin[0] != '\0');

	pkg_debug(3, "Pkg: add a new dependency origin: %s, name: %s", origin, name);
-
	HASH_FIND_STR(pkg->deps, name, d);
-
	if (d != NULL) {
+
	if (kh_contains(pkg_deps, pkg->deps, name)) {
		if (developer_mode) {
			pkg_emit_error("%s: duplicate dependency listing: %s, fatal (developer mode)",
			    pkg->name, name);
@@ -706,7 +705,7 @@ pkg_adddep(struct pkg *pkg, const char *name, const char *origin, const char *ve
	d->uid = strdup(name);
	d->locked = locked;

-
	HASH_ADD_KEYPTR(hh, pkg->deps, d->name, strlen(d->name), d);
+
	kh_add(pkg_deps, pkg->deps, d, d->name);

	return (EPKG_OK);
}
@@ -730,7 +729,7 @@ pkg_addrdep(struct pkg *pkg, const char *name, const char *origin, const char *v
	d->uid = strdup(name);
	d->locked = locked;

-
	HASH_ADD_KEYPTR(hh, pkg->rdeps, d->origin, strlen(d->origin), d);
+
	kh_add(pkg_deps, pkg->rdeps, d, d->name);

	return (EPKG_OK);
}
@@ -1318,9 +1317,9 @@ pkg_list_count(const struct pkg *pkg, pkg_list list)
{
	switch (list) {
	case PKG_DEPS:
-
		return (HASH_COUNT(pkg->deps));
+
		return (kh_count(pkg->deps));
	case PKG_RDEPS:
-
		return (HASH_COUNT(pkg->rdeps));
+
		return (kh_count(pkg->rdeps));
	case PKG_OPTIONS:
		return (HASH_COUNT(pkg->options));
	case PKG_FILES:
@@ -1352,11 +1351,11 @@ void
pkg_list_free(struct pkg *pkg, pkg_list list)  {
	switch (list) {
	case PKG_DEPS:
-
		HASH_FREE(pkg->deps, pkg_dep_free);
+
		kh_free(pkg_deps, pkg->deps, struct pkg_dep, pkg_dep_free);
		pkg->flags &= ~PKG_LOAD_DEPS;
		break;
	case PKG_RDEPS:
-
		HASH_FREE(pkg->rdeps, pkg_dep_free);
+
		kh_free(pkg_deps, pkg->rdeps, struct pkg_dep, pkg_dep_free);
		pkg->flags &= ~PKG_LOAD_RDEPS;
		break;
	case PKG_OPTIONS:
modified libpkg/pkg_cudf.c
@@ -111,7 +111,7 @@ static int
cudf_emit_pkg(struct pkg *pkg, int version, FILE *f,
		struct pkg_job_universe_item *conflicts_chain)
{
-
	struct pkg_dep *dep, *dtmp;
+
	struct pkg_dep *dep;
	struct pkg_provide *prov, *ptmp;
	struct pkg_conflict *conflict, *ctmp;
	struct pkg_job_universe_item *u;
@@ -126,15 +126,15 @@ cudf_emit_pkg(struct pkg *pkg, int version, FILE *f,
	if (fprintf(f, "\nversion: %d\n", version) < 0)
		return (EPKG_FATAL);

-
	if (HASH_COUNT(pkg->deps) > 0) {
+
	if (kh_count(pkg->deps) > 0) {
		if (fprintf(f, "depends: ") < 0)
			return (EPKG_FATAL);
-
		HASH_ITER(hh, pkg->deps, dep, dtmp) {
+
		kh_each_value(pkg->deps, dep, {
			if (cudf_print_element(f, dep->name,
-
					(dep->hh.next != NULL), &column) < 0) {
+
			    column + 1 == kh_count(pkg->deps), &column) < 0) {
				return (EPKG_FATAL);
			}
-
		}
+
		});
	}

	column = 0;
modified libpkg/pkg_solve.c
@@ -715,7 +715,7 @@ static int
pkg_solve_process_universe_variable(struct pkg_solve_problem *problem,
		struct pkg_solve_variable *var)
{
-
	struct pkg_dep *dep, *dtmp;
+
	struct pkg_dep *dep;
	struct pkg_conflict *conflict, *ctmp;
	struct pkg *pkg;
	struct pkg_solve_variable *cur_var;
@@ -729,10 +729,10 @@ pkg_solve_process_universe_variable(struct pkg_solve_problem *problem,
		pkg = cur_var->unit->pkg;

		/* Depends */
-
		HASH_ITER(hh, pkg->deps, dep, dtmp) {
+
		kh_each_value(pkg->deps, dep, {
			if (pkg_solve_add_depend_rule(problem, cur_var, dep) != EPKG_OK)
				continue;
-
		}
+
		});

		/* Conflicts */
		HASH_ITER(hh, pkg->conflicts, conflict, ctmp) {
modified libpkg/private/pkg.h
@@ -197,6 +197,8 @@ extern const char *pkg_rootdir;
struct pkg_repo_it;
struct pkg_repo;

+
KHASH_MAP_INIT_STR(pkg_deps, struct pkg_dep *);
+

struct pkg {
	bool		 direct;
	bool		 locked;
@@ -229,8 +231,8 @@ struct pkg {
	int64_t			 flatsize;
	int64_t			 old_flatsize;
	int64_t			 timestamp;
-
	struct pkg_dep		*deps;
-
	struct pkg_dep		*rdeps;
+
	kh_pkg_deps_t		*deps;
+
	kh_pkg_deps_t		*rdeps;
	struct pkg_strel	*categories;
	struct pkg_strel	*licenses;
	struct pkg_file		*files;
@@ -263,7 +265,6 @@ struct pkg_dep {
	char		*version;
	char		*uid;
	bool		 locked;
-
	UT_hash_handle	 hh;
};

enum pkg_conflict_type {
modified tests/frontend/rubypuppet.sh
@@ -347,8 +347,8 @@ Installed packages to be UPGRADED:
	ruby: 2.0 -> 2.1

Installed packages to be REINSTALLED:
-
	rubygem-ruby-augeas-1.0 (direct dependency changed: ruby)
-
	rubygem-hiera-1.0 (direct dependency changed: ruby)
+
	rubygem-ruby-augeas-1.0 (direct dependency changed: ruby21-gems)
+
	rubygem-hiera-1.0 (direct dependency changed: ruby21-gems)
	puppet-1.0 (direct dependency changed: ruby)
"