[pacman-dev] Long functions and other minor fixes

Dan McGee dpmcgee at gmail.com
Thu Dec 28 14:15:18 EST 2006


This is a refactoring for _alpm_sync_sysupgrade, but I didn't really
cut down on the total code length. I just thought the triple nested
for loops deserved their own function (and maybe this will lead to
inspiration to cleaning up this code). The patch looks kind of weird
but a vimdiff makes a lot more sense of it.

-Dan

$ cvs diff lib/libalpm/sync.c
Index: lib/libalpm/sync.c
===================================================================
RCS file: /home/cvs-pacman/pacman-lib/lib/libalpm/sync.c,v
retrieving revision 1.86
diff -u -r1.86 sync.c
--- lib/libalpm/sync.c  22 Dec 2006 19:38:55 -0000      1.86
+++ lib/libalpm/sync.c  28 Dec 2006 19:09:27 -0000
@@ -118,12 +118,14 @@
        return((pkg->date + handle->upgradedelay) > t);
 }

-int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local,
pmlist_t *dbs_sync)
+/* Find recommended replacements for packages during a sync.
+ * (refactored from _alpm_sync_prepare)
+ */
+static int find_replacements(pmtrans_t *trans, pmdb_t *db_local,
pmlist_t *dbs_sync)
 {
        pmlist_t *i, *j, *k;

-       /* check for "recommended" package replacements */
-       _alpm_log(PM_LOG_FLOW1, _("checking for package replacements"));
+       /* TODO can these nested loops be commented better? */
        for(i = dbs_sync; i; i = i->next) {
                for(j = _alpm_db_get_pkgcache(i->data, INFRQ_DESC); j;
j = j->next) {
                        pmpkg_t *spkg = j->data;
@@ -179,6 +181,23 @@
                }
        }

+       return(0);
+
+error:
+       return(-1);
+}
+
+int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local,
pmlist_t *dbs_sync)
+{
+       pmlist_t *i, *j;
+
+       /* check for "recommended" package replacements */
+       _alpm_log(PM_LOG_FLOW1, _("checking for package replacements"));
+       if( find_replacements(trans, db_local, dbs_sync) != 0 ) {
+               /* pm_errno is set by find_replacement */
+               goto error;
+       }
+
        /* match installed packages with the sync dbs and compare versions */
        _alpm_log(PM_LOG_FLOW1, _("checking for package upgrades"));
        for(i = _alpm_db_get_pkgcache(db_local, INFRQ_NONE); i; i = i->next) {
@@ -382,7 +401,7 @@
 {
        pmlist_t *deps = NULL;
        pmlist_t *list = NULL; /* list allowing checkdeps usage with
data from trans->packages */
-       pmlist_t *trail = NULL; /* breadcrumb list to avoid running
into circles */
+       pmlist_t *trail = NULL; /* breadcrumb list to avoid running in
circles */
        pmlist_t *asked = NULL;
        pmlist_t *i, *j, *k, *l;
        int ret = 0;




More information about the pacman-dev mailing list