[pacman-dev] [PATCH 3/6] sync_commit: refactor out file downloads

Dan McGee dan at archlinux.org
Fri Apr 22 17:40:08 EDT 2011


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 at archlinux.org>
---
 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 0ff0c79..b9209bb 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;
 }
-- 
1.7.4.4



More information about the pacman-dev mailing list