diff --git a/libpkg/pkg_jobs.c b/libpkg/pkg_jobs.c index 258ffe79..26e11b4d 100644 --- a/libpkg/pkg_jobs.c +++ b/libpkg/pkg_jobs.c @@ -1094,6 +1094,43 @@ pkg_jobs_need_upgrade(struct pkg *rp, struct pkg *lp) } /* compare options */ + char* loptions = NULL; + char* roptions = NULL; + for (;;) { + pkg_options(rp, &ro); + if (ro != NULL) { + if (roptions != NULL) { + char *tmp = roptions; + xasprintf(&roptions, "%s, %s=%s", roptions, ro->key, ro->value); + free(tmp); + } + else { + xasprintf(&roptions, "%s=%s", ro->key, ro->value); + } + } + else { + break; + } + } + for (;;) { + pkg_options(lp, &lo); + if (lo != NULL) { + if (loptions != NULL) { + char *tmp = loptions; + xasprintf(&loptions, "%s, %s=%s", loptions, lo->key, lo->value); + free(tmp); + } + else { + xasprintf(&loptions, "%s=%s", lo->key, lo->value); + } + } + else { + break; + } + } + + lo = NULL; + ro = NULL; for (;;) { ret1 = pkg_options(rp, &ro); ret2 = pkg_options(lp, &lo); @@ -1109,19 +1146,27 @@ pkg_jobs_need_upgrade(struct pkg *rp, struct pkg *lp) xasprintf(&rp->reason, "option changed: %s", ro->key); assert(rp->reason != NULL); + free(loptions); + free(roptions); return (true); } if (ret1 == EPKG_OK) { if (strcmp(lo->key, ro->key) != 0 || strcmp(lo->value, ro->value) != 0) { free(rp->reason); - xasprintf(&rp->reason, "options changed"); + xasprintf(&rp->reason, "options changed, from: %s, to: %s", loptions, roptions); + free(loptions); + free(roptions); return (true); } } else break; } + free(loptions); + loptions = NULL; + free(roptions); + roptions = NULL; /* What about the direct deps */ for (;;) {