Implemented plist caching, that gives >30% performance.

--HG--
extra : convert_revision : 6302893f967be96f99a86d499ca62a8c005e56f7
This commit is contained in:
Juan RP 2009-05-19 01:42:48 +02:00
parent 55f2f51b40
commit 38e6679ff5
7 changed files with 100 additions and 93 deletions

View file

@ -100,8 +100,6 @@ int
main(int argc, char **argv)
{
prop_dictionary_t dict;
const char *rootdir;
char *plist;
int c, flags = 0, rv = 0;
bool chkhash = false, force = false, verbose = false;
@ -136,32 +134,30 @@ main(int argc, char **argv)
if (flags != 0)
xbps_set_flags(flags);
if ((dict = xbps_prepare_regpkgdb_dict()) == NULL) {
if (errno != ENOENT) {
rv = errno;
printf("Couldn't initialized regpkgdb dict: %s\n",
strerror(errno));
goto out;
}
}
if (strcasecmp(argv[0], "list") == 0) {
/* Lists packages currently registered in database. */
if (argc != 1)
usage();
rootdir = xbps_get_rootdir();
plist = xbps_xasprintf("%s/%s/%s", rootdir,
XBPS_META_PATH, XBPS_REGPKGDB);
if (plist == NULL)
exit(EXIT_FAILURE);
dict = prop_dictionary_internalize_from_file(plist);
if (dict == NULL) {
printf("No packages currently registered.\n");
free(plist);
exit(EXIT_SUCCESS);
printf("No packages currently installed.\n");
goto out;
}
if (!xbps_callback_array_iter_in_dict(dict, "packages",
list_pkgs_in_dict, NULL)) {
prop_object_release(dict);
free(plist);
exit(EXIT_FAILURE);
rv = errno;
goto out;
}
prop_object_release(dict);
free(plist);
} else if (strcasecmp(argv[0], "install") == 0) {
/* Installs a binary package and required deps. */
@ -230,5 +226,10 @@ main(int argc, char **argv)
usage();
}
out:
xbps_release_regpkgdb_dict();
if (rv != 0)
exit(EXIT_FAILURE);
exit(EXIT_SUCCESS);
}