All pastes #904090 Raw Edit

Miscellany

public diff v1 · immutable
·published 2008-02-14 18:33 UTC
rendered paste body
diff --git a/src/pacman/sync.c b/src/pacman/sync.cindex 27218d6..d4c7444 100644--- a/src/pacman/sync.c+++ b/src/pacman/sync.c@@ -159,19 +159,41 @@ static int sync_cleancache(int level) 			if(alpm_pkg_load(path, 0, &localpkg) != 0 || localpkg == NULL) { 				continue; 			}-			/* check if this package is in the local DB */-			dbpkg = alpm_db_get_pkg(db_local, alpm_pkg_get_name(localpkg));-			if(dbpkg == NULL) {-				/* delete package, not present in local DB */-				unlink(path);-			} else if(alpm_pkg_vercmp(alpm_pkg_get_version(localpkg),+			int delete = 0;+			int local = 0;+			if(local) {+				/* check if this package is in the local DB */+				dbpkg = alpm_db_get_pkg(db_local, alpm_pkg_get_name(localpkg));+				if(dbpkg == NULL) {+					/* delete package, not present in local DB */+					delete = 1;+				} else if(alpm_pkg_vercmp(alpm_pkg_get_version(localpkg), 							alpm_pkg_get_version(dbpkg)) != 0) {-				/* delete package, it was found but version differs */-				unlink(path);+					/* delete package, it was found but version differs */+					delete = 1;+				}+				/* else version was the same, so keep the package */+				/* free the local file package */+				alpm_pkg_free(localpkg);+			} else {+				alpm_list_t *sync_dbs = alpm_option_get_syncdbs();+				alpm_list_t *j;++				delete = 1;+				for(j = sync_dbs; j; j = alpm_list_next(j)) {+					pmdb_t *db = alpm_list_getdata(j);+					pmpkg_t *findpkg = alpm_db_get_pkg(db, alpm_pkg_get_name(localpkg));+					if(findpkg && alpm_pkg_vercmp(alpm_pkg_get_version(localpkg),+								alpm_pkg_get_version(findpkg)) == 0) {+						delete = 0;+						break;+					}+				}+			}++			if(delete) {+				printf("unlink %s\n", path); 			}-			/* else version was the same, so keep the package */-			/* free the local file package */-			alpm_pkg_free(localpkg); 		} 		printf(_("done.\n")); 	} else {