Beispiel #1
0
/**
 * Fetch repository calalogues.
 */
int
pkgcli_update(bool force) {
    const char *packagesite = NULL;
    const char *repo_name;
    bool multi_repos = false;
    struct pkg_config_kv *repokv = NULL;
    int retcode = EPKG_FATAL;
    char name[MAXPATHLEN];

    if (!quiet)
        printf("Updating repository catalogue\n");

    pkg_config_bool(PKG_CONFIG_MULTIREPOS, &multi_repos);

    /* single repository */
    if (!multi_repos) {
        /*
         * Single remote database
         */

        pkg_config_string(PKG_CONFIG_REPO, &packagesite);

        if (packagesite == NULL) {
            warnx("PACKAGESITE is not defined.");
            return (1);
        }

        retcode = pkg_update("repo", packagesite, force);
        if (retcode == EPKG_UPTODATE) {
            if (!quiet)
                printf("Repository catalogue is up-to-date, "
                       "no need to fetch fresh copy\n");
            retcode = EPKG_OK;
        }
    } else {
        /* multiple repositories */
        while (pkg_config_kvlist(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);

            snprintf(name, MAXPATHLEN, "repo-%s", repo_name);
            retcode = pkg_update(name, packagesite, force);
            if (retcode == EPKG_UPTODATE) {
                if (!quiet)
                    printf("%s repository catalogue is "
                           "up-to-date, no need to fetch "
                           "fresh copy\n", repo_name);
                retcode = EPKG_OK;
            }
            if (retcode != EPKG_OK)
                break;
        }
    }

    return (retcode);
}
Beispiel #2
0
int
exec_update(int argc, char **argv)
{
	char url[MAXPATHLEN];
	const char *packagesite = NULL;
	const char *repo_name;
	struct pkg_config_kv *repokv = NULL;
	int retcode = EPKG_OK;
	bool multi_repos = false;

	(void)argv;
	if (argc != 1) {
		usage_update();
		return (EX_USAGE);
	}

	if (geteuid() != 0) {
		warnx("updating the remote database can only be done as root");
		return (EX_NOPERM);
	}

	/* 
	 * Fetch remote databases.
	 */

	pkg_config_bool(PKG_CONFIG_MULTIREPOS, &multi_repos);

	/* single repository */
	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 = update_from_remote_repo("repo", url);
	} 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 = update_from_remote_repo(repo_name, url);
		}
	}

	return (retcode);
}