Implemented a cache to get pkg dicts from metadir.

This improves xbps-pkgdb -a marginally, but still seems to be a bit slow.
This commit is contained in:
Juan RP
2012-11-16 21:50:52 +01:00
parent 34bd49f85a
commit b0fab7a3ee
17 changed files with 139 additions and 88 deletions

View File

@ -95,7 +95,7 @@ ownedby_pkgdb_cb(struct xbps_handle *xhp, prop_object_t obj, void *arg, bool *do
(void)done;
prop_dictionary_get_cstring_nocopy(obj, "pkgname", &pkgname);
pkgmetad = xbps_pkgd_from_metadir(xhp, pkgname);
pkgmetad = xbps_metadir_get_pkgd(xhp, pkgname);
files_keys = prop_dictionary_all_keys(pkgmetad);
for (i = 0; i < prop_array_count(files_keys); i++) {
@ -106,7 +106,6 @@ ownedby_pkgdb_cb(struct xbps_handle *xhp, prop_object_t obj, void *arg, bool *do
break;
}
prop_object_release(files_keys);
prop_object_release(pkgmetad);
return rv;
}

View File

@ -44,13 +44,12 @@ show_pkg_deps(struct xbps_handle *xhp, const char *pkgname)
/*
* Check for props.plist metadata file.
*/
propsd = xbps_pkgd_from_metadir(xhp, pkgname);
propsd = xbps_metadir_get_pkgd(xhp, pkgname);
if (propsd == NULL)
return ENOENT;
rv = xbps_callback_array_iter_in_dict(xhp, propsd, "run_depends",
list_strings_sep_in_array, NULL);
prop_object_release(propsd);
return rv;
}

View File

@ -220,16 +220,15 @@ show_pkg_info_from_metadir(struct xbps_handle *xhp,
const char *instdate, *pname;
bool autoinst;
d = xbps_pkgd_from_metadir(xhp, pkgname);
d = xbps_metadir_get_pkgd(xhp, pkgname);
if (d == NULL)
return ENOENT;
prop_dictionary_get_cstring_nocopy(d, "pkgname", &pname);
pkgdb_d = xbps_pkgdb_get_pkgd(xhp, pname, false);
if (pkgdb_d == NULL) {
prop_object_release(d);
if (pkgdb_d == NULL)
return EINVAL;
}
if (prop_dictionary_get_cstring_nocopy(pkgdb_d,
"install-date", &instdate))
prop_dictionary_set_cstring_nocopy(d, "install-date",
@ -243,7 +242,6 @@ show_pkg_info_from_metadir(struct xbps_handle *xhp,
else
show_pkg_info_one(d, option);
prop_object_release(d);
return 0;
}
@ -253,12 +251,11 @@ show_pkg_files_from_metadir(struct xbps_handle *xhp, const char *pkgname)
prop_dictionary_t d;
int rv = 0;
d = xbps_pkgd_from_metadir(xhp, pkgname);
d = xbps_metadir_get_pkgd(xhp, pkgname);
if (d == NULL)
return ENOENT;
rv = show_pkg_files(d);
prop_object_release(d);
return rv;
}