diff options
author | Dan McGee <dan@archlinux.org> | 2011-04-21 21:40:00 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-04-24 10:48:34 -0500 |
commit | 2df1534b787a87b4b7e8e4aaa5a9d5c2e3c6e47a (patch) | |
tree | fffd2ea60db7d7139c016779ad5c0cd1e1dafdf8 | |
parent | 225acbbff176e52a88eb6b8030d331a599a7ef06 (diff) | |
download | pacman-2df1534b787a87b4b7e8e4aaa5a9d5c2e3c6e47a.tar.xz |
sync_commit: refactor out file downloads
This part is almost completely self-contained, except building the list
of delta filenames that we use later to check their md5sums. Refactor it
into a static method so we can bring most of the code in sync_commit
closer to the method name.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | lib/libalpm/sync.c | 69 |
1 files changed, 37 insertions, 32 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 0ff0c79e..b9209bbc 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -687,18 +687,12 @@ static int test_md5sum(pmtrans_t *trans, const char *filepath, return ret; } -int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) +static int download_files(pmtrans_t *trans, alpm_list_t **deltas) { - alpm_list_t *i, *j, *k; - alpm_list_t *files = NULL, *deltas = NULL; - size_t numtargs, current = 0, replaces = 0; + const char *cachedir; + alpm_list_t *i, *j; + alpm_list_t *files = NULL; int errors = 0; - const char *cachedir = NULL; - int ret = -1; - - ALPM_LOG_FUNC; - - ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); cachedir = _alpm_filecache_setup(); trans->state = STATE_DOWNLOADING; @@ -731,26 +725,18 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) alpm_list_t *delta_path = spkg->delta_path; if(delta_path) { /* using deltas */ - alpm_list_t *dlts = NULL; - + alpm_list_t *dlts; for(dlts = delta_path; dlts; dlts = dlts->next) { - pmdelta_t *d = dlts->data; - - if(d->download_size != 0) { - /* add the delta filename to the download list if needed */ - files = alpm_list_add(files, strdup(d->delta)); + pmdelta_t *delta = dlts->data; + if(delta->download_size != 0) { + files = alpm_list_add(files, strdup(delta->delta)); } - /* keep a list of all the delta files for md5sums */ - deltas = alpm_list_add(deltas, d); + *deltas = alpm_list_add(*deltas, delta); } - } else { - /* not using deltas */ - if(spkg->download_size != 0) { - /* add the filename to the download list if needed */ - files = alpm_list_add(files, strdup(fname)); - } + } else if(spkg->download_size != 0) { + files = alpm_list_add(files, strdup(fname)); } } @@ -760,15 +746,17 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) EVENT(trans, PM_TRANS_EVT_RETRIEVE_START, current->treename, NULL); for(j = files; j; j = j->next) { const char *filename = j->data; - for(k = current->servers; k; k = k->next) { - const char *server = k->data; + alpm_list_t *server; + for(server = current->servers; server; server = server->next) { + const char *server_url = server->data; char *fileurl; size_t len; + int ret; /* print server + filename into a buffer */ - len = strlen(server) + strlen(filename) + 2; + len = strlen(server_url) + strlen(filename) + 2; CALLOC(fileurl, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, -1)); - snprintf(fileurl, len, "%s/%s", server, filename); + snprintf(fileurl, len, "%s/%s", server_url, filename); ret = _alpm_download(fileurl, cachedir, 0, 1, 0); FREE(fileurl); @@ -779,15 +767,15 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) } } + FREELIST(files); if(errors) { _alpm_log(PM_LOG_WARNING, _("failed to retrieve some files from %s\n"), current->treename); if(pm_errno == 0) { pm_errno = PM_ERR_RETRIEVE; } - goto error; + return -1; } - FREELIST(files); } } @@ -801,6 +789,24 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) if(handle->totaldlcb) { handle->totaldlcb(0); } + return 0; +} + +int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) +{ + alpm_list_t *i; + alpm_list_t *deltas = NULL; + size_t numtargs, current = 0, replaces = 0; + int errors = 0; + int ret = -1; + + ALPM_LOG_FUNC; + + ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + + if(download_files(trans, &deltas)) { + goto error; + } /* if we have deltas to work with */ if(handle->usedelta && deltas) { @@ -969,7 +975,6 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) ret = 0; error: - FREELIST(files); alpm_list_free(deltas); return ret; } |