Skip to content

Commit

Permalink
Merge pull request #31 from yast/exception_handling
Browse files Browse the repository at this point in the history
Do not hide libzypp exceptions in Pkg::ResolvableProperties()
  • Loading branch information
lslezak committed Sep 9, 2014
2 parents 95a3ec2 + ecacd98 commit 5862dac
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 66 deletions.
2 changes: 1 addition & 1 deletion package/yast2-pkg-bindings-devel-doc.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions package/yast2-pkg-bindings.changes
Original file line number Diff line number Diff line change
@@ -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

Expand Down
2 changes: 1 addition & 1 deletion package/yast2-pkg-bindings.spec
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@


Name: yast2-pkg-bindings
Version: 3.1.17
Version: 3.1.18
Release: 0

BuildRoot: %{_tmppath}/%{name}-%{version}-build
Expand Down
137 changes: 73 additions & 64 deletions src/Resolvable_Properties.cc
Original file line number Diff line number Diff line change
Expand Up @@ -537,43 +537,39 @@ YCPMap PkgFunctions::Resolvable2YCPMap(const zypp::PoolItem &item, const std::st
for (std::set<std::string>::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::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));

if (!ycpdeps.contains(ycpdep))
{
ycpdeps->add (ycpdep);
}
}
}
}
catch (...)
{}
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);

// 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);
}
}
}
}

if (ycpdeps.size() > 0)
Expand Down Expand Up @@ -659,36 +655,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;
Expand Down

0 comments on commit 5862dac

Please sign in to comment.