diff --git a/configure.in.in b/configure.in.in index 0111238..32bd42b 100644 --- a/configure.in.in +++ b/configure.in.in @@ -27,5 +27,9 @@ if test \ fi AX_CHECK_DOCBOOK + +# treat missing values in switch statements as errors +CXXFLAGS="${CXXFLAGS} -Werror=switch" + ## and generate the output @YAST2-OUTPUT@ diff --git a/package/yast2-pkg-bindings-devel-doc.spec b/package/yast2-pkg-bindings-devel-doc.spec index b76f7fe..740a789 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: 4.3.12 +Version: 4.3.13 Release: 0 License: GPL-2.0-only Group: Documentation/HTML diff --git a/package/yast2-pkg-bindings.changes b/package/yast2-pkg-bindings.changes index ec52cd5..c18505f 100644 --- a/package/yast2-pkg-bindings.changes +++ b/package/yast2-pkg-bindings.changes @@ -1,3 +1,8 @@ +- Fixed repository and service probing with libzypp 7.31.26 + and newer, fixes broken repository handling (bsc#1218977, + bsc#1218399) +- 4.3.13 + ------------------------------------------------------------------- Tue Apr 11 12:51:18 UTC 2023 - Ladislav Slezák diff --git a/package/yast2-pkg-bindings.spec b/package/yast2-pkg-bindings.spec index a89d0df..f3eef6d 100644 --- a/package/yast2-pkg-bindings.spec +++ b/package/yast2-pkg-bindings.spec @@ -17,7 +17,7 @@ Name: yast2-pkg-bindings -Version: 4.3.12 +Version: 4.3.13 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build diff --git a/src/PkgFunctions.h b/src/PkgFunctions.h index 87df001..b4a73b6 100644 --- a/src/PkgFunctions.h +++ b/src/PkgFunctions.h @@ -149,7 +149,7 @@ class PkgFunctions bool remoteRepo(const zypp::Url &url); // conversion methods for type string between Yast and libzypp (for backward compatibility) - std::string zypp2yastType(const std::string &type); + std::string zypp2yastType(const zypp::repo::RepoType &type); std::string yast2zyppType(const std::string &type); // helper - create a directory if it doesn't exist diff --git a/src/ServiceManager.cc b/src/ServiceManager.cc index 4cd69b6..6348e1f 100644 --- a/src/ServiceManager.cc +++ b/src/ServiceManager.cc @@ -300,7 +300,17 @@ bool ServiceManager::SetService(const std::string &old_alias, const zypp::Servic std::string ServiceManager::Probe(const zypp::Url &url, const zypp::RepoManager &repomgr) const { y2milestone("Probing service at %s...", url.asString().c_str()); - std::string ret(repomgr.probeService(url).asString()); + + std::string ret; + + zypp::repo::ServiceType type(repomgr.probeService(url)); + switch (type.toEnum()) + { + case zypp::repo::ServiceType::NONE_e: ret = "NONE"; break; + case zypp::repo::ServiceType::PLUGIN_e: ret = "plugin"; break; + case zypp::repo::ServiceType::RIS_e: ret = "ris"; break; + } + y2milestone("Detected service type: %s", ret.c_str()); return ret; diff --git a/src/Source_Create.cc b/src/Source_Create.cc index ed4d709..f904dd8 100644 --- a/src/Source_Create.cc +++ b/src/Source_Create.cc @@ -814,7 +814,7 @@ YCPValue PkgFunctions::RepositoryProbe(const YCPString& url, const YCPString& pr // autoprobe type of the repository zypp::repo::RepoType repotype = ProbeWithCallbacks(probe_url); - ret = zypp2yastType(repotype.asString()); + ret = zypp2yastType(repotype); y2milestone("Detected type: '%s'...", ret.c_str()); } catch (const zypp::Exception& excpt) diff --git a/src/Source_Get.cc b/src/Source_Get.cc index b4f2582..5359d23 100644 --- a/src/Source_Get.cc +++ b/src/Source_Get.cc @@ -133,7 +133,7 @@ PkgFunctions::SourceGeneralData (const YCPInteger& id) return YCPVoid (); // convert type to the old strings ("YaST", "YUM" or "Plaindir") - std::string srctype = zypp2yastType(repo->repoInfo().type().asString()); + std::string srctype = zypp2yastType(repo->repoInfo().type()); data->add( YCPString("enabled"), YCPBoolean(repo->repoInfo().enabled())); data->add( YCPString("autorefresh"), YCPBoolean(repo->repoInfo().autorefresh())); diff --git a/src/Source_Misc.cc b/src/Source_Misc.cc index 92c225d..de8cd6f 100644 --- a/src/Source_Misc.cc +++ b/src/Source_Misc.cc @@ -108,32 +108,18 @@ bool PkgFunctions::aliasExists(const std::string &alias, const std::list::const_iterator it = type_conversion_table.find(type); - - // found in the conversion table - if (it != type_conversion_table.end()) - { - ret = it->second; - } - else - { - y2error("Cannot convert type '%s'", type.c_str()); - } - - return ret; + // never reached, unhandled enums are treated as errors via the -Werror option + return ""; } std::string PkgFunctions::yast2zyppType(const std::string &type) @@ -159,7 +145,7 @@ std::string PkgFunctions::UniqueAlias(const std::string &alias) { y2milestone("Alias %s already found: %lld", ret.c_str(), logFindAlias(ret)); - // the alias already exists - add a counter + // the alias already exists - add a counter std::ostringstream ostr; ostr << alias << "_" << id;