Now when all callers of the old alpm_db_update() function are gone we can
remove this implementation. And then rename alpm_dbs_update() function to
alpm_db_update().

Signed-off-by: Anatol Pomozov <anatol.pomo...@gmail.com>
---
 README                |   3 +
 lib/libalpm/alpm.h    |  40 +---------
 lib/libalpm/be_sync.c | 167 +-----------------------------------------
 src/pacman/util.c     |   2 +-
 4 files changed, 7 insertions(+), 205 deletions(-)

diff --git a/README b/README
index f5bbaf02..6aa68374 100644
--- a/README
+++ b/README
@@ -664,5 +664,8 @@ API CHANGES BETWEEN 5.2 AND 6.0
 - ALPM_EVENT_PKGDOWNLOAD_START, ALPM_EVENT_PKGDOWNLOAD_DONE, 
ALPM_EVENT_PKGDOWNLOAD_FAILED
 
 [CHANGED]
+- alpm_db_update() changed its signature and now accepts a list of databases
+  rather than a single database. This is need to handle database downloading
+  in a multiplexed way.
 
 [ADDED]
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 903e2fbc..3ea66ccc 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -1039,42 +1039,6 @@ int alpm_db_add_server(alpm_db_t *db, const char *url);
 int alpm_db_remove_server(alpm_db_t *db, const char *url);
 /** @} */
 
-/** Update a package database
- *
- * An update of the package database \a db will be attempted. Unless
- * \a force is true, the update will only be performed if the remote
- * database was modified since the last update.
- *
- * This operation requires a database lock, and will return an applicable error
- * if the lock could not be obtained.
- *
- * Example:
- * @code
- * alpm_list_t *syncs = alpm_get_syncdbs();
- * for(i = syncs; i; i = alpm_list_next(i)) {
- *     alpm_db_t *db = alpm_list_getdata(i);
- *     result = alpm_db_update(0, db);
- *
- *     if(result < 0) {
- *            printf("Unable to update database: %s\n", alpm_strerrorlast());
- *     } else if(result == 1) {
- *         printf("Database already up to date\n");
- *     } else {
- *         printf("Database updated\n");
- *     }
- * }
- * @endcode
- *
- * @note After a successful update, the \link alpm_db_get_pkgcache()
- * package cache \endlink will be invalidated
- * @param force if true, then forces the update, otherwise update only in case
- * the database isn't up to date
- * @param db pointer to the package database to update
- * @return 0 on success, -1 on error (pm_errno is set accordingly), 1 if up to
- * to date
- */
-int alpm_db_update(int force, alpm_db_t *db);
-
 /** Update package databases
  *
  * An update of the package databases in the list \a dbs will be attempted.
@@ -1087,7 +1051,7 @@ int alpm_db_update(int force, alpm_db_t *db);
  * Example:
  * @code
  * alpm_list_t *dbs = alpm_get_syncdbs();
- * ret = alpm_dbs_update(config->handle, dbs, force);
+ * ret = alpm_db_update(config->handle, dbs, force);
  * if(ret < 0) {
  *     pm_printf(ALPM_LOG_ERROR, _("failed to synchronize all databases 
(%s)\n"),
  *         alpm_strerror(alpm_errno(config->handle)));
@@ -1102,7 +1066,7 @@ int alpm_db_update(int force, alpm_db_t *db);
  * the databases aren't up to date
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_dbs_update(alpm_handle_t *handle, alpm_list_t *dbs, int force);
+int alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force);
 
 /** Get a package entry from a package database.
  * @param db pointer to the package database to get the package from
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index add1a576..97808e21 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -136,172 +136,7 @@ valid:
        return 0;
 }
 
-int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
-{
-       char *syncpath;
-       const char *dbext;
-       alpm_list_t *i;
-       int updated = 0;
-       int ret = -1;
-       mode_t oldmask;
-       alpm_handle_t *handle;
-       int siglevel;
-
-       /* Sanity checks */
-       ASSERT(db != NULL, return -1);
-       handle = db->handle;
-       handle->pm_errno = ALPM_ERR_OK;
-       ASSERT(db != handle->db_local, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, 
-1));
-       ASSERT(db->servers != NULL, RET_ERR(handle, ALPM_ERR_SERVER_NONE, -1));
-
-       if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
-               return 0;
-       }
-
-       syncpath = get_sync_dir(handle);
-       if(!syncpath) {
-               return -1;
-       }
-
-       /* force update of invalid databases to fix potential mismatched 
database/signature */
-       if(db->status & DB_STATUS_INVALID) {
-               force = 1;
-       }
-
-       /* make sure we have a sane umask */
-       oldmask = umask(0022);
-
-       siglevel = alpm_db_get_siglevel(db);
-
-       /* attempt to grab a lock */
-       if(_alpm_handle_lock(handle)) {
-               free(syncpath);
-               umask(oldmask);
-               RET_ERR(handle, ALPM_ERR_HANDLE_LOCK, -1);
-       }
-
-       dbext = db->handle->dbext;
-
-       for(i = db->servers; i; i = i->next) {
-               const char *server = i->data, *final_db_url = NULL;
-               struct dload_payload payload = {0};
-               size_t len;
-               int sig_ret = 0;
-
-               /* set hard upper limit of 128MiB */
-               payload.max_size = 128 * 1024 * 1024;
-
-               /* print server + filename into a buffer */
-               len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
-               MALLOC(payload.fileurl, len,
-                       {
-                               free(syncpath);
-                               umask(oldmask);
-                               RET_ERR(handle, ALPM_ERR_MEMORY, -1);
-                       }
-               );
-               snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, 
dbext);
-               payload.handle = handle;
-               payload.force = force;
-               payload.unlink_on_fail = 1;
-
-               ret = _alpm_download(&payload, syncpath, NULL, &final_db_url);
-               _alpm_dload_payload_reset(&payload);
-               updated = (updated || ret == 0);
-
-               if(ret != -1 && updated && (siglevel & ALPM_SIG_DATABASE)) {
-                       /* an existing sig file is no good at this point */
-                       char *sigpath = _alpm_sigpath(handle, 
_alpm_db_path(db));
-                       if(!sigpath) {
-                               ret = -1;
-                               break;
-                       }
-                       unlink(sigpath);
-                       free(sigpath);
-
-
-                       /* check if the final URL from internal downloader 
looks reasonable */
-                       if(final_db_url != NULL) {
-                               if(strlen(final_db_url) < 3
-                                               || strcmp(final_db_url + 
strlen(final_db_url) - strlen(dbext),
-                                                               dbext) != 0) {
-                                       final_db_url = NULL;
-                               }
-                       }
-
-                       /* if we downloaded a DB, we want the .sig from the 
same server */
-                       if(final_db_url != NULL) {
-                               /* print final_db_url into a buffer (leave 
space for .sig) */
-                               len = strlen(final_db_url) + 5;
-                       } else {
-                               /* print server + filename into a buffer (leave 
space for separator and .sig) */
-                               len = strlen(server) + strlen(db->treename) + 
strlen(dbext) + 6;
-                       }
-
-                       MALLOC(payload.fileurl, len,
-                               {
-                                       free(syncpath);
-                                       umask(oldmask);
-                                       RET_ERR(handle, ALPM_ERR_MEMORY, -1);
-                               }
-                       );
-
-                       if(final_db_url != NULL) {
-                               snprintf(payload.fileurl, len, "%s.sig", 
final_db_url);
-                       } else {
-                               snprintf(payload.fileurl, len, "%s/%s%s.sig", 
server, db->treename, dbext);
-                       }
-
-                       payload.handle = handle;
-                       payload.force = 1;
-                       payload.errors_ok = (siglevel & 
ALPM_SIG_DATABASE_OPTIONAL);
-
-                       /* set hard upper limit of 16KiB */
-                       payload.max_size = 16 * 1024;
-
-                       sig_ret = _alpm_download(&payload, syncpath, NULL, 
NULL);
-                       /* errors_ok suppresses error messages, but not the 
return code */
-                       sig_ret = payload.errors_ok ? 0 : sig_ret;
-                       _alpm_dload_payload_reset(&payload);
-               }
-
-               if(ret != -1 && sig_ret != -1) {
-                       break;
-               }
-       }
-
-       if(updated) {
-               /* Cache needs to be rebuilt */
-               _alpm_db_free_pkgcache(db);
-
-               /* clear all status flags regarding validity/existence */
-               db->status &= ~DB_STATUS_VALID;
-               db->status &= ~DB_STATUS_INVALID;
-               db->status &= ~DB_STATUS_EXISTS;
-               db->status &= ~DB_STATUS_MISSING;
-
-               /* if the download failed skip validation to preserve the 
download error */
-               if(ret != -1 && sync_db_validate(db) != 0) {
-                       /* pm_errno should be set */
-                       ret = -1;
-               }
-       }
-
-       if(ret == -1) {
-               /* pm_errno was set by the download code */
-               _alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync db: %s\n",
-                               alpm_strerror(handle->pm_errno));
-       } else {
-               handle->pm_errno = ALPM_ERR_OK;
-       }
-
-       _alpm_handle_unlock(handle);
-       free(syncpath);
-       umask(oldmask);
-       return ret;
-}
-
-int SYMEXPORT alpm_dbs_update(alpm_handle_t *handle, alpm_list_t *dbs, int 
force) {
+int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int 
force) {
        char *syncpath;
        const char *dbext = handle->dbext;
        alpm_list_t *i;
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 2a021987..90cd46c9 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -154,7 +154,7 @@ int sync_syncdbs(int level, alpm_list_t *syncs)
        int force = (level < 2 ? 0 : 1);
 
        multibar_move_completed_up = 0;
-       ret = alpm_dbs_update(config->handle, syncs, force);
+       ret = alpm_db_update(config->handle, syncs, force);
        if(ret < 0) {
                pm_printf(ALPM_LOG_ERROR, _("failed to synchronize all 
databases (%s)\n"),
                        alpm_strerror(alpm_errno(config->handle)));
-- 
2.26.2

Reply via email to