Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
fetch also update the remote repositories if needed
Baptiste Daroussin committed 14 years ago
commit ed9631e51cd6763280179533d3329b3be18495ff
parent 4554d5d6cabe5d44bbe1a14d43f77f442bb9a3c2
1 file changed +46 -0
modified pkg/fetch.c
@@ -25,6 +25,7 @@
 */

#include <sys/types.h>
+
#include <sys/param.h>

#include <err.h>
#include <libgen.h>
@@ -49,14 +50,19 @@ usage_fetch(void)
int
exec_fetch(int argc, char **argv)
{
+
	char url[MAXPATHLEN];
	struct pkg *pkg = NULL;
	struct pkgdb_it *it = NULL;
	struct pkgdb *db = NULL;
	struct pkg_jobs *jobs = NULL;
	const char *reponame = NULL;
+
	const char *repo_name = NULL;
+
	const char *packagesite = NULL;
+
	struct pkg_config_kv *repokv = NULL;
	int retcode = EXIT_FAILURE;
	int ch;
	bool yes = false;
+
	bool multi_repos = false;
	match_t match = MATCH_EXACT;

	while ((ch = getopt(argc, argv, "ygxXr:qa")) != -1) {
@@ -101,6 +107,46 @@ exec_fetch(int argc, char **argv)
		return (EX_NOPERM);
	}

+
	/* first update the remote repositories if needed */
+
	pkg_config_bool(PKG_CONFIG_MULTIREPOS, &multi_repos);
+
	if (!multi_repos) {
+
		/*
+
		 * Single remote database
+
		 */
+
		pkg_config_string(PKG_CONFIG_REPO, &packagesite);
+
		if (packagesite == NULL) {
+
			warnx("PACKAGESITE is not defined.");
+
			return (1);
+
		}
+

+
		if (packagesite[strlen(packagesite) - 1] == '/')
+
			snprintf(url, MAXPATHLEN, "%srepo.txz", packagesite);
+
		else
+
			snprintf(url, MAXPATHLEN, "%s/repo.txz", packagesite);
+

+
		retcode = pkg_update("repo", url);
+
		if (retcode == EPKG_UPTODATE)
+
			retcode = EPKG_OK;
+
	} else {
+
		/* multiple repositories */
+
		while (pkg_config_list(PKG_CONFIG_REPOS, &repokv) == EPKG_OK) {
+
			repo_name = pkg_config_kv_get(repokv, PKG_CONFIG_KV_KEY);
+
			packagesite = pkg_config_kv_get(repokv, PKG_CONFIG_KV_VALUE);
+

+
			if (packagesite[strlen(packagesite) - 1] == '/')
+
				snprintf(url, MAXPATHLEN, "%srepo.txz", packagesite);
+
			else
+
				snprintf(url, MAXPATHLEN, "%s/repo.txz", packagesite);
+

+
			retcode = pkg_update(repo_name, url);
+
			if (retcode == EPKG_UPTODATE) {
+
				retcode = EPKG_OK;
+
			}
+
		}
+
	}
+

+
	if (retcode != EPKG_OK)
+
		return (retcode);
	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
		return (EX_IOERR);
	}