Unify caching concerns in package accessors

Move almost all of the caching related stuff into a single #define
(which should maybe even just be a static function) so we don't
duplicate logic all over the place. This also makes the code a heck of a
lot shorter and means further changes to this stuff don't have to touch
each and every getter function.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2010-07-07 09:39:39 -05:00 committed by Allan McRae
parent 5fcb005ebd
commit 49176461a6

View file

@ -100,18 +100,19 @@ int SYMEXPORT alpm_pkg_checkmd5sum(pmpkg_t *pkg)
return(retval); return(retval);
} }
#define LAZY_LOAD(info, errret) \
do { \
ALPM_LOG_FUNC; \
ASSERT(handle != NULL, return(errret)); \
ASSERT(pkg != NULL, return(errret)); \
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & info)) { \
_alpm_db_read(pkg->origin_data.db, pkg, info); \
} \
} while(0)
const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg) const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->filename; return pkg->filename;
} }
@ -129,267 +130,115 @@ const char SYMEXPORT *alpm_pkg_get_version(pmpkg_t *pkg)
const char SYMEXPORT *alpm_pkg_get_desc(pmpkg_t *pkg) const char SYMEXPORT *alpm_pkg_get_desc(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->desc; return pkg->desc;
} }
const char SYMEXPORT *alpm_pkg_get_url(pmpkg_t *pkg) const char SYMEXPORT *alpm_pkg_get_url(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->url; return pkg->url;
} }
time_t SYMEXPORT alpm_pkg_get_builddate(pmpkg_t *pkg) time_t SYMEXPORT alpm_pkg_get_builddate(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, 0);
/* Sanity checks */
ASSERT(handle != NULL, return(0));
ASSERT(pkg != NULL, return(0));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->builddate; return pkg->builddate;
} }
time_t SYMEXPORT alpm_pkg_get_installdate(pmpkg_t *pkg) time_t SYMEXPORT alpm_pkg_get_installdate(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, 0);
/* Sanity checks */
ASSERT(handle != NULL, return(0));
ASSERT(pkg != NULL, return(0));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->installdate; return pkg->installdate;
} }
const char SYMEXPORT *alpm_pkg_get_packager(pmpkg_t *pkg) const char SYMEXPORT *alpm_pkg_get_packager(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->packager; return pkg->packager;
} }
const char SYMEXPORT *alpm_pkg_get_md5sum(pmpkg_t *pkg) const char SYMEXPORT *alpm_pkg_get_md5sum(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->md5sum; return pkg->md5sum;
} }
const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg) const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->arch; return pkg->arch;
} }
off_t SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg) off_t SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, -1);
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(pkg != NULL, return(-1));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->size; return pkg->size;
} }
off_t SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg) off_t SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, -1);
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(pkg != NULL, return(-1));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->isize; return pkg->isize;
} }
pmpkgreason_t SYMEXPORT alpm_pkg_get_reason(pmpkg_t *pkg) pmpkgreason_t SYMEXPORT alpm_pkg_get_reason(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, -1);
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(pkg != NULL, return(-1));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->reason; return pkg->reason;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_licenses(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_licenses(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->licenses; return pkg->licenses;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->groups; return pkg->groups;
} }
int SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg) int SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, -1);
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
ASSERT(pkg != NULL, return(-1));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->force; return pkg->force;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DEPENDS, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);
}
return pkg->depends; return pkg->depends;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_optdepends(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_optdepends(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DEPENDS, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);
}
return pkg->optdepends; return pkg->optdepends;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DEPENDS, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);
}
return pkg->conflicts; return pkg->conflicts;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DEPENDS, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DEPENDS)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DEPENDS);
}
return pkg->provides; return pkg->provides;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DELTAS, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DELTAS)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DELTAS);
}
return pkg->deltas; return pkg->deltas;
} }
alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg) alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg)
{ {
ALPM_LOG_FUNC; LAZY_LOAD(INFRQ_DESC, NULL);
/* Sanity checks */
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
}
return pkg->replaces; return pkg->replaces;
} }