diff options
author | Dan McGee <dan@archlinux.org> | 2007-11-13 06:01:14 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2007-11-15 04:00:02 +0100 |
commit | c244cfecf654d34032585530f00d68501ec63d77 (patch) | |
tree | 36c5a35953573e0038c7b89ea26f568b0e081f16 /lib/libalpm/be_files.c | |
parent | 8757398a7e3132166a2e20605c02dfdc2abc3d1d (diff) | |
download | pacman-c244cfecf654d34032585530f00d68501ec63d77.tar.gz pacman-c244cfecf654d34032585530f00d68501ec63d77.tar.xz |
Move alpm_splitdep usage to db_read
Holy inefficient batman! For a pacman -Qt operation (when we are using
compute_requiredby and not database entries), splitdep was being called ~1.3
million times on my local database. By splitting when we read the DB, we
drop this number to around 1700 and save a LOT of time in doing so (a 5x
increase in pacman -Qt speed here).
Note that the depends alpm_list_t in the package struct is no longer a
string list, but a list of pmdepent_t objects.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/be_files.c')
-rw-r--r-- | lib/libalpm/be_files.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c index a6cde689..ed8c8c14 100644 --- a/lib/libalpm/be_files.c +++ b/lib/libalpm/be_files.c @@ -44,6 +44,7 @@ #include "handle.h" #include "package.h" #include "delta.h" +#include "deps.h" /* This function is used to convert the downloaded db file to the proper backend @@ -455,7 +456,8 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) _alpm_strtrim(line); if(!strcmp(line, "%DEPENDS%")) { while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { - info->depends = alpm_list_add(info->depends, strdup(line)); + pmdepend_t *dep = alpm_splitdep(line); + info->depends = alpm_list_add(info->depends, dep); } } else if(!strcmp(line, "%OPTDEPENDS%")) { while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { @@ -670,7 +672,9 @@ int _alpm_db_write(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq) if(info->depends) { fputs("%DEPENDS%\n", fp); for(lp = info->depends; lp; lp = lp->next) { - fprintf(fp, "%s\n", (char *)lp->data); + char *depstring = alpm_dep_get_string(lp->data); + fprintf(fp, "%s\n", depstring); + free(depstring); } fprintf(fp, "\n"); } |