diff --git a/configure.in.in b/configure.in.in index a38b803..35a883e 100644 --- a/configure.in.in +++ b/configure.in.in @@ -29,7 +29,8 @@ fi AX_CHECK_DOCBOOK # libzypp uses the C++17 standard -CXXFLAGS="${CXXFLAGS} -std=c++17" +# treat missing values in switch statements as errors +CXXFLAGS="${CXXFLAGS} -std=c++17 -Werror=switch" ## and generate the output @YAST2-OUTPUT@ diff --git a/package/yast2-pkg-bindings.changes b/package/yast2-pkg-bindings.changes index ade567a..282f879 100644 --- a/package/yast2-pkg-bindings.changes +++ b/package/yast2-pkg-bindings.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Jan 18 14:18:02 UTC 2024 - Ladislav Slezák + +- Fixed repository and service probing with libzypp 7.31.26 + and newer, convert the type to string by pkg-bindings, + not by libzypp which might change it (bsc#1218399) +- 5.0.4 + ------------------------------------------------------------------- Tue Jan 16 14:32:15 UTC 2024 - Ladislav Slezák diff --git a/package/yast2-pkg-bindings.spec b/package/yast2-pkg-bindings.spec index dabf8c0..4ab68ba 100644 --- a/package/yast2-pkg-bindings.spec +++ b/package/yast2-pkg-bindings.spec @@ -17,7 +17,7 @@ Name: yast2-pkg-bindings -Version: 5.0.3 +Version: 5.0.4 Release: 0 Summary: YaST2 - Package Manager Access License: GPL-2.0-only diff --git a/src/PkgFunctions.h b/src/PkgFunctions.h index f8b0499..827c9ec 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 217bf92..bcb954a 100644 --- a/src/Source_Get.cc +++ b/src/Source_Get.cc @@ -134,7 +134,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 eaf41c2..de8cd6f 100644 --- a/src/Source_Misc.cc +++ b/src/Source_Misc.cc @@ -108,34 +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) @@ -161,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;