Hello community,

here is the log from the commit of package libzypp for openSUSE:Factory checked 
in at 2018-10-22 11:04:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libzypp (Old)
 and      /work/SRC/openSUSE:Factory/.libzypp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libzypp"

Mon Oct 22 11:04:13 2018 rev:405 rq:641674 version:17.8.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes  2018-10-11 
11:45:46.010762755 +0200
+++ /work/SRC/openSUSE:Factory/.libzypp.new/libzypp.changes     2018-10-22 
11:04:48.612199523 +0200
@@ -1,0 +2,10 @@
+Fri Oct 12 14:01:19 CEST 2018 - [email protected]
+
+- 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)
+
+-------------------------------------------------------------------

Old:
----
  libzypp-17.7.2.tar.bz2

New:
----
  libzypp-17.8.0.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libzypp.spec ++++++
--- /var/tmp/diff_new_pack.APpdNu/_old  2018-10-22 11:04:54.572194460 +0200
+++ /var/tmp/diff_new_pack.APpdNu/_new  2018-10-22 11:04:54.588194447 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           libzypp
-Version:        17.7.2
+Version:        17.8.0
 Release:        0
 Url:            https://github.com/openSUSE/libzypp
 Summary:        Package, Patch, Pattern, and Product Management

++++++ libzypp-17.7.2.tar.bz2 -> libzypp-17.8.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/VERSION.cmake 
new/libzypp-17.8.0/VERSION.cmake
--- old/libzypp-17.7.2/VERSION.cmake    2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/VERSION.cmake    2018-10-12 14:03:12.000000000 +0200
@@ -60,9 +60,9 @@
 #
 SET(LIBZYPP_MAJOR "17")
 SET(LIBZYPP_COMPATMINOR "2")
-SET(LIBZYPP_MINOR "7")
-SET(LIBZYPP_PATCH "2")
+SET(LIBZYPP_MINOR "8")
+SET(LIBZYPP_PATCH "0")
 #
-# LAST RELEASED: 17.7.2 (2)
+# LAST RELEASED: 17.8.0 (2)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
 #=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/package/libzypp.changes 
new/libzypp-17.8.0/package/libzypp.changes
--- old/libzypp-17.7.2/package/libzypp.changes  2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/package/libzypp.changes  2018-10-12 14:03:12.000000000 
+0200
@@ -1,4 +1,14 @@
 -------------------------------------------------------------------
+Fri Oct 12 14:01:19 CEST 2018 - [email protected]
+
+- 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 - [email protected]
 
 - Fix blocking wait for finished child process (bsc#1109877)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/po/id.po new/libzypp-17.8.0/po/id.po
--- old/libzypp-17.7.2/po/id.po 2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/po/id.po 2018-10-05 15:08:55.000000000 +0200
@@ -3,21 +3,22 @@
 # Copyright (C) 2002 SuSE Linux AG.
 # Copyright (C) 1999-2001 SuSE GmbH.
 # I Made Wiryana <[email protected]>, 1999.
+# Kukuh Syafaat <[email protected]>, 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 <[email protected]>\n"
-"Language-Team: Indonesian <https://l10n.opensuse.org/projects/libzypp/master/";
-"id/>\n"
+"Language-Team: Indonesian "
+"<https://l10n.opensuse.org/projects/libzypp/master/id/>\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 @@
 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 @@
 #: 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 @@
 #: 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 @@
 #: 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/po/zh_TW.po 
new/libzypp-17.8.0/po/zh_TW.po
--- old/libzypp-17.7.2/po/zh_TW.po      2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/po/zh_TW.po      2018-10-06 13:02:12.000000000 +0200
@@ -11,7 +11,7 @@
 "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 <[email protected]>\n"
 "Language-Team: Chinese (Taiwan) "
 "<https://l10n.opensuse.org/projects/libzypp/master/zh_TW/>\n"
@@ -4189,7 +4189,7 @@
 #: 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/Resolver.cc 
new/libzypp-17.8.0/zypp/Resolver.cc
--- old/libzypp-17.7.2/zypp/Resolver.cc 2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/Resolver.cc 2018-10-05 11:37:18.000000000 +0200
@@ -86,6 +86,10 @@
   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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/Resolver.h 
new/libzypp-17.8.0/zypp/Resolver.h
--- old/libzypp-17.7.2/zypp/Resolver.h  2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/Resolver.h  2018-10-05 11:37:18.000000000 +0200
@@ -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 @@
     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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/ResolverNamespace.h 
new/libzypp-17.8.0/zypp/ResolverNamespace.h
--- old/libzypp-17.7.2/zypp/ResolverNamespace.h 2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/ResolverNamespace.h 2018-10-05 11:37:18.000000000 
+0200
@@ -31,6 +31,12 @@
   /** \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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/base/LogControl.cc 
new/libzypp-17.8.0/zypp/base/LogControl.cc
--- old/libzypp-17.7.2/zypp/base/LogControl.cc  2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/base/LogControl.cc  2018-10-04 18:00:33.000000000 
+0200
@@ -60,6 +60,23 @@
       }
       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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/base/Logger.h 
new/libzypp-17.8.0/zypp/base/Logger.h
--- old/libzypp-17.7.2/zypp/base/Logger.h       2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/base/Logger.h       2018-10-04 18:00:33.000000000 
+0200
@@ -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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/repo/yum/Downloader.cc 
new/libzypp-17.8.0/zypp/repo/yum/Downloader.cc
--- old/libzypp-17.7.2/zypp/repo/yum/Downloader.cc      2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/repo/yum/Downloader.cc      2018-10-04 
18:00:33.000000000 +0200
@@ -37,7 +37,7 @@
 
 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/LookupAttr.cc 
new/libzypp-17.8.0/zypp/sat/LookupAttr.cc
--- old/libzypp-17.7.2/zypp/sat/LookupAttr.cc   2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/sat/LookupAttr.cc   2018-10-05 14:57:44.000000000 
+0200
@@ -383,7 +383,6 @@
     {
       switch ( solvAttrType() )
       {
-        case REPOKEY_TYPE_U32:
         case REPOKEY_TYPE_NUM:
         case REPOKEY_TYPE_CONSTANT:
           return true;
@@ -547,7 +546,6 @@
       {
         switch ( solvAttrType() )
         {
-          case REPOKEY_TYPE_U32:
           case REPOKEY_TYPE_NUM:
           case REPOKEY_TYPE_CONSTANT:
             return _dip->kv.num;
@@ -566,7 +564,6 @@
       {
         switch ( solvAttrType() )
         {
-          case REPOKEY_TYPE_U32:
           case REPOKEY_TYPE_NUM:
           case REPOKEY_TYPE_CONSTANT:
             return SOLV_KV_NUM64(&_dip->kv);
@@ -634,7 +631,6 @@
             }
             break;
 
-          case REPOKEY_TYPE_U32:
           case REPOKEY_TYPE_NUM:
           case REPOKEY_TYPE_CONSTANT:
             return str::numstring( asInt() );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/Pool.cc 
new/libzypp-17.8.0/zypp/sat/Pool.cc
--- old/libzypp-17.7.2/zypp/sat/Pool.cc 2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/sat/Pool.cc 2018-10-12 12:44:03.000000000 +0200
@@ -243,6 +243,9 @@
     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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/Pool.h 
new/libzypp-17.8.0/zypp/sat/Pool.h
--- old/libzypp-17.7.2/zypp/sat/Pool.h  2018-10-01 14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/sat/Pool.h  2018-10-12 12:44:03.000000000 +0200
@@ -265,6 +265,12 @@
        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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/Solvable.cc 
new/libzypp-17.8.0/zypp/sat/Solvable.cc
--- old/libzypp-17.7.2/zypp/sat/Solvable.cc     2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/sat/Solvable.cc     2018-10-12 12:44:03.000000000 
+0200
@@ -387,6 +387,11 @@
       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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/Solvable.h 
new/libzypp-17.8.0/zypp/sat/Solvable.h
--- old/libzypp-17.7.2/zypp/sat/Solvable.h      2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/sat/Solvable.h      2018-10-12 12:44:03.000000000 
+0200
@@ -136,6 +136,11 @@
       /** \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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/SolvableType.h 
new/libzypp-17.8.0/zypp/sat/SolvableType.h
--- old/libzypp-17.7.2/zypp/sat/SolvableType.h  2018-10-01 14:31:07.000000000 
+0200
+++ new/libzypp-17.8.0/zypp/sat/SolvableType.h  2018-10-12 12:44:03.000000000 
+0200
@@ -80,6 +80,7 @@
       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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/sat/detail/PoolImpl.h 
new/libzypp-17.8.0/zypp/sat/detail/PoolImpl.h
--- old/libzypp-17.7.2/zypp/sat/detail/PoolImpl.h       2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/sat/detail/PoolImpl.h       2018-10-12 
12:44:03.000000000 +0200
@@ -306,6 +306,18 @@
 
           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 @@
           /**  */
          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<std::set<std::string> > _requiredFilesystemsPtr;
       };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/solver/detail/Resolver.cc 
new/libzypp-17.8.0/zypp/solver/detail/Resolver.cc
--- old/libzypp-17.7.2/zypp/solver/detail/Resolver.cc   2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/solver/detail/Resolver.cc   2018-10-05 
11:37:18.000000000 +0200
@@ -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 @@
   OUTS( _solveSrcPackages );
   OUTS( _cleandepsOnRemove );
   OUTS( _ignoreAlreadyRecommended );
+  OUTS( _inr );
   #undef OUT
   return os << "<resolver/>";
 }
@@ -91,6 +95,7 @@
     , _solveSrcPackages                ( false )
     , _cleandepsOnRemove       ( 
ZConfig::instance().solver_cleandepsOnRemove() )
     , _ignoreAlreadyRecommended        ( true )
+    // _inr defaults to ResolverNamespaces()
 
 {
     sat::Pool satPool( sat::Pool::instance() );
@@ -306,6 +311,7 @@
 
     _satResolver->setFixsystem                 ( isVerifyingMode() );
     _satResolver->setIgnorealreadyrecommended  ( ignoreAlreadyRecommended() );
+    _satResolver->setInr                       ( inr() );
     _satResolver->setOnlyRequires              ( onlyRequires() );
     _satResolver->setUpdatesystem              (_updateMode);
     _satResolver->setSolveSrcPackages          ( solveSrcPackages() );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/solver/detail/Resolver.h 
new/libzypp-17.8.0/zypp/solver/detail/Resolver.h
--- old/libzypp-17.7.2/zypp/solver/detail/Resolver.h    2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/solver/detail/Resolver.h    2018-10-05 
11:37:18.000000000 +0200
@@ -95,6 +95,7 @@
     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 @@
     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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/solver/detail/SATResolver.cc 
new/libzypp-17.8.0/zypp/solver/detail/SATResolver.cc
--- old/libzypp-17.7.2/zypp/solver/detail/SATResolver.cc        2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/solver/detail/SATResolver.cc        2018-10-05 
11:37:18.000000000 +0200
@@ -62,6 +62,9 @@
 
 #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 @@
        os << "  solveSrcPackages       = "     << _solveSrcPackages << endl;
        os << "  cleandepsOnRemove      = "     << _cleandepsOnRemove << endl;
         os << "  fixsystem             = "     << _fixsystem << endl;
+       os << "  inr namespace          = "     << _inr << endl;
     } else {
        os << "<NULL>";
     }
@@ -622,16 +626,30 @@
 
     // 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/solver/detail/SATResolver.h 
new/libzypp-17.8.0/zypp/solver/detail/SATResolver.h
--- old/libzypp-17.7.2/zypp/solver/detail/SATResolver.h 2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/solver/detail/SATResolver.h 2018-10-05 
11:37:18.000000000 +0200
@@ -115,6 +115,8 @@
     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 @@
     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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/solver/detail/Testcase.cc 
new/libzypp-17.8.0/zypp/solver/detail/Testcase.cc
--- old/libzypp-17.7.2/zypp/solver/detail/Testcase.cc   2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/solver/detail/Testcase.cc   2018-10-05 
11:37:18.000000000 +0200
@@ -308,6 +308,7 @@
     void deleteResolvable( const PoolItem & pi_r );
     void addDependencies (const CapabilitySet &capRequire, const CapabilitySet 
&capConflict);
     void addUpgradeRepos( const std::set<Repository> & upgradeRepos_r );
+    void addInr( ResolverNamespaces namespaces_r );
 
     std::string filename () { return dumpFile; }
 };
@@ -463,6 +464,12 @@
   }
 }
 
+void HelixControl::addInr( ResolverNamespaces namespaces_r )
+{
+  if ( namespaces_r )
+    *file << "<inrNamespaces str=\"" << namespaces_r << "\" int=\"" << 
str::numstring((namespaces_r)) << "\"/>" << endl;
+}
+
 //---------------------------------------------------------------------------
 
 Testcase::Testcase()
@@ -594,6 +601,7 @@
     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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.7.2/zypp/target/TargetImpl.cc 
new/libzypp-17.8.0/zypp/target/TargetImpl.cc
--- old/libzypp-17.7.2/zypp/target/TargetImpl.cc        2018-10-01 
14:31:07.000000000 +0200
+++ new/libzypp-17.8.0/zypp/target/TargetImpl.cc        2018-10-12 
12:44:03.000000000 +0200
@@ -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 @@
          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 @@
               }
               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 );
               }


Reply via email to