[pacman-dev] [PATCH] Suppress repeated dependency resolving error messages

Allan McRae allan at archlinux.org
Mon Sep 17 00:17:23 EDT 2012


When hitting an unresolvable dependency, pacman will output a message
like:

warning: cannot resolve "glibc>=1.0-2", a dependency of "gcc-libs"

This currently is repeated every time the package with the unresolvable
dependency is seen during dependency resolution.  Limit this to printing
the output once.

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 lib/libalpm/deps.c | 13 ++++++++-----
 lib/libalpm/deps.h |  2 +-
 lib/libalpm/sync.c |  2 +-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 6841097..d218f0b 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -715,6 +715,7 @@ alpm_pkg_t SYMEXPORT *alpm_find_dbs_satisfier(alpm_handle_t *handle,
  *        transaction
  * @param data returns the dependency which could not be satisfied in the
  *        event of an error
+ * @param quiet suppress missing dependency warnings
  * @return 0 on success, with [pkg] and all of its dependencies not already on
  *         the [*packages] list added to that list, or -1 on failure due to an
  *         unresolvable dependency, in which case the [*packages] list will be
@@ -722,7 +723,7 @@ alpm_pkg_t SYMEXPORT *alpm_find_dbs_satisfier(alpm_handle_t *handle,
  */
 int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs,
 		alpm_pkg_t *pkg, alpm_list_t *preferred, alpm_list_t **packages,
-		alpm_list_t *rem, alpm_list_t **data)
+		alpm_list_t *rem, alpm_list_t **data, int quiet)
 {
 	int ret = 0;
 	alpm_list_t *j;
@@ -763,7 +764,7 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs,
 			/* find a satisfier package in the given repositories */
 			spkg = resolvedep(handle, missdep, handle->dbs_sync, *packages, 0);
 		}
-		if(spkg && _alpm_resolvedeps(handle, localpkgs, spkg, preferred, packages, rem, data) == 0) {
+		if(spkg && _alpm_resolvedeps(handle, localpkgs, spkg, preferred, packages, rem, data, 1) == 0) {
 			_alpm_log(handle, ALPM_LOG_DEBUG,
 					"pulling dependency %s (needed by %s)\n",
 					spkg->name, pkg->name);
@@ -773,9 +774,11 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs,
 		} else {
 			handle->pm_errno = ALPM_ERR_UNSATISFIED_DEPS;
 			char *missdepstring = alpm_dep_compute_string(missdep);
-			_alpm_log(handle, ALPM_LOG_WARNING,
-					_("cannot resolve \"%s\", a dependency of \"%s\"\n"),
-					missdepstring, pkg->name);
+			if(!quiet) {
+				_alpm_log(handle, ALPM_LOG_WARNING,
+						_("cannot resolve \"%s\", a dependency of \"%s\"\n"),
+						missdepstring, pkg->name);
+			}
 			free(missdepstring);
 			if(data) {
 				*data = alpm_list_add(*data, miss);
diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h
index c8e1bc3..7470ea1 100644
--- a/lib/libalpm/deps.h
+++ b/lib/libalpm/deps.h
@@ -34,7 +34,7 @@ alpm_list_t *_alpm_sortbydeps(alpm_handle_t *handle, alpm_list_t *targets, int r
 int _alpm_recursedeps(alpm_db_t *db, alpm_list_t *targs, int include_explicit);
 int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, alpm_pkg_t *pkg,
 		alpm_list_t *preferred, alpm_list_t **packages, alpm_list_t *remove,
-		alpm_list_t **data);
+		alpm_list_t **data, int quiet);
 alpm_depend_t *_alpm_splitdep(const char *depstring);
 int _alpm_depcmp_literal(alpm_pkg_t *pkg, alpm_depend_t *dep);
 int _alpm_depcmp(alpm_pkg_t *pkg, alpm_depend_t *dep);
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index ca6b507..634d7cd 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -409,7 +409,7 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data)
 		for(i = trans->add; i; i = i->next) {
 			alpm_pkg_t *pkg = i->data;
 			if(_alpm_resolvedeps(handle, localpkgs, pkg, trans->add,
-						&resolved, remove, data) == -1) {
+						&resolved, remove, data, 0) == -1) {
 				unresolvable = alpm_list_add(unresolvable, pkg);
 			}
 			/* Else, [resolved] now additionally contains [pkg] and all of its
-- 
1.7.12



More information about the pacman-dev mailing list