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:
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user