xbps-repo: changed the 'sync' target to update from all registered

remote repositories, so remove its argument.

xbps_sync_repository_pkg_index:
 - create the local repo dir in XBPS_META_PATH.
 - also add the uri scheme (http://, https://, ftp://) in the created
   local directory and subst ':' also with an underscore.
 - do not create local repo directories unless the download pkg-index
   plist file is verified to be fetched correctly.

xbps_check_is_repo_string_remote:
  New function to check if a repo string is a remote repository, use
  it in all places where it was used before.

--HG--
extra : convert_revision : xtraeme%40gmail.com-20091123042316-rmu4w3ehoxwh3iz8
This commit is contained in:
Juan RP
2009-11-23 04:23:16 +00:00
parent a95aecaf70
commit 13706cf0a5
6 changed files with 169 additions and 63 deletions

View File

@ -49,14 +49,13 @@ usage(void)
{
printf("Usage: xbps-repo [options] [action] [arguments]\n\n"
" Available actions:\n"
" add, genindex, list, remove, search, show\n"
" add, genindex, list, remove, search, show, sync\n"
" Actions with arguments:\n"
" add\t\t<URI>\n"
" genindex\t<path>\n"
" remove\t<URI>\n"
" search\t<string>\n"
" show\t<pkgname>\n"
" sync\t\t<URI>\n"
" Options shared by all actions:\n"
" -r\t\t<rootdir>\n"
" -V\t\tPrints xbps release version\n"
@ -134,21 +133,21 @@ out:
}
static int
add_repository(const char *uri, bool remote)
add_repository(const char *uri)
{
prop_dictionary_t dict;
repo_info_t *rinfo;
char *plist, idxstr[PATH_MAX];
int rv = 0;
if (remote) {
if (xbps_check_is_repo_string_remote(uri)) {
if (!sanitize_localpath(idxstr, uri))
return errno;
printf("Fetching remote package index at %s...\n", uri);
rv = xbps_sync_repository_pkg_index(idxstr);
if (rv != 0) {
printf("Couldn't download pkg index: %s\n",
printf("Error: could not fetch pkg index file: %s.\n",
xbps_fetch_error_string());
return rv;
}
@ -208,8 +207,8 @@ int
main(int argc, char **argv)
{
char dpkgidx[PATH_MAX], *root = NULL;
struct repository_data *rdata = NULL;
int c, rv = 0;
bool remote_repo = false;
while ((c = getopt(argc, argv, "Vr:")) != -1) {
switch (c) {
@ -238,11 +237,7 @@ main(int argc, char **argv)
if (argc != 2)
usage();
if ((strncmp(argv[1], "http://", 7) == 0) ||
(strncmp(argv[1], "ftp://", 6) == 0))
remote_repo = true;
rv = add_repository(argv[1], remote_repo);
rv = add_repository(argv[1]);
} else if (strcasecmp(argv[0], "list") == 0) {
/* Lists all repositories registered in pool. */
@ -304,15 +299,25 @@ main(int argc, char **argv)
exit(rv);
} else if (strcasecmp(argv[0], "sync") == 0) {
/* Syncs the pkg index file from a remote repo */
if (argc != 2)
/* Syncs the pkg index for all registered remote repos */
if (argc != 1)
usage();
if (!sanitize_localpath(dpkgidx, argv[1]))
exit(EXIT_FAILURE);
printf("Updating package index from: %s\n", dpkgidx);
rv = xbps_sync_repository_pkg_index(dpkgidx);
if ((rv = xbps_prepare_repolist_data()) != 0)
exit(rv);
/*
* Iterate over repository pool.
*/
SIMPLEQ_FOREACH(rdata, &repodata_queue, chain) {
const char *uri = rdata->rd_uri;
if (xbps_check_is_repo_string_remote(uri)) {
printf("Syncing package index from: %s\n", uri);
rv = xbps_sync_repository_pkg_index(uri);
if (rv != 0)
break;
}
}
xbps_release_repolist_data();
} else {
usage();