From: DongHun Kwak Date: Mon, 2 Sep 2019 07:18:06 +0000 (+0900) Subject: Imported Upstream version 17.8.0 X-Git-Tag: upstream/17.8.0^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Flibzypp.git;a=commitdiff_plain;h=ace83048a47a16dc7525ee429ae39dc1039f9680 Imported Upstream version 17.8.0 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 43c762c..10dc97d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,8 +94,6 @@ MACRO(ADD_TESTS) ENDMACRO(ADD_TESTS) #################################################################### -# prefer packages using the same install prefix as we do -SET(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX} usr/localX /usr/local /usr) IF ( ENABLE_USE_THREADS ) SET( CMAKE_THREAD_PREFER_PTHREAD TRUE ) diff --git a/VERSION.cmake b/VERSION.cmake index 0bd2ed4..3df0591 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -60,9 +60,9 @@ # SET(LIBZYPP_MAJOR "17") SET(LIBZYPP_COMPATMINOR "2") -SET(LIBZYPP_MINOR "7") -SET(LIBZYPP_PATCH "1") +SET(LIBZYPP_MINOR "8") +SET(LIBZYPP_PATCH "0") # -# LAST RELEASED: 17.7.1 (2) +# LAST RELEASED: 17.8.0 (2) # (The number in parenthesis is LIBZYPP_COMPATMINOR) #======= diff --git a/package/libzypp.changes b/package/libzypp.changes index b2aad9d..50a06c8 100644 --- a/package/libzypp.changes +++ b/package/libzypp.changes @@ -1,8 +1,24 @@ ------------------------------------------------------------------- +Fri Oct 12 14:01:19 CEST 2018 - ma@suse.de + +- Add infrastructure to flag specific packages to trigger a + reboot needed hint (fate#326451) +- Adapt to libsolv: Drop support for REPOKEY_TYPE_U32 +- Resolver: add setInr to request solving namespaces +- ResolverNamespace: add No/AllResolverNamespaces constants +- version 17.8.0 (2) + +------------------------------------------------------------------- +Mon Oct 1 14:04:15 CEST 2018 - ma@suse.de + +- Fix blocking wait for finished child process (bsc#1109877) +- version 17.7.2 (2) + +------------------------------------------------------------------- Fri Sep 28 14:38:01 CEST 2018 - ma@suse.de - Fix conversion of string and glob to regex when compiling queries - (bsc#1099982, bsc#939392) + (bsc#1099982, bsc#939392, bsc#556664) - version 17.7.1 (2) ------------------------------------------------------------------- diff --git a/po/id.po b/po/id.po index 25c3c83..4d0947f 100644 --- a/po/id.po +++ b/po/id.po @@ -3,21 +3,22 @@ # Copyright (C) 2002 SuSE Linux AG. # Copyright (C) 1999-2001 SuSE GmbH. # I Made Wiryana , 1999. +# Kukuh Syafaat , 2017-2018. msgid "" msgstr "" "Project-Id-Version: YaST (@memory@)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-08-03 11:09+0200\n" -"PO-Revision-Date: 2017-10-03 15:55+0700\n" +"PO-Revision-Date: 2018-10-05 13:06+0000\n" "Last-Translator: Kukuh Syafaat \n" -"Language-Team: Indonesian \n" +"Language-Team: Indonesian " +"\n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Weblate 2.18\n" #: zypp/target/hal/HalException.h:46 zypp/target/hal/HalException.h:55 #: zypp/target/hal/HalException.h:64 @@ -1618,9 +1619,8 @@ msgid "Tried to import not existent key %s into keyring %s" msgstr "Mencoba untuk mengimpor kunci %s tidak ada ke keyring %s" #: zypp/KeyRing.cc:542 zypp/KeyRing.cc:546 -#, fuzzy msgid "Failed to import key." -msgstr "Gagal mengimpor kunci publik %1%" +msgstr "Gagal mengimpor kunci." #: zypp/KeyRing.cc:553 zypp/KeyRing.cc:557 zypp/KeyRing.cc:561 msgid "Failed to delete key." @@ -4210,20 +4210,20 @@ msgstr[0] "(Berakhir dalam %d hari)" #: zypp/RepoInfo.cc:513 #, boost-format msgid "Looking for gpg key ID %1% in cache %2%." -msgstr "" +msgstr "Mencari kunci gpg ID %1% dalam cache %2%." #. translator: %1% is a gpg key ID like 3DBDC284 #. %2% is a repositories name #: zypp/RepoInfo.cc:541 #, boost-format msgid "Looking for gpg key ID %1% in repository %2%." -msgstr "" +msgstr "Mencari kunci gpg ID %1% dalam repositori %2%." #. translator: %1% is a repositories name #: zypp/RepoInfo.cc:565 #, boost-format msgid "Repository %1% does not define additional 'gpgkey=' URLs." -msgstr "" +msgstr "Repositori %1% tidak mendefinisikan 'gpgkey=' URL tambahan." #: zypp/RepoManager.cc:314 #, boost-format @@ -4637,7 +4637,7 @@ msgstr "Timeout melebihi ketika mengakses '%s'." #: zypp/media/MediaException.cc:195 #, c-format, boost-format msgid "Downloaded data exceeded the expected filesize '%s' of '%s'." -msgstr "" +msgstr "Data yang diunduh melebihi ukuran yang diharapkan '%s' dari '%s'." #: zypp/media/MediaException.cc:203 #, c-format, boost-format @@ -5080,13 +5080,13 @@ msgstr "penghapusan dari %s" #: zypp/target/RpmPostTransCollector.cc:103 #, boost-format msgid "Executing %%posttrans script '%1%'" -msgstr "" +msgstr "Menjalankan skrip '%1%' %%posttrans" #. show a final message #: zypp/target/RpmPostTransCollector.cc:161 #, c-format, boost-format msgid "Executing %posttrans scripts" -msgstr "" +msgstr "Menjalankan skrip %posttrans" #: zypp/target/TargetImpl.cc:311 msgid " executed" diff --git a/po/zh_TW.po b/po/zh_TW.po index e7ed5e8..1d8f430 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: zypp\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-08-03 11:09+0200\n" -"PO-Revision-Date: 2018-08-13 17:01+0000\n" +"PO-Revision-Date: 2018-10-06 11:01+0000\n" "Last-Translator: Yi-Jyun Pan \n" "Language-Team: Chinese (Taiwan) " "\n" @@ -4189,7 +4189,7 @@ msgstr "存取 '%s' 時超出限定時間。" #: zypp/media/MediaException.cc:195 #, c-format, boost-format msgid "Downloaded data exceeded the expected filesize '%s' of '%s'." -msgstr "下載到的資料超出了預期檔案大小 %$2s 中的 %1$s。" +msgstr "下載到的資料超出了預期檔案大小 %s/%s。" #: zypp/media/MediaException.cc:203 #, c-format, boost-format diff --git a/zypp/ExternalProgram.cc b/zypp/ExternalProgram.cc index d5f1460..ef2d224 100644 --- a/zypp/ExternalProgram.cc +++ b/zypp/ExternalProgram.cc @@ -488,20 +488,23 @@ namespace zypp { } while ( true ); } - // Wait for child to exit - int ret; - int status = 0; - do + if ( pid > 0 ) // bsc#1109877: must re-check! running() in the loop above may have already waited. { - ret = waitpid(pid, &status, 0); - } - while (ret == -1 && errno == EINTR); + // Wait for child to exit + int ret; + int status = 0; + do + { + ret = waitpid(pid, &status, 0); + } + while (ret == -1 && errno == EINTR); - if (ret != -1) - { - _exitStatus = checkStatus( status ); + if (ret != -1) + { + _exitStatus = checkStatus( status ); + } + pid = -1; } - pid = -1; } return _exitStatus; diff --git a/zypp/PoolQuery.cc b/zypp/PoolQuery.cc index 4c2e8e7..0ebb9fc 100644 --- a/zypp/PoolQuery.cc +++ b/zypp/PoolQuery.cc @@ -732,8 +732,6 @@ namespace zypp StrMatcher PoolQuery::Impl::joinedStrMatcher( const StrContainer & container_r, const Match & flags_r ) const { - USR << flags_r << " - " << container_r << endl; - if ( container_r.empty() ) return StrMatcher( std::string(), flags_r ); diff --git a/zypp/Resolver.cc b/zypp/Resolver.cc index 3625438..07f90d8 100644 --- a/zypp/Resolver.cc +++ b/zypp/Resolver.cc @@ -86,6 +86,10 @@ namespace zypp void Resolver::setIgnoreAlreadyRecommended( bool yesno_r) { _pimpl->setIgnoreAlreadyRecommended( yesno_r ); } bool Resolver::ignoreAlreadyRecommended() const { return _pimpl->ignoreAlreadyRecommended(); } + void Resolver::setInr( ResolverNamespaces namespaces_r ) { _pimpl->setInr( namespaces_r ); } + void Resolver::resetInr() { setInr( ResolverNamespaces() ); } + ResolverNamespaces Resolver::inr() const { return _pimpl->inr(); } + void Resolver::setOnlyRequires( bool yesno_r ) { _pimpl->setOnlyRequires( yesno_r ); } void Resolver::resetOnlyRequires() { _pimpl->setOnlyRequires( indeterminate ); } bool Resolver::onlyRequires() const { return _pimpl->onlyRequires(); } diff --git a/zypp/Resolver.h b/zypp/Resolver.h index b02e3c5..3225eb1 100644 --- a/zypp/Resolver.h +++ b/zypp/Resolver.h @@ -22,6 +22,7 @@ #include "zypp/PoolItem.h" #include "zypp/Capabilities.h" #include "zypp/Capability.h" +#include "zypp/ResolverNamespace.h" #include "zypp/solver/detail/Types.h" @@ -188,6 +189,15 @@ namespace zypp bool ignoreAlreadyRecommended() const; /** + * Weak form of \ref ignoreAlreadyRecommended \c =false. + * Try to re-evaluate recommendations for specific namespaces only. + * \note May not support all namespaces. + */ + void setInr( ResolverNamespaces namespaces_r ); + void resetInr(); + ResolverNamespaces inr() const; + + /** * Setting whether required packages are installed ONLY * So recommended packages, language packages and packages which depend * on hardware (modalias) will not be regarded. diff --git a/zypp/ResolverNamespace.h b/zypp/ResolverNamespace.h index c66eaef..9c20f72 100644 --- a/zypp/ResolverNamespace.h +++ b/zypp/ResolverNamespace.h @@ -31,6 +31,12 @@ namespace zypp /** \relates ResolverNamespace Flags */ ZYPP_DECLARE_FLAGS_AND_OPERATORS(ResolverNamespaces,ResolverNamespace); + /** \relates ResolverNamespace All bits set. */ + static constexpr const ResolverNamespaces NoResolverNamespaces = ResolverNamespace(); + + /** \relates ResolverNamespace All bits set. */ + static constexpr const ResolverNamespaces AllResolverNamespaces = ResolverNamespace(0xff); + /** \relates ResolverNamespace The underlying libsolv ID */ inline constexpr IdString asIdString( ResolverNamespace obj ) { diff --git a/zypp/base/LogControl.cc b/zypp/base/LogControl.cc index 8bb087a..4bf3ef7 100644 --- a/zypp/base/LogControl.cc +++ b/zypp/base/LogControl.cc @@ -60,6 +60,23 @@ namespace zypp } std::cerr << ansi[level_r%n] << "OSD[" << msg_r << "]\033[0m" << std::endl; } + + + unsigned TraceLeave::_depth = 0; + + TraceLeave::TraceLeave( const char * file_r, const char * fnc_r, int line_r ) + : _file( std::move(file_r) ) + , _fnc( std::move(fnc_r) ) + , _line( line_r ) + { + //std::string::size_type p( _file.find_last_of( '/' ) ); + //if ( p != std::string::npos ) + //_file.erase( 0, p+1 ); + USR << ">>> " << std::string(_depth++,'>') << " " << _file << "(" << _fnc << "):" << _line << endl; + } + + TraceLeave::~TraceLeave() + { USR << "<<< " << std::string(--_depth,'<') << " " << _file << "(" << _fnc << "):" << _line << endl; } } #endif // ZYPP_NDEBUG diff --git a/zypp/base/Logger.h b/zypp/base/Logger.h index 6892db0..ca3bac6 100644 --- a/zypp/base/Logger.h +++ b/zypp/base/Logger.h @@ -19,16 +19,31 @@ #ifdef ZYPP_NDEBUG #define OSDLOG( MSG ) #define OSMLOG( L, MSG ) +#define TRACELEAVE #else namespace zypp { namespace debug { void osdlog( const std::string & msg_r, unsigned level_r ); // LogControl.cc + + struct TraceLeave // LogControl.cc + { + TraceLeave( const TraceLeave & ) =delete; + TraceLeave & operator=( const TraceLeave & ) =delete; + TraceLeave( const char * file_r, const char * fnc_r, int line_r ); + ~TraceLeave(); + private: + static unsigned _depth; + const char * _file; + const char * _fnc; + int _line; + }; } } #define OSDLOG( MSG ) ::zypp::debug::osdlog( MSG, 0 ) #define OSMLOG( L, MSG ) ::zypp::debug::osdlog( MSG, L ) +#define TRACELEAVE ::zypp::debug::TraceLeave _TraceLeave( __FILE__, __FUNCTION__, __LINE__ ) #endif // ZYPP_NDEBUG /////////////////////////////////////////////////////////////////// diff --git a/zypp/repo/yum/Downloader.cc b/zypp/repo/yum/Downloader.cc index b0b8ee0..b127c1e 100644 --- a/zypp/repo/yum/Downloader.cc +++ b/zypp/repo/yum/Downloader.cc @@ -37,7 +37,7 @@ Downloader::Downloader( const RepoInfo &repoinfo , const Pathname &delta_dir) RepoStatus Downloader::status( MediaSetAccess &media ) { - RepoStatus ret( media.provideFile( repoInfo().path() / "/repodata/repomd.xml" ) ); + RepoStatus ret( media.provideOptionalFile( repoInfo().path() / "/repodata/repomd.xml" ) ); if ( !ret.empty() ) // else: mandatory master index is missing ret = ret && RepoStatus( media.provideOptionalFile( "/media.1/media" ) ); // else: mandatory master index is missing -> stay empty diff --git a/zypp/sat/LookupAttr.cc b/zypp/sat/LookupAttr.cc index 0f98bdb..0bf8cdf 100644 --- a/zypp/sat/LookupAttr.cc +++ b/zypp/sat/LookupAttr.cc @@ -383,7 +383,6 @@ namespace zypp { switch ( solvAttrType() ) { - case REPOKEY_TYPE_U32: case REPOKEY_TYPE_NUM: case REPOKEY_TYPE_CONSTANT: return true; @@ -547,7 +546,6 @@ namespace zypp { switch ( solvAttrType() ) { - case REPOKEY_TYPE_U32: case REPOKEY_TYPE_NUM: case REPOKEY_TYPE_CONSTANT: return _dip->kv.num; @@ -566,7 +564,6 @@ namespace zypp { switch ( solvAttrType() ) { - case REPOKEY_TYPE_U32: case REPOKEY_TYPE_NUM: case REPOKEY_TYPE_CONSTANT: return SOLV_KV_NUM64(&_dip->kv); @@ -634,7 +631,6 @@ namespace zypp } break; - case REPOKEY_TYPE_U32: case REPOKEY_TYPE_NUM: case REPOKEY_TYPE_CONSTANT: return str::numstring( asInt() ); diff --git a/zypp/sat/Pool.cc b/zypp/sat/Pool.cc index e4509f5..a073577 100644 --- a/zypp/sat/Pool.cc +++ b/zypp/sat/Pool.cc @@ -243,6 +243,9 @@ namespace zypp Queue Pool::autoInstalled() const { return myPool().autoInstalled(); } void Pool::setAutoInstalled( const Queue & autoInstalled_r ){ myPool().setAutoInstalled( autoInstalled_r ); } + Queue Pool::rebootNeededIdents() const { return myPool().rebootNeededIdents(); } + void Pool::setRebootNeededIdents( const Queue & rebootNeeded_r ){ myPool().setRebootNeededIdents( rebootNeeded_r ); } + /****************************************************************** ** ** FUNCTION NAME : operator<< diff --git a/zypp/sat/Pool.h b/zypp/sat/Pool.h index 160d9a7..e143348 100644 --- a/zypp/sat/Pool.h +++ b/zypp/sat/Pool.h @@ -265,6 +265,12 @@ namespace zypp void setAutoInstalled( const Queue & autoInstalled_r ); //@} + /** Get ident list of all solvables that trigger the "reboot needed" flag. */ + Queue rebootNeededIdents() const; + + /** Set ident list of all solvables that trigger the "reboot needed" flag. */ + void setRebootNeededIdents( const Queue & rebootNeeded_r ); + public: /** Expert backdoor. */ detail::CPool * get() const; diff --git a/zypp/sat/Solvable.cc b/zypp/sat/Solvable.cc index 21fd9a2..2e1ea4c 100644 --- a/zypp/sat/Solvable.cc +++ b/zypp/sat/Solvable.cc @@ -387,6 +387,11 @@ namespace zypp return myPool().isOnSystemByAuto( ident_r ); } + bool Solvable::identTriggersRebootHint ( const IdString &ident_r ) + { + return myPool().triggersRebootNeededHint( ident_r ); + } + bool Solvable::multiversionInstall() const { NO_SOLVABLE_RETURN( false ); diff --git a/zypp/sat/Solvable.h b/zypp/sat/Solvable.h index 64a479d..3e7a3a5 100644 --- a/zypp/sat/Solvable.h +++ b/zypp/sat/Solvable.h @@ -136,6 +136,11 @@ namespace zypp /** \overload static version */ static bool identIsAutoInstalled( const IdString & ident_r ); + /** Whether installing or upgrading a solvable with the same \ref ident will trigger the reboot needed hint. */ + bool identTriggersRebootHint() const + { return identTriggersRebootHint( ident() ); } + static bool identTriggersRebootHint ( const IdString &ident_r ); + /** Whether different versions of this package can be installed at the same time. * Per default \c false. \see also \ref ZConfig::multiversion. */ diff --git a/zypp/sat/SolvableType.h b/zypp/sat/SolvableType.h index e666195..aad678c 100644 --- a/zypp/sat/SolvableType.h +++ b/zypp/sat/SolvableType.h @@ -80,6 +80,7 @@ namespace zypp bool onSystemByAuto() const { return satSolvable().onSystemByAuto(); } bool identIsAutoInstalled() const { return satSolvable().identIsAutoInstalled(); } bool multiversionInstall() const { return satSolvable().multiversionInstall(); } + bool identTriggersRebootHint() const { return satSolvable().identTriggersRebootHint(); } Date buildtime() const { return satSolvable().buildtime(); } Date installtime() const { return satSolvable().installtime(); } diff --git a/zypp/sat/detail/PoolImpl.h b/zypp/sat/detail/PoolImpl.h index 2552f05..3350147 100644 --- a/zypp/sat/detail/PoolImpl.h +++ b/zypp/sat/detail/PoolImpl.h @@ -306,6 +306,18 @@ namespace zypp bool isOnSystemByAuto( IdString ident_r ) const { return _autoinstalled.contains( ident_r.id() ); } + + /** Get ident list of all solvables that trigger the "reboot needed" flag. */ + StringQueue rebootNeededIdents() const + { return _rebootNeeded; } + + /** Set ident list of all solvables that trigger the "reboot needed" flag. */ + void setRebootNeededIdents( const StringQueue & rebootNeeded_r ) + { _rebootNeeded = rebootNeeded_r; } + + bool triggersRebootNeededHint( IdString ident_r ) const + { return _rebootNeeded.contains( ident_r.id() ); } + //@} public: @@ -337,6 +349,9 @@ namespace zypp /** */ sat::StringQueue _autoinstalled; + /** database of all identifiers that will trigger the "reboot needed" flag */ + sat::StringQueue _rebootNeeded; + /** filesystems mentioned in /etc/sysconfig/storage */ mutable scoped_ptr > _requiredFilesystemsPtr; }; diff --git a/zypp/solver/detail/Resolver.cc b/zypp/solver/detail/Resolver.cc index 789f35b..43d60d6 100644 --- a/zypp/solver/detail/Resolver.cc +++ b/zypp/solver/detail/Resolver.cc @@ -47,6 +47,9 @@ using std::endl; using std::make_pair; +#undef ZYPP_BASE_LOGGER_LOGGROUP +#define ZYPP_BASE_LOGGER_LOGGROUP "zypp::solver" + ///////////////////////////////////////////////////////////////////////// namespace zypp { /////////////////////////////////////////////////////////////////////// @@ -73,6 +76,7 @@ std::ostream & Resolver::dumpOn( std::ostream & os ) const OUTS( _solveSrcPackages ); OUTS( _cleandepsOnRemove ); OUTS( _ignoreAlreadyRecommended ); + OUTS( _inr ); #undef OUT return os << ""; } @@ -91,6 +95,7 @@ Resolver::Resolver (const ResPool & pool) , _solveSrcPackages ( false ) , _cleandepsOnRemove ( ZConfig::instance().solver_cleandepsOnRemove() ) , _ignoreAlreadyRecommended ( true ) + // _inr defaults to ResolverNamespaces() { sat::Pool satPool( sat::Pool::instance() ); @@ -306,6 +311,7 @@ void Resolver::solverInit() _satResolver->setFixsystem ( isVerifyingMode() ); _satResolver->setIgnorealreadyrecommended ( ignoreAlreadyRecommended() ); + _satResolver->setInr ( inr() ); _satResolver->setOnlyRequires ( onlyRequires() ); _satResolver->setUpdatesystem (_updateMode); _satResolver->setSolveSrcPackages ( solveSrcPackages() ); diff --git a/zypp/solver/detail/Resolver.h b/zypp/solver/detail/Resolver.h index e28626c..21a7006 100644 --- a/zypp/solver/detail/Resolver.h +++ b/zypp/solver/detail/Resolver.h @@ -95,6 +95,7 @@ class Resolver : private base::NonCopyable bool _cleandepsOnRemove; // whether removing a package should also remove no longer needed requirements bool _ignoreAlreadyRecommended; //ignore recommended packages that have already been recommended by the installed packages + ResolverNamespaces _inr; // Try to re-evaluate recommendations for these namespaces //@} // Additional QueueItems which has to be regarded by the solver @@ -167,6 +168,9 @@ class Resolver : private base::NonCopyable bool ignoreAlreadyRecommended() const { return _ignoreAlreadyRecommended; } void setIgnoreAlreadyRecommended( bool yesno_r ) { _ignoreAlreadyRecommended = yesno_r; } + ResolverNamespaces inr() const { return _inr; } + void setInr( ResolverNamespaces namespaces_r ) { _inr = namespaces_r; } + bool onlyRequires () const { return _onlyRequires; } void setOnlyRequires( TriBool state_r ); diff --git a/zypp/solver/detail/SATResolver.cc b/zypp/solver/detail/SATResolver.cc index 8b55333..41e7214 100644 --- a/zypp/solver/detail/SATResolver.cc +++ b/zypp/solver/detail/SATResolver.cc @@ -62,6 +62,9 @@ extern "C" #define XDEBUG(x) do { if (base::logger::isExcessive()) XXX << x << std::endl;} while (0) +#undef ZYPP_BASE_LOGGER_LOGGROUP +#define ZYPP_BASE_LOGGER_LOGGROUP "zypp::solver" + ///////////////////////////////////////////////////////////////////////// namespace zypp { /////////////////////////////////////////////////////////////////////// @@ -167,6 +170,7 @@ SATResolver::dumpOn( std::ostream & os ) const os << " solveSrcPackages = " << _solveSrcPackages << endl; os << " cleandepsOnRemove = " << _cleandepsOnRemove << endl; os << " fixsystem = " << _fixsystem << endl; + os << " inr namespace = " << _inr << endl; } else { os << ""; } @@ -622,16 +626,30 @@ SATResolver::solverInit(const PoolItemList & weakItems) // Ad rules for changed requestedLocales const auto & trackedLocaleIds( myPool().trackedLocaleIds() ); - for ( const auto & locale : trackedLocaleIds.added() ) + if ( _inr.testFlag( ResolverNamespace::language ) ) { - queue_push( &(_jobQueue), SOLVER_INSTALL | SOLVER_SOLVABLE_PROVIDES ); - queue_push( &(_jobQueue), Capability( ResolverNamespace::language, IdString(locale) ).id() ); + // inr mode + for ( const auto & locale : trackedLocaleIds.current() ) + { + queue_push( &(_jobQueue), SOLVER_INSTALL | SOLVER_SOLVABLE_PROVIDES ); + queue_push( &(_jobQueue), Capability( ResolverNamespace::language, IdString(locale) ).id() ); + } + // TODO cleanup not requested locale packages? } - - for ( const auto & locale : trackedLocaleIds.removed() ) + else { - queue_push( &(_jobQueue), SOLVER_ERASE | SOLVER_SOLVABLE_PROVIDES | SOLVER_CLEANDEPS ); // needs uncond. SOLVER_CLEANDEPS! - queue_push( &(_jobQueue), Capability( ResolverNamespace::language, IdString(locale) ).id() ); + // just track changed locakes + for ( const auto & locale : trackedLocaleIds.added() ) + { + queue_push( &(_jobQueue), SOLVER_INSTALL | SOLVER_SOLVABLE_PROVIDES ); + queue_push( &(_jobQueue), Capability( ResolverNamespace::language, IdString(locale) ).id() ); + } + + for ( const auto & locale : trackedLocaleIds.removed() ) + { + queue_push( &(_jobQueue), SOLVER_ERASE | SOLVER_SOLVABLE_PROVIDES | SOLVER_CLEANDEPS ); // needs uncond. SOLVER_CLEANDEPS! + queue_push( &(_jobQueue), Capability( ResolverNamespace::language, IdString(locale) ).id() ); + } } // Add rules for parallel installable resolvables with different versions diff --git a/zypp/solver/detail/SATResolver.h b/zypp/solver/detail/SATResolver.h index a62e109..c8e5435 100644 --- a/zypp/solver/detail/SATResolver.h +++ b/zypp/solver/detail/SATResolver.h @@ -115,6 +115,8 @@ class SATResolver : public base::ReferenceCounted, private base::NonCopyable, pr bool _cleandepsOnRemove:1; // whether removing a package should also remove no longer needed requirements private: + ResolverNamespaces _inr; // Try to re-evaluate recommendations for these namespaces + private: // ---------------------------------- methods std::string SATprobleminfoString (Id problem, std::string &detail, Id &ignoreId); void resetItemTransaction (PoolItem item); @@ -176,6 +178,9 @@ class SATResolver : public base::ReferenceCounted, private base::NonCopyable, pr bool ignorealreadyrecommended () const {return _ignorealreadyrecommended;} void setIgnorealreadyrecommended ( const bool ignorealreadyrecommended) { _ignorealreadyrecommended = ignorealreadyrecommended;} + ResolverNamespaces inr() const { return _inr; } + void setInr( ResolverNamespaces namespaces_r ) { _inr = namespaces_r; } + bool distupgrade () const {return _distupgrade;} void setDistupgrade ( const bool distupgrade) { _distupgrade = distupgrade;} diff --git a/zypp/solver/detail/Testcase.cc b/zypp/solver/detail/Testcase.cc index cf34ba1..55b3f21 100644 --- a/zypp/solver/detail/Testcase.cc +++ b/zypp/solver/detail/Testcase.cc @@ -308,6 +308,7 @@ class HelixControl { void deleteResolvable( const PoolItem & pi_r ); void addDependencies (const CapabilitySet &capRequire, const CapabilitySet &capConflict); void addUpgradeRepos( const std::set & upgradeRepos_r ); + void addInr( ResolverNamespaces namespaces_r ); std::string filename () { return dumpFile; } }; @@ -463,6 +464,12 @@ void HelixControl::addUpgradeRepos( const std::set & upgradeRepos_r } } +void HelixControl::addInr( ResolverNamespaces namespaces_r ) +{ + if ( namespaces_r ) + *file << "" << endl; +} + //--------------------------------------------------------------------------- Testcase::Testcase() @@ -594,6 +601,7 @@ bool Testcase::createTestcase(Resolver & resolver, bool dumpPool, bool runSolver control.addDependencies (SystemCheck::instance().requiredSystemCap(), SystemCheck::instance().conflictSystemCap()); control.addUpgradeRepos( resolver.upgradeRepos() ); + control.addInr( resolver.inr() ); control.addTagIf( "distupgrade", resolver.isUpgradeMode() ); control.addTagIf( "update", resolver.isUpdateMode() ); diff --git a/zypp/target/TargetImpl.cc b/zypp/target/TargetImpl.cc index a5389b3..687af9b 100644 --- a/zypp/target/TargetImpl.cc +++ b/zypp/target/TargetImpl.cc @@ -30,6 +30,7 @@ #include "zypp/ZConfig.h" #include "zypp/ZYppFactory.h" +#include "zypp/PathInfo.h" #include "zypp/PoolItem.h" #include "zypp/ResObjects.h" @@ -1072,6 +1073,38 @@ namespace zypp q.push( idstr.id() ); satpool.setAutoInstalled( q ); } + + //load the packages that will trigger the update flag being set + { + sat::StringQueue q; + filesystem::Pathname needRebootFile = home() / "needreboot"; + if ( filesystem::PathInfo ( needRebootFile ).isExist() ) { + SolvIdentFile file ( needRebootFile ); + for ( const auto & idstr : file.data() ) { + q.push( idstr.id() ); + } + } + + filesystem::Pathname needRebootDir = home() / "needreboot.d"; + if ( filesystem::PathInfo ( needRebootDir ).isExist() ) { + filesystem::DirContent ls; + filesystem::readdir( ls, needRebootDir, false ); + + for ( const filesystem::DirEntry &entry : ls ) { + + if ( entry.type != filesystem::FT_FILE ) + continue; + + SolvIdentFile file ( needRebootDir / entry.name ); + for ( const auto & idstr : file.data() ) { + q.push( idstr.id() ); + } + } + } + + satpool.setRebootNeededIdents( q ); + } + if ( ZConfig::instance().apply_locks_file() ) { const HardLocksFile::Data & hardLocks( _hardLocksFile.data() ); @@ -1468,6 +1501,12 @@ namespace zypp } else { + if ( citem.identTriggersRebootHint() ) { + auto rebootNeededFile = root() / "/var/run/reboot-needed"; + if ( filesystem::assert_file( rebootNeededFile ) == EEXIST) + filesystem::touch( rebootNeededFile ); + } + success = true; step->stepStage( sat::Transaction::STEP_DONE ); }