From e545429fa1f7eb10c347282ea747c841b705e0c3 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Fri, 26 Oct 2012 10:25:14 +0200 Subject: [PATCH] pkgdb: if plist from storage and memory do not differ do not flush to storage. --- lib/pkgdb.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/pkgdb.c b/lib/pkgdb.c index d242fe7d..354151e5 100644 --- a/lib/pkgdb.c +++ b/lib/pkgdb.c @@ -79,6 +79,7 @@ xbps_pkgdb_init(struct xbps_handle *xhp) int xbps_pkgdb_update(struct xbps_handle *xhp, bool flush) { + prop_array_t pkgdb_storage; char *plist; static int cached_rv; int rv = 0; @@ -90,11 +91,16 @@ xbps_pkgdb_update(struct xbps_handle *xhp, bool flush) assert(plist); if (xhp->pkgdb && flush) { - /* flush dictionary to storage */ - if (!prop_array_externalize_to_file(xhp->pkgdb, plist)) { - free(plist); - return errno; + pkgdb_storage = prop_array_internalize_from_zfile(plist); + assert(pkgdb_storage); + if (!prop_array_equals(xhp->pkgdb, pkgdb_storage)) { + /* flush dictionary to storage */ + if (!prop_array_externalize_to_file(xhp->pkgdb, plist)) { + free(plist); + return errno; + } } + prop_object_release(pkgdb_storage); prop_object_release(xhp->pkgdb); xhp->pkgdb = NULL; cached_rv = 0;