From 2c4843ee4008a48285b9ac93fb0d6f2001f429d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ladislav=20Slez=C3=A1k?= Date: Tue, 9 Sep 2014 13:14:20 +0200 Subject: [PATCH 1/2] do not hide libzypp exceptions in Pkg::ResolvableProperties() (bnc#895418) it makes debugging more difficult, return nil in that case - 3.1.18 --- package/yast2-pkg-bindings-devel-doc.spec | 2 +- package/yast2-pkg-bindings.changes | 8 +++ package/yast2-pkg-bindings.spec | 2 +- src/Resolvable_Properties.cc | 67 ++++++++++++++--------- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/package/yast2-pkg-bindings-devel-doc.spec b/package/yast2-pkg-bindings-devel-doc.spec index efa8d0dd..2e7d74f3 100644 --- a/package/yast2-pkg-bindings-devel-doc.spec +++ b/package/yast2-pkg-bindings-devel-doc.spec @@ -16,7 +16,7 @@ # Name: yast2-pkg-bindings-devel-doc -Version: 3.1.17 +Version: 3.1.18 Release: 0 License: GPL-2.0 Group: Documentation/HTML diff --git a/package/yast2-pkg-bindings.changes b/package/yast2-pkg-bindings.changes index 5093bb53..5ed3b8fd 100644 --- a/package/yast2-pkg-bindings.changes +++ b/package/yast2-pkg-bindings.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Sep 9 11:08:56 UTC 2014 - lslezak@suse.cz + +- do not hide libzypp exceptions in Pkg::ResolvableProperties() + call, it makes debugging more difficult, return nil in that case + (bnc#895418) +- 3.1.18 + ------------------------------------------------------------------- Tue Aug 19 07:39:01 UTC 2014 - lslezak@suse.cz diff --git a/package/yast2-pkg-bindings.spec b/package/yast2-pkg-bindings.spec index 4eefb7c2..b1b915d7 100644 --- a/package/yast2-pkg-bindings.spec +++ b/package/yast2-pkg-bindings.spec @@ -17,7 +17,7 @@ Name: yast2-pkg-bindings -Version: 3.1.17 +Version: 3.1.18 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build diff --git a/src/Resolvable_Properties.cc b/src/Resolvable_Properties.cc index 3abca8ff..3727838f 100644 --- a/src/Resolvable_Properties.cc +++ b/src/Resolvable_Properties.cc @@ -659,36 +659,49 @@ PkgFunctions::ResolvablePropertiesEx(const YCPString& name, const YCPSymbol& kin if (nm.empty() || nm == s->name()) { - if (!s->installedEmpty()) - { - // iterate over all installed packages - for_(inst_it, s->installedBegin(), s->installedEnd()) - { - // check version if required - if (vers.empty() || vers == inst_it->resolvable()->edition().asString()) - { - ret->add(Resolvable2YCPMap(*inst_it, req_kind, dependencies)); - } - } - } - - if (!s->availableEmpty()) - { - // iterate over all available packages - for_(avail_it, s->availableBegin(), s->availableEnd()) - { - // check version if required - if (vers.empty() || vers == avail_it->resolvable()->edition().asString()) - { - ret->add(Resolvable2YCPMap(*avail_it, req_kind, dependencies)); - } - } - } - } + try + { + if (!s->installedEmpty()) + { + // iterate over all installed packages + for_(inst_it, s->installedBegin(), s->installedEnd()) + { + // check version if required + if (vers.empty() || vers == inst_it->resolvable()->edition().asString()) + { + ret->add(Resolvable2YCPMap(*inst_it, req_kind, dependencies)); + } + } + } + + if (!s->availableEmpty()) + { + // iterate over all available packages + for_(avail_it, s->availableBegin(), s->availableEnd()) + { + // check version if required + if (vers.empty() || vers == avail_it->resolvable()->edition().asString()) + { + ret->add(Resolvable2YCPMap(*avail_it, req_kind, dependencies)); + } + } + } + } + catch(const zypp::Exception &expt) + { + y2error("ResolvableProperties for \"%s\" failed: %s", + s->name().c_str(), expt.asString().c_str()); + _last_error.setLastError(ExceptionAsString(expt)); + return YCPVoid(); + } + } } } - catch (...) + catch(const zypp::Exception &expt) { + y2error("ResolvableProperties failed: %s", expt.asString().c_str()); + _last_error.setLastError(ExceptionAsString(expt)); + return YCPVoid(); } return ret; From ecacd9862ea6900d10b6562e5b51058c2eec13fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ladislav=20Slez=C3=A1k?= Date: Tue, 9 Sep 2014 14:26:13 +0200 Subject: [PATCH 2/2] removed another catch-them-all exception handler --- src/Resolvable_Properties.cc | 64 +++++++++++++++++------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/src/Resolvable_Properties.cc b/src/Resolvable_Properties.cc index 3727838f..0bdfec85 100644 --- a/src/Resolvable_Properties.cc +++ b/src/Resolvable_Properties.cc @@ -537,43 +537,39 @@ YCPMap PkgFunctions::Resolvable2YCPMap(const zypp::PoolItem &item, const std::st for (std::set::const_iterator kind_it = _kinds.begin(); kind_it != _kinds.end(); ++kind_it) { - try { - zypp::Dep depkind(*kind_it); - zypp::Capabilities deps = item.resolvable()->dep(depkind); - - // add raw dependencies - for_(it, deps.begin(), deps.end()) - { - YCPMap rawdep; - rawdep->add(YCPString(*kind_it), YCPString(it->asString())); - rawdeps->add(rawdep); - } + zypp::Dep depkind(*kind_it); + zypp::Capabilities deps = item.resolvable()->dep(depkind); + + // add raw dependencies + for_(it, deps.begin(), deps.end()) + { + YCPMap rawdep; + rawdep->add(YCPString(*kind_it), YCPString(it->asString())); + rawdeps->add(rawdep); + } - zypp::sat::WhatProvides prv(deps); + zypp::sat::WhatProvides prv(deps); - // resolve dependencies - for (zypp::sat::WhatProvides::const_iterator d = prv.begin(); d != prv.end(); ++d) - { - if (d->kind().asString().empty() || d->name().empty()) - { - y2debug("Empty kind or name: kind: %s, name: %s", d->kind().asString().c_str(), d->name().c_str()); - } - else - { - YCPMap ycpdep; - ycpdep->add (YCPString ("res_kind"), YCPString (d->kind().asString())); - ycpdep->add (YCPString ("name"), YCPString (d->name())); - ycpdep->add (YCPString ("dep_kind"), YCPString (*kind_it)); + // resolve dependencies + for (zypp::sat::WhatProvides::const_iterator d = prv.begin(); d != prv.end(); ++d) + { + if (d->kind().asString().empty() || d->name().empty()) + { + y2debug("Empty kind or name: kind: %s, name: %s", d->kind().asString().c_str(), d->name().c_str()); + } + else + { + YCPMap ycpdep; + ycpdep->add (YCPString ("res_kind"), YCPString (d->kind().asString())); + ycpdep->add (YCPString ("name"), YCPString (d->name())); + ycpdep->add (YCPString ("dep_kind"), YCPString (*kind_it)); - if (!ycpdeps.contains(ycpdep)) - { - ycpdeps->add (ycpdep); - } - } - } - } - catch (...) - {} + if (!ycpdeps.contains(ycpdep)) + { + ycpdeps->add (ycpdep); + } + } + } } if (ycpdeps.size() > 0)