diff options
author | Dan McGee <dan@archlinux.org> | 2007-09-27 23:39:37 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2007-09-28 00:16:43 -0500 |
commit | 219808714f94788a66a430786c552f60e95b1a01 (patch) | |
tree | 6529ca915ad56e1c546f728ed58142b629132da7 /src | |
parent | d2edcb58e2252f90447694acc7736c0ba5b1f01e (diff) | |
download | pacman-219808714f94788a66a430786c552f60e95b1a01.tar.xz |
Add 'full' parameter to alpm_pkg_load
In most cases, we want to fully scan a package when we load it, which serves
as a integrity verification check. However, there are times when it is only
desired to read the metadata and nothing else, so allow the caller of pkg_load
to choose the behavior they need.
This pays big dividends in speeding up pacman cache cleaning functionality.
Old (729 packages):
real 1m43.717s
user 1m20.785s
sys 0m2.993s
New (729 packages):
real 0m25.607s
user 0m19.389s
sys 0m0.543s
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/pacman/query.c | 2 | ||||
-rw-r--r-- | src/pacman/sync.c | 5 | ||||
-rw-r--r-- | src/util/testpkg.c | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/pacman/query.c b/src/pacman/query.c index 26a1bd8f..4e4002cf 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -369,7 +369,7 @@ int pacman_query(alpm_list_t *targets) pmpkg_t *pkg = NULL; if(config->op_q_isfile) { - alpm_pkg_load(strname, &pkg); + alpm_pkg_load(strname, 1, &pkg); } else { pkg = alpm_db_get_pkg(db_local, strname); } diff --git a/src/pacman/sync.c b/src/pacman/sync.c index bb4926e2..11941eb3 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -82,8 +82,9 @@ static int sync_cleancache(int level) snprintf(path, PATH_MAX, "%s/%s", cachedir, ent->d_name); /* attempt to load the package, skip file on failures as we may have - * files here that aren't valid packages */ - if(alpm_pkg_load(path, &localpkg) != 0 || localpkg == NULL) { + * files here that aren't valid packages. we also don't need a full + * load of the package, just the metadata. */ + if(alpm_pkg_load(path, 0, &localpkg) != 0 || localpkg == NULL) { continue; } /* check if this package is in the local DB */ diff --git a/src/util/testpkg.c b/src/util/testpkg.c index 7da18ca6..7d844e85 100644 --- a/src/util/testpkg.c +++ b/src/util/testpkg.c @@ -57,7 +57,7 @@ int main(int argc, char **argv) /* let us get log messages from libalpm */ alpm_option_set_logcb(output_cb); - if(alpm_pkg_load(argv[1], &pkg) == -1 || pkg == NULL) { + if(alpm_pkg_load(argv[1], 1, &pkg) == -1 || pkg == NULL) { retval = 1; } else { alpm_pkg_free(pkg); |