Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Attach a repository entry to a package for multi repo installations
Marin Atanasov Nikolov committed 14 years ago
commit 806f4679549b8921dde6894f0cfe7eb541f1b540
parent ec333a3
4 files changed +76 -1
modified libpkg/pkg.c
@@ -54,6 +54,7 @@ pkg_new(struct pkg **pkg, pkg_t type)
	STAILQ_INIT(&(*pkg)->conflicts);
	STAILQ_INIT(&(*pkg)->scripts);
	STAILQ_INIT(&(*pkg)->options);
+
	STAILQ_INIT(&(*pkg)->repos);

	(*pkg)->automatic = false;
	(*pkg)->type = type;
@@ -84,6 +85,7 @@ pkg_reset(struct pkg *pkg, pkg_t type)
	pkg_freeconflicts(pkg);
	pkg_freescripts(pkg);
	pkg_freeoptions(pkg);
+
	pkg_repos_free_in_pkg(pkg);

	pkg->type = type;
}
@@ -105,6 +107,7 @@ pkg_free(struct pkg *pkg)
	pkg_freeconflicts(pkg);
	pkg_freescripts(pkg);
	pkg_freeoptions(pkg);
+
	pkg_repos_free_in_pkg(pkg);

	free(pkg);
}
modified libpkg/pkg.h
@@ -613,6 +613,14 @@ int pkg_repos_load(struct pkg_repos *repos);
int pkg_repos_add(struct pkg_repos *repos, struct pkg_repos_entry *re);

/**
+
 * Adds a repository entry to a package object
+
 * @param pkg A valid package object
+
 * @param re A valid repository entry object
+
 * @return EPKG_OK on success, EPKG_FATAL on error
+
 */
+
int pkg_repos_add_in_pkg(struct pkg *pkg, struct pkg_repos_entry *re);
+

+
/**
 * Get the next repository from the tail
 * @param repos A valid repository pointer as returned by pkg_repos_new()
 * @param re A pointer to a repository entry to save the result. Must be set to
@@ -622,6 +630,15 @@ int pkg_repos_add(struct pkg_repos *repos, struct pkg_repos_entry *re);
int pkg_repos_next(struct pkg_repos *repos, struct pkg_repos_entry **re);

/**
+
 * Get the next repository assigned to a package object
+
 * @param pkg A valid package object
+
 * @param re A pointer to a repository entry to save the result. Must be set to
+
 * NULL for the first repository entry
+
 * @return EPKG_OK on success, EPKG_END if end of repository is reached
+
 */
+
int pkg_repos_next_in_pkg(struct pkg *pkg, struct pkg_repos_entry **re);
+

+
/**
 * Returns the name associated with a repository entry object
 * @param re A valid repository entry object
 */
@@ -645,6 +662,11 @@ unsigned int pkg_repos_get_line(struct pkg_repos_entry *re);
void pkg_repos_free(struct pkg_repos *repos);

/**
+
 * Free the memory used by the repository objects in a package
+
 */
+
void pkg_repos_free_in_pkg(struct pkg *pkg);
+

+
/**
 * Get the value of a configuration key
 */
const char * pkg_config(const char *key);
modified libpkg/pkg_private.h
@@ -35,6 +35,7 @@ struct pkg {
	STAILQ_HEAD(conflicts, pkg_conflict) conflicts;
	STAILQ_HEAD(scripts, pkg_script) scripts;
	STAILQ_HEAD(options, pkg_option) options;
+
	STAILQ_HEAD(repos_entry, pkg_repos_entry) repos;
	int flags;
	int64_t rowid;
	pkg_t type;
modified libpkg/pkg_repo.c
@@ -84,7 +84,7 @@ pkg_repos_load(struct pkg_repos *repos)
        char buf[MAXPATHLEN];
        char *token = NULL, *tmp = NULL;
        unsigned int count = 0, line = 0;
-
	struct pkg_repos_entry *re;
+
	struct pkg_repos_entry *re = NULL;

	assert(repos != NULL);

@@ -158,6 +158,16 @@ pkg_repos_add(struct pkg_repos *repos, struct pkg_repos_entry *re)
}

int
+
pkg_repos_add_in_pkg(struct pkg *pkg, struct pkg_repos_entry *re)
+
{
+
	assert(pkg != NULL && re != NULL);
+

+
	STAILQ_INSERT_TAIL(&pkg->repos, re, entries);
+

+
	return (EPKG_OK);
+
}
+

+
int
pkg_repos_next(struct pkg_repos *repos, struct pkg_repos_entry **re)
{
	assert(repos != NULL);
@@ -173,6 +183,22 @@ pkg_repos_next(struct pkg_repos *repos, struct pkg_repos_entry **re)
		return (EPKG_OK);
}

+
int
+
pkg_repos_next_in_pkg(struct pkg *pkg, struct pkg_repos_entry **re)
+
{
+
	assert(pkg != NULL);
+

+
	if (*re == NULL)
+
		*re = STAILQ_FIRST(&pkg->repos);
+
	else
+
		*re = STAILQ_NEXT(*re, entries);
+

+
	if (*re == NULL)
+
		return (EPKG_END);
+
	else
+
		return (EPKG_OK);
+
}
+

const char *
pkg_repos_get_name(struct pkg_repos_entry *re)
{
@@ -202,6 +228,8 @@ pkg_repos_free(struct pkg_repos *repos)
{
	struct pkg_repos_entry *re1, *re2;

+
	assert(repos != NULL);
+

        re1 = STAILQ_FIRST(&repos->nodes);
        while (re1 != NULL) {
                re2 = STAILQ_NEXT(re1, entries);
@@ -218,6 +246,27 @@ pkg_repos_free(struct pkg_repos *repos)
	free(repos);
}

+
void
+
pkg_repos_free_in_pkg(struct pkg *pkg)
+
{
+
	struct pkg_repos_entry *re1, *re2;
+

+
	assert(pkg != NULL);
+

+
	re1 = STAILQ_FIRST(&pkg->repos);
+
	while (re1 != NULL) {
+
		re2 = STAILQ_NEXT(re1, entries);
+

+
		if (re1->name != NULL)
+
			free(re1->name);
+
		if (re1->url != NULL)
+
			free(re1->url);
+

+
		free(re1);
+
		re1 = re2;
+
	}
+
}
+

static int
pkg_repos_is_reserved_name(struct pkg_repos *repos, struct pkg_repos_entry *re)
{