aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--URPM.xs12
2 files changed, 7 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 7e8d5b8..bb9d032 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,4 @@
+- speedup is_arch_compat (7 times faster) by keeping the platform in a cache
- do not propose packages for non installed locales
- pass the prefered choices to {callback_choices}: this allows urpmi to select
all the prefered packages according to installed locales
diff --git a/URPM.xs b/URPM.xs
index 1d3afc3..f74e581 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -111,6 +111,10 @@ void rpmError_callback() {
}
}
+#ifdef RPM_448
+static char *platform = NULL;
+#endif
+
/* needed for importing keys (from rpmio) */
int rpmioSlurp(const char * fn, const byte ** bp, ssize_t * blenp);
int b64decode (const char * s, void ** datap, size_t *lenp);
@@ -1420,8 +1424,6 @@ Pkg_arch(pkg)
int
Pkg_is_arch_compat(pkg)
URPM::Package pkg
- INIT:
- char * platform;
CODE:
read_config_files(0);
if (pkg->info) {
@@ -1431,9 +1433,8 @@ Pkg_is_arch_compat(pkg)
get_fullname_parts(pkg, NULL, NULL, NULL, &arch, &eos);
*eos = 0;
#ifdef RPM_448
- platform = rpmExpand(arch, "-%{_real_vendor}-%{_target_os}%{?_gnu}", NULL);
+ if ($platform) platform = rpmExpand(arch, "-%{_real_vendor}-%{_target_os}%{?_gnu}", NULL);
RETVAL = rpmPlatformScore(platform, NULL, 0);
- _free(platform);
#else
RETVAL = rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch);
#endif
@@ -1441,9 +1442,8 @@ Pkg_is_arch_compat(pkg)
} else if (pkg->h && headerIsEntry(pkg->h, RPMTAG_SOURCERPM)) {
char *arch = get_name(pkg->h, RPMTAG_ARCH);
#ifdef RPM_448
- platform = rpmExpand(arch, "-%{_real_vendor}-%{_target_os}%{?_gnu}", NULL);
+ if (!platform) platform = rpmExpand(arch, "-%{_real_vendor}-%{_target_os}%{?_gnu}", NULL);
RETVAL = rpmPlatformScore(platform, NULL, 0);
- _free(platform);
#else
RETVAL = rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch);
#endif