From 0369cbc5870153ace12b2e6dc7eb6606558b15c8 Mon Sep 17 00:00:00 2001 From: Klaus Kaempf Date: Sat, 11 Mar 2006 06:42:07 +0000 Subject: [PATCH] use Locale::fallback() instead of own implementation --- zypp/solver/detail/QueueItemRequire.cc | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/zypp/solver/detail/QueueItemRequire.cc b/zypp/solver/detail/QueueItemRequire.cc index e839e4b..fb92807 100644 --- a/zypp/solver/detail/QueueItemRequire.cc +++ b/zypp/solver/detail/QueueItemRequire.cc @@ -381,6 +381,10 @@ QueueItemRequire::process (ResolverContext_Ptr context, QueueItemList & new_item } if (!requested_match) { CapSet freshens( item->dep( Dep::FRESHENS ) ); + + // try to find a match of the locale freshens with one of the requested locales + // if we have a match, we're done. + for (CapSet::const_iterator cit = freshens.begin(); cit != freshens.end(); ++cit) { if (cit->refers() == ResTraits::kind) { string loc = cit->index(); @@ -402,15 +406,25 @@ QueueItemRequire::process (ResolverContext_Ptr context, QueueItemList & new_item // loop over requested locales, loop over their fallbacks, and try to find a matching provider for (ZYpp::LocaleSet::const_iterator rit = requested_locales.begin(); rit != requested_locales.end(); ++rit) { - // Locale fallback = rit->fallback(); - Locale fallback( "en" ); - MIL << "requested " << *rit << " fallback " << fallback << endl; - std::map::const_iterator match = language_freshens.find( fallback.code() ); - if (match != language_freshens.end()) { - MIL << match->second << " matches the fallback" << endl; - info.providers.clear(); - info.providers.push_back( match->second ); - break; + + // loop over possible fallbacks + Locale l = *rit; + for (;;) { + Locale fallback = l.fallback(); + if (fallback == Locale::noCode + || fallback == l) + { + break; + } + MIL << "requested " << l << " fallback " << fallback << endl; + std::map::const_iterator match = language_freshens.find( fallback.code() ); + if (match != language_freshens.end()) { + MIL << match->second << " matches the fallback" << endl; + info.providers.clear(); + info.providers.push_back( match->second ); + break; + } + l = fallback; } } #if 0 // just debug -- 2.7.4