Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fwife.git;a=commitdiff;h=a8e837acc00a01ed0a71e4167c46507aed39f033
commit a8e837acc00a01ed0a71e4167c46507aed39f033 Author: Elentir <elen...@mailoo.org> Date: Fri Jan 22 00:36:48 2010 +0100 select: rewrite categorysize() and group2pkgs() * just read the database, no need for transactions * fix a bug when reinstalling on a previous install diff --git a/src/plugins/select.c b/src/plugins/select.c index 278a3a1..8a2d61f 100644 --- a/src/plugins/select.c +++ b/src/plugins/select.c @@ -93,19 +93,19 @@ void cb_db_register(char *section, PM_DB *db) mydatabase = db; } -GList* group2pkgs(GList *syncs, char *group) +GList* group2pkgs(char *group) { PM_GRP *grp; - PM_LIST *pmpkgs, *lp, *junk; - GList *pkgs=NULL; - GList *list=NULL; + PM_PKG *pkg; + PM_LIST *pmpkgs, *lp; + GList *list = NULL; int i, optional=0, addpkg=1; char *ptr, *pkgname, *pkgfullname, *lang; double size; // add the core group to the start of the base list if(!strcmp(group, "base")) - list = group2pkgs(syncs, "core"); + list = group2pkgs("core"); // get language suffix lang = strdup(getenv("LANG")); @@ -115,124 +115,69 @@ GList* group2pkgs(GList *syncs, char *group) if(strlen(group) >= strlen(EXGRPSUFFIX) && !strcmp(group + strlen(group) - strlen(EXGRPSUFFIX), EXGRPSUFFIX)) optional=1; - for (i=0; i<g_list_length(syncs); i++) - { + for (i = 0; i < g_list_length(syncs); i++) { grp = pacman_db_readgrp(g_list_nth_data(syncs, i), group); - if(grp) - { + if(grp) { pmpkgs = pacman_grp_getinfo(grp, PM_GRP_PKGNAMES); - for(lp = pacman_list_first(pmpkgs); lp; lp = pacman_list_next(lp)) - pkgs = g_list_append(pkgs, pacman_list_getdata(lp)); + for(lp = pacman_list_first(pmpkgs); lp; lp = pacman_list_next(lp)) { + pkg = pacman_db_readpkg(g_list_nth_data(syncs, i), pacman_list_getdata(lp)); + pkgname = pacman_pkg_getinfo(pkg, PM_PKG_NAME); + pkgfullname = g_strdup_printf("%s-%s", (char*)pacman_pkg_getinfo(pkg, PM_PKG_NAME), + (char*)pacman_pkg_getinfo(pkg, PM_PKG_VERSION)); + + // enable by default the packages in the + // frugalware repo + enable the + // language-specific parts from + // locale-extra + addpkg = ((strcmp(getenv("LANG"), "en_US") && + !strcmp(group, "locale-extra") && + strlen(pkgname) >= strlen(lang) && + !strcmp(pkgname + strlen(pkgname) - + strlen(lang), lang)) || !optional); + + // add the package to the list + list = g_list_append(list, strdup(pkgname)); + size = (double)(long)pacman_pkg_getinfo(pkg, PM_PKG_SIZE); + size = (double)(size/1048576.0); + if(size < 0.1) + size=0.1; + list = g_list_append(list, g_strdup_printf("%6.1f MB", size )); + list = g_list_append(list, strdup(pacman_pkg_getinfo(pkg, PM_PKG_DESC))); + list = g_list_append(list, GINT_TO_POINTER(addpkg)); + + free(pkgfullname); + } break; } } - if(pacman_trans_init(PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NODEPS|PM_TRANS_FLAG_NOCONFLICTS, NULL, NULL, NULL) == -1) - { - fprintf(stderr, "failed to init transaction (%s)\n", - pacman_strerror(pm_errno)); - return(NULL); - } - for (i=0; i<g_list_length(pkgs); i++) - if(pacman_trans_addtarget(g_list_nth_data(pkgs, i))) - { - fprintf(stderr, "failed to add target '%s' (%s)\n", - (char*)g_list_nth_data(pkgs, i), pacman_strerror(pm_errno)); - return(NULL); - } - if(pacman_trans_prepare(&junk) == -1) - { - fprintf(stderr, "failed to prepare transaction (%s)\n", - pacman_strerror(pm_errno)); - return(NULL); - } - pmpkgs = pacman_trans_getinfo(PM_TRANS_PACKAGES); - for(lp = pacman_list_first(pmpkgs); lp; lp = pacman_list_next(lp)) - { - PM_SYNCPKG *sync = pacman_list_getdata(lp); - PM_PKG *pkg = pacman_sync_getinfo(sync, PM_SYNC_PKG); - - pkgname = pacman_pkg_getinfo(pkg, PM_PKG_NAME); - pkgfullname = g_strdup_printf("%s-%s", (char*)pacman_pkg_getinfo(pkg, PM_PKG_NAME), - (char*)pacman_pkg_getinfo(pkg, PM_PKG_VERSION)); - - // enable by default the packages in the - // frugalware repo + enable the - // language-specific parts from - // locale-extra - addpkg = ((strcmp(getenv("LANG"), "en_US") && - !strcmp(group, "locale-extra") && - strlen(pkgname) >= strlen(lang) && - !strcmp(pkgname + strlen(pkgname) - - strlen(lang), lang)) || !optional); - - // add the package to the list - list = g_list_append(list, strdup(pkgname)); - size = (double)(long)pacman_pkg_getinfo(pkg, PM_PKG_SIZE); - size = (double)(size/1048576.0); - if(size < 0.1) - size=0.1; - list = g_list_append(list, g_strdup_printf("%6.1f MB", size )); - list = g_list_append(list, strdup(pacman_pkg_getinfo(pkg, PM_PKG_DESC))); - list = g_list_append(list, GINT_TO_POINTER(addpkg)); - - free(pkgfullname); - } - pacman_trans_release(); return(list); } -char* categorysize(GList *syncs, char *category) +char* categorysize(char *category) { int i; double size=0; PM_GRP *grp; - PM_LIST *pmpkgs, *lp, *junk; - GList *pkgs=NULL; + PM_PKG *pkg; + PM_LIST *pmpkgs, *lp; - for (i=0; i<g_list_length(syncs); i++) - { + for (i = 0; i < g_list_length(syncs); i++) { grp = pacman_db_readgrp(g_list_nth_data(syncs, i), category); - if(grp) - { + if(grp) { pmpkgs = pacman_grp_getinfo(grp, PM_GRP_PKGNAMES); - for(lp = pacman_list_first(pmpkgs); lp; lp = pacman_list_next(lp)) - pkgs = g_list_append(pkgs, pacman_list_getdata(lp)); + for(lp = pacman_list_first(pmpkgs); lp; lp = pacman_list_next(lp)) { + pkg = pacman_db_readpkg(g_list_nth_data(syncs, i), pacman_list_getdata(lp)); + size += (long)pacman_pkg_getinfo(pkg, PM_PKG_SIZE); + } break; } } - if(pacman_trans_init(PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NODEPS|PM_TRANS_FLAG_NOCONFLICTS, NULL, NULL, NULL) == -1) - { - fprintf(stderr, "failed to init transaction (%s)\n", - pacman_strerror(pm_errno)); - return(NULL); - } - for (i=0; i<g_list_length(pkgs); i++) - if(pacman_trans_addtarget(g_list_nth_data(pkgs, i))) - { - fprintf(stderr, "failed to add target '%s' (%s)\n", - (char*)g_list_nth_data(pkgs, i), pacman_strerror(pm_errno)); - return(NULL); - } - - if(pacman_trans_prepare(&junk) == -1) - { - fprintf(stderr, "failed to prepare transaction (%s)\n", - pacman_strerror(pm_errno)); - return(NULL); - } - pmpkgs = pacman_trans_getinfo(PM_TRANS_PACKAGES); - for(lp = pacman_list_first(pmpkgs); lp; lp = pacman_list_next(lp)) - { - PM_SYNCPKG *sync = pacman_list_getdata(lp); - PM_PKG *pkg = pacman_sync_getinfo(sync, PM_SYNC_PKG); - size += (long)pacman_pkg_getinfo(pkg, PM_PKG_SIZE); - } - pacman_trans_release(); size = (double)(size/1048576.0); if(size < 0.1) size=0.1; + return(g_strdup_printf("%6.1f MB", size)); } @@ -253,13 +198,13 @@ GList *getcat(PM_DB *db, GList *syncs) if(!index(ptr, '-') && strcmp(ptr, "core")) { catlist = g_list_append(catlist, strdup(ptr)); - catlist = g_list_append(catlist, categorysize(syncs, ptr)); + catlist = g_list_append(catlist, categorysize(ptr)); catlist = g_list_append(catlist, GINT_TO_POINTER(1)); } else if(strstr(ptr, EXGRPSUFFIX) || !strcmp(ptr, "lxde-desktop")) { catlist = g_list_append(catlist, strdup(ptr)); - catlist = g_list_append(catlist, categorysize(syncs, ptr)); + catlist = g_list_append(catlist, categorysize(ptr)); if(strcmp(ptr, "locale-extra")) catlist = g_list_append(catlist, GINT_TO_POINTER(0)); else @@ -1206,7 +1151,7 @@ int prerun(GList **config) // preload packets list for each categorie for(j=0;j < g_list_length(cats); j+=3) { - pack = group2pkgs(syncs, (char*)g_list_nth_data(cats, j)); + pack = group2pkgs((char*)g_list_nth_data(cats, j)); data_put(&allpackets, (char*)g_list_nth_data(cats, j), pack); } _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git