summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2007-09-28 06:39:37 +0200
committerDan McGee <dan@archlinux.org>2007-09-28 07:16:43 +0200
commit219808714f94788a66a430786c552f60e95b1a01 (patch)
tree6529ca915ad56e1c546f728ed58142b629132da7 /src
parentd2edcb58e2252f90447694acc7736c0ba5b1f01e (diff)
downloadpacman-219808714f94788a66a430786c552f60e95b1a01.tar.gz
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.c2
-rw-r--r--src/pacman/sync.c5
-rw-r--r--src/util/testpkg.c2
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);