From cffd83bda0451eff1ec9272b188c14be24905614 Mon Sep 17 00:00:00 2001 From: Benjamin Zeller Date: Mon, 25 Jun 2018 16:23:21 +0200 Subject: [PATCH] Autoremove a locale only if its not the fallback for another enabled one --- zypp/sat/detail/PoolImpl.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/zypp/sat/detail/PoolImpl.cc b/zypp/sat/detail/PoolImpl.cc index a5d042da4a..0b63f6a6e2 100644 --- a/zypp/sat/detail/PoolImpl.cc +++ b/zypp/sat/detail/PoolImpl.cc @@ -505,8 +505,20 @@ namespace zypp // Add removed locales+fallback except they are still in current for ( Locale lang: localesTracker.removed() ) { - for ( ; lang && ! localeIds.current().count( IdString(lang) ); lang = lang.fallback() ) - { localeIds.removed().insert( IdString(lang) ); } + if ( lang && ! localeIds.current().count( IdString(lang) ) ) { + + //remove the requested one + localeIds.removed().insert( IdString(lang) ); + + //remove fallbacks + const auto &currLangs = localeIds.current(); + for ( lang = lang.fallback(); lang && ! localeIds.current().count( IdString(lang) ); lang = lang.fallback() ) { + //remove the language only if its not a fallback for any other + if ( std::none_of(currLangs.begin(), currLangs.end(), [&lang](const IdString &loc){ return Locale(loc).fallback() == lang; }) ) + localeIds.removed().insert( IdString(lang) ); + } + } + } // Assert that TrackedLocaleIds::current is not empty.