Hello community,

here is the log from the commit of package libzypp for openSUSE:Factory checked 
in at 2014-02-28 16:25:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libzypp (Old)
 and      /work/SRC/openSUSE:Factory/.libzypp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libzypp"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes  2014-02-16 
09:10:48.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libzypp.new/libzypp.changes     2014-02-28 
16:25:10.000000000 +0100
@@ -1,0 +2,22 @@
+Wed Feb 26 15:06:06 CET 2014 - [email protected]
+
+- Ignore failed-eject-exception on media change (bnc#865705)
+- version 14.16.1 (16)
+
+-------------------------------------------------------------------
+Tue Feb 25 13:42:13 CET 2014 - [email protected]
+
+- Remove duplicate code detecting known kinds and move it to 
+  ResKind::explicitBuiltin.
+- version 14.16.0 (16)
+
+-------------------------------------------------------------------
+Sun Feb 23 21:52:55 CET 2014 - [email protected]
+
+- Optionally exclude suggested packages from pattern content (bnc#857671)
+- Fix pattern content for auto-pattens (bnc#864087)
+- Don't report missing filelists for non-packages (bnc#864314)
+- adapt to new rpm weak dependency tags
+- version 14.15.0 (15)
+
+-------------------------------------------------------------------

Old:
----
  libzypp-14.14.0.tar.bz2

New:
----
  libzypp-14.16.1.tar.bz2

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

Other differences:
------------------
++++++ libzypp.spec ++++++
--- /var/tmp/diff_new_pack.fr53p6/_old  2014-02-28 16:25:11.000000000 +0100
+++ /var/tmp/diff_new_pack.fr53p6/_new  2014-02-28 16:25:11.000000000 +0100
@@ -23,7 +23,7 @@
 Summary:        Package, Patch, Pattern, and Product Management
 License:        GPL-2.0+
 Group:          System/Packages
-Version:        14.14.0
+Version:        14.16.1
 Release:        0
 Source:         %{name}-%{version}.tar.bz2
 Source1:        %{name}-rpmlintrc

++++++ libzypp-14.14.0.tar.bz2 -> libzypp-14.16.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/VERSION.cmake 
new/libzypp-14.16.1/VERSION.cmake
--- old/libzypp-14.14.0/VERSION.cmake   2014-02-14 13:52:54.000000000 +0100
+++ new/libzypp-14.16.1/VERSION.cmake   2014-02-26 15:08:52.000000000 +0100
@@ -59,10 +59,10 @@
 #   See './mkChangelog -h' for help.
 #
 SET(LIBZYPP_MAJOR "14")
-SET(LIBZYPP_COMPATMINOR "14")
-SET(LIBZYPP_MINOR "14")
-SET(LIBZYPP_PATCH "0")
+SET(LIBZYPP_COMPATMINOR "16")
+SET(LIBZYPP_MINOR "16")
+SET(LIBZYPP_PATCH "1")
 #
-# LAST RELEASED: 14.14.0 (14)
+# LAST RELEASED: 14.16.1 (16)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
 #=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/package/libzypp.changes 
new/libzypp-14.16.1/package/libzypp.changes
--- old/libzypp-14.14.0/package/libzypp.changes 2014-02-14 13:52:54.000000000 
+0100
+++ new/libzypp-14.16.1/package/libzypp.changes 2014-02-26 15:08:52.000000000 
+0100
@@ -1,4 +1,26 @@
 -------------------------------------------------------------------
+Wed Feb 26 15:06:06 CET 2014 - [email protected]
+
+- Ignore failed-eject-exception on media change (bnc#865705)
+- version 14.16.1 (16)
+
+-------------------------------------------------------------------
+Tue Feb 25 13:42:13 CET 2014 - [email protected]
+
+- Remove duplicate code detecting known kinds and move it to 
+  ResKind::explicitBuiltin.
+- version 14.16.0 (16)
+
+-------------------------------------------------------------------
+Sun Feb 23 21:52:55 CET 2014 - [email protected]
+
+- Optionally exclude suggested packages from pattern content (bnc#857671)
+- Fix pattern content for auto-pattens (bnc#864087)
+- Don't report missing filelists for non-packages (bnc#864314)
+- adapt to new rpm weak dependency tags
+- version 14.15.0 (15)
+
+-------------------------------------------------------------------
 Fri Feb 14 13:51:46 CET 2014 - [email protected]
 
 - Provide ContentIdentifier of required update repositories in Product
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/MediaSetAccess.cc 
new/libzypp-14.16.1/zypp/MediaSetAccess.cc
--- old/libzypp-14.14.0/zypp/MediaSetAccess.cc  2013-05-08 09:09:31.000000000 
+0200
+++ new/libzypp-14.16.1/zypp/MediaSetAccess.cc  2014-02-26 15:08:52.000000000 
+0100
@@ -299,10 +299,15 @@
           else if ( user == media::MediaChangeReport::EJECT )
           {
             DBG << "Eject: try to release" << endl;
-            media_mgr.releaseAll();
-            // eject
-            media_mgr.release (media,
-              devindex < devices.size() ? devices[devindex] : "");
+           try
+           {
+             media_mgr.releaseAll();
+             media_mgr.release (media, devindex < devices.size() ? 
devices[devindex] : "");
+           }
+           catch ( const Exception & e)
+           {
+             ZYPP_CAUGHT(e);
+           }
           }
           else if ( user == media::MediaChangeReport::RETRY  ||
             user == media::MediaChangeReport::CHANGE_URL )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/Pattern.cc 
new/libzypp-14.16.1/zypp/Pattern.cc
--- old/libzypp-14.14.0/zypp/Pattern.cc 2013-03-20 09:29:30.000000000 +0100
+++ new/libzypp-14.16.1/zypp/Pattern.cc 2014-02-23 21:56:52.000000000 +0100
@@ -20,11 +20,19 @@
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
-{ /////////////////////////////////////////////////////////////////
-
+{
   ///////////////////////////////////////////////////////////////////
   namespace
-  { /////////////////////////////////////////////////////////////////
+  {
+    inline Capability autoCapability( const Capabilities & provides_r )
+    {
+      static const Capability autopattern( "autopattern()" );
+      for ( const auto & cap : provides_r )
+       if ( cap.matches( autopattern ) == CapMatch::yes )
+         return cap;
+      return Capability();
+    }
+
     ///////////////////////////////////////////////////////////////////
     //
     // CLASS NAME : PatternExpander
@@ -153,78 +161,112 @@
       private:
         PatternMap _patternMap;
     };
-    /////////////////////////////////////////////////////////////////
   } // namespace
   ///////////////////////////////////////////////////////////////////
-  IMPL_PTR_TYPE(Pattern);
 
   ///////////////////////////////////////////////////////////////////
-  //
-  //   METHOD NAME : Pattern::Pattern
-  //   METHOD TYPE : Ctor
-  //
+  //   Pattern
+  ///////////////////////////////////////////////////////////////////
+
+  IMPL_PTR_TYPE(Pattern);
+
   Pattern::Pattern( const sat::Solvable & solvable_r )
   : ResObject( solvable_r )
   {}
 
-  ///////////////////////////////////////////////////////////////////
-  //
-  //   METHOD NAME : Pattern::~Pattern
-  //   METHOD TYPE : Dtor
-  //
   Pattern::~Pattern()
   {}
 
-  ///////////////////////////////////////////////////////////////////
-  //
-  //   Pattern interface forwarded to implementation
-  //
-  ///////////////////////////////////////////////////////////////////
-  /** */
   bool Pattern::isDefault() const
   { return lookupBoolAttribute( sat::SolvAttr::isdefault ); }
-  /** */
+
   bool Pattern::userVisible() const
   { return lookupBoolAttribute( sat::SolvAttr::isvisible ); }
-  /** */
+
   std::string Pattern::category( const Locale & lang_r ) const
   { return lookupStrAttribute( sat::SolvAttr::category, lang_r ); }
-  /** */
+
   Pathname Pattern::icon() const
   { return lookupStrAttribute( sat::SolvAttr::icon ); }
-  /** */
+
   Pathname Pattern::script() const
   { return lookupStrAttribute( sat::SolvAttr::script ); }
 
   std::string Pattern::order() const
   { return lookupStrAttribute( sat::SolvAttr::order ); }
 
+  bool Pattern::isAutoPattern() const
+  { return bool(autoCapability( provides() )); }
+
+  sat::Solvable Pattern::autoPackage() const
+  {
+    Capability autocap( autoCapability( provides() ) );
+    if ( autocap )
+    {
+      Capability pkgCap( arch(), autocap.detail().ed().asString(), Rel::EQ, 
edition() );
+      for ( const auto & solv: sat::WhatProvides( pkgCap ) )
+       if ( solv.repository() == repository() )
+         return solv;
+    }
+    return sat::Solvable();
+  }
+
   Pattern::NameList Pattern::includes() const
   { return NameList( sat::SolvAttr::includes, satSolvable() ); }
 
   Pattern::NameList Pattern::extends() const
   { return NameList( sat::SolvAttr::extends, satSolvable() ); }
 
+  ///////////////////////////////////////////////////////////////////
+  namespace
+  {
+    inline void addCaps( CapabilitySet & caps_r, sat::Solvable solv_r, Dep 
dep_r )
+    {
+      Capabilities c( solv_r[dep_r] );
+      if ( ! c.empty() )
+      {
+       caps_r.insert( c.begin(),c.end() );
+      }
+    }
+  } //namespace
+  ///////////////////////////////////////////////////////////////////
+
   Pattern::Contents Pattern::core() const
   {
+    // Content dependencies are either associated with
+    // the autoPackage or the (oldstype) pattern itself.
+    // load requires
+    CapabilitySet caps;
+    addCaps( caps, *this, Dep::REQUIRES );
+
+    sat::Solvable depKeeper( autoPackage() );
+    if ( depKeeper )
+      addCaps( caps, depKeeper, Dep::REQUIRES );
     // get items providing the requirements
-    sat::WhatProvides prv( requires() );
+    sat::WhatProvides prv( caps );
     // return packages only.
     return Pattern::Contents( make_filter_begin( filter::byKind<Package>(), 
prv ),
                               make_filter_end( filter::byKind<Package>(), prv 
) );
   }
 
-  Pattern::Contents Pattern::depends() const
+  Pattern::Contents Pattern::depends( bool includeSuggests_r ) const
   {
-    // load requires, recommends, suggests
+    // Content dependencies are either associated with
+    // the autoPackage or the (oldstype) pattern itself.
+    // load requires, recommends[, suggests]
     CapabilitySet caps;
+    addCaps( caps, *this, Dep::REQUIRES );
+    addCaps( caps, *this, Dep::RECOMMENDS );
+    if ( includeSuggests_r )
+      addCaps( caps, *this, Dep::SUGGESTS );
+
+    sat::Solvable depKeeper( autoPackage() );
+    if ( depKeeper )
     {
-      Capabilities c( requires() );
-      caps.insert( c.begin(),c.end() );
-      c = recommends();
-      caps.insert( c.begin(),c.end() );
-      c = suggests();
-      caps.insert( c.begin(),c.end() );
+      addCaps( caps, depKeeper, Dep::REQUIRES );
+      addCaps( caps, depKeeper, Dep::RECOMMENDS );
+      if ( includeSuggests_r )
+       addCaps( caps, depKeeper, Dep::SUGGESTS );
     }
     // get items providing the above
     sat::WhatProvides prv( caps );
@@ -233,7 +275,7 @@
                               make_filter_end( filter::byKind<Package>(), prv 
) );
   }
 
-  Pattern::Contents Pattern::contents() const
+  Pattern::Contents Pattern::contents( bool includeSuggests_r ) const
   {
     PatternExpander expander;
     if ( ! expander.doExpand( this ) )
@@ -242,7 +284,7 @@
     Contents result;
     for_( it, expander.begin(), expander.end() )
     {
-      Contents c( (*it)->depends() );
+      Contents c( (*it)->depends( includeSuggests_r ) );
       result.get().insert( c.begin(), c.end() );
     }
     return result;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/Pattern.h 
new/libzypp-14.16.1/zypp/Pattern.h
--- old/libzypp-14.14.0/zypp/Pattern.h  2013-03-20 09:29:30.000000000 +0100
+++ new/libzypp-14.16.1/zypp/Pattern.h  2014-02-23 21:56:52.000000000 +0100
@@ -54,6 +54,22 @@
       std::string order() const;
 
     public:
+      /** \name Auto pattens (libyzpp-14)
+       * Patterns are no longer defined by separate metadate files, but via
+       * special dependencies provided by a corresponding patterns- package.
+       * The pattern itself requires only it's patterns- package, the package
+       * contains all further dependencies.
+       * This way pattens are no longer pseudo installed objects with a 
computed
+       * status, but installed, iff the corresponding patterns- package is
+       * installed.
+       */
+      //@{
+      /** This patterns is auto-defined by a patterns- package. */
+      bool isAutoPattern() const;
+      /** The corresponding patterns- package if \ref isAutoPattern. */
+      sat::Solvable autoPackage() const;
+      //@}
+    public:
       /** Ui hint: included patterns. */
       NameList includes() const;
 
@@ -64,14 +80,21 @@
       Contents core() const;
 
       /** Ui hint: Dependent packages.
-       * This also includes recommended and suugested packages.
+       * This also includes recommended and suggested (optionally exclude) 
packages.
       */
-      Contents depends() const;
+      Contents depends( bool includeSuggests_r = true ) const;
+      /** \overload Without SUGGESTS. */
+      Contents dependsNoSuggests() const
+      { return depends( false ); }
 
       /** The collection of packages associated with this pattern.
        * This also evaluates the patterns includes/extends relation.
+       * Optionally exclude \c SUGGESTED packages.
        */
-      Contents contents() const;
+      Contents contents( bool includeSuggests_r = true ) const;
+      /** \overload Without SUGGESTS. */
+      Contents contentsNoSuggests() const
+      { return contents( false ); }
 
     protected:
       friend Ptr make<Self>( const sat::Solvable & solvable_r );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/PoolQuery.cc 
new/libzypp-14.16.1/zypp/PoolQuery.cc
--- old/libzypp-14.14.0/zypp/PoolQuery.cc       2013-04-29 10:53:30.000000000 
+0200
+++ new/libzypp-14.16.1/zypp/PoolQuery.cc       2014-02-25 13:44:53.000000000 
+0100
@@ -407,8 +407,8 @@
        // We unify those two forms to enable zypper to remove zypp locks
        // without need to actually evaluate the query (which would require
        // repos to be loaded).
-       || ( ( _flags.isModeString() && rhs._flags.isModeGlob()
-           || _flags.isModeGlob() && rhs._flags.isModeString() )
+       || ( ( ( _flags.isModeString() && rhs._flags.isModeGlob() )
+           || ( _flags.isModeGlob() && rhs._flags.isModeString() ) )
          && _strings.empty()
          && _attrs.size() == 1
          && _attrs.begin()->first == sat::SolvAttr::name ) )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/ResKind.cc 
new/libzypp-14.16.1/zypp/ResKind.cc
--- old/libzypp-14.14.0/zypp/ResKind.cc 2014-01-31 19:12:53.000000000 +0100
+++ new/libzypp-14.16.1/zypp/ResKind.cc 2014-02-25 13:44:53.000000000 +0100
@@ -43,6 +43,28 @@
   template<>
     const ResKind ResTraits<Application>::kind( ResKind::application );
 
+  ResKind ResKind::explicitBuiltin( const char * str_r )
+  {
+    if ( str_r && str_r[0] && str_r[1] && str_r[2] )
+    {
+      switch ( str_r[3] )
+      {
+       // NOTE: it needs to be assertd that the separating ':' is present
+       // if a known kind is retuirned. Dependent code relies on this!
+       #define OUTS(K,S) if ( !::strncmp( str_r, ResKind::K.c_str(), S ) && 
str_r[S] == ':' ) return ResKind::K
+       //             ----v
+       case 'c': OUTS( patch, 5 );       break;
+       case 'd': OUTS( product, 7 );     break;
+       case 'k': OUTS( package, 7 );     break;
+       case 'l': OUTS( application, 11 );break;
+       case 'p': OUTS( srcpackage, 10 ); break;
+       case 't': OUTS( pattern, 7 );     break;
+       #undef OUTS
+      }
+    }
+    return nokind;
+  }
+
   std::string ResKind::satIdent( const ResKind & refers_r, const std::string & 
name_r )
   {
     if ( ! refers_r || refers_r == package || refers_r == srcpackage )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/ResKind.h 
new/libzypp-14.16.1/zypp/ResKind.h
--- old/libzypp-14.14.0/zypp/ResKind.h  2014-01-31 19:12:53.000000000 +0100
+++ new/libzypp-14.16.1/zypp/ResKind.h  2014-02-25 13:44:53.000000000 +0100
@@ -45,6 +45,19 @@
       static const ResKind application;
       //@}
 
+      /** Return the builtin kind if \a str_r explicitly prefixed.
+       * \a str_r must start with a builtin kind followed by a \c ':'.
+       * If no builtin kind is detected, \ref nokind is returned,
+       * which usually indicates a \ref package or \ref srcpackage.
+       */
+      static ResKind explicitBuiltin( const char * str_r );
+      /** \overload */
+      static ResKind explicitBuiltin( const std::string & str_r )
+      { return explicitBuiltin( str_r.c_str() ); }
+      /** \overload */
+      static ResKind explicitBuiltin( const IdString & str_r )
+      { return explicitBuiltin( str_r.c_str() ); }
+
     public:
       /** Default ctor: \ref nokind */
       ResKind() {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/base/Backtrace.cc 
new/libzypp-14.16.1/zypp/base/Backtrace.cc
--- old/libzypp-14.14.0/zypp/base/Backtrace.cc  2013-03-20 09:29:30.000000000 
+0100
+++ new/libzypp-14.16.1/zypp/base/Backtrace.cc  2014-02-25 22:16:52.000000000 
+0100
@@ -28,18 +28,21 @@
     void *array[arraySize];
     size_t size = ::backtrace( array, arraySize );
 
-    // print out all the frames to stderr
+    // Print out all frames to stderr. Separate sigsegvHandler stack
+    // [dumpBacktrace][sigsegvHandler][libc throwing] from actual
+    // code stack.
     char ** messages = ::backtrace_symbols( array, size );
     if ( messages )
     {
-      static const size_t first = 1;
+      static const size_t handlerStack = 3; // 
[dumpBacktrace][sigsegvHandler][libc throwing]
+      static const size_t first = 0;
       for ( size_t i = first; i < size; ++i )
       {
        char * mangled_name = 0;
        char * offset_begin = 0;
        char * offset_end = 0;
 
-       // find parantheses and +address offset surrounding mangled name
+       // find parentheses and +address offset surrounding mangled name
        for ( char * p = messages[i]; *p; ++p )
        {
          if ( *p == '(' )
@@ -57,8 +60,14 @@
          }
        }
 
+       int btLevel = i-handlerStack; // negative level in sigsegvHandler
        if ( i > first )
+       {
          stream_r << endl;
+         if ( btLevel == 0 )
+           stream_r << "vvvvvvvvvv----------------------------------------" << 
endl;
+       }
+       stream_r << "[" << (btLevel<0 ?"hd":"bt") << "]: (" << btLevel << ") ";
 
        // if the line could be processed, attempt to demangle the symbol
        if ( mangled_name && offset_begin && offset_end && mangled_name < 
offset_begin )
@@ -73,22 +82,19 @@
          // if demangling is successful, output the demangled function name
          if ( status == 0 )
          {
-           stream_r << "[bt]: (" << i << ") " << messages[i] << " : "
-           << real_name << "+" << offset_begin << offset_end;
-
+           stream_r << messages[i] << " : " << real_name << "+" << 
offset_begin << offset_end;
          }
          // otherwise, output the mangled function name
          else
          {
-           stream_r << "[bt]: (" << i << ") " << messages[i] << " : "
-           << mangled_name << "+" << offset_begin << offset_end;
+           stream_r << messages[i] << " : " << mangled_name << "+" << 
offset_begin << offset_end;
          }
          ::free( real_name );
        }
        else
        {
          // otherwise, print the whole line
-         stream_r << "[bt]: (" << i << ") " << messages[i];
+         stream_r << messages[i];
        }
       }
       ::free( messages );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/base/String.h 
new/libzypp-14.16.1/zypp/base/String.h
--- old/libzypp-14.14.0/zypp/base/String.h      2014-02-11 21:24:54.000000000 
+0100
+++ new/libzypp-14.16.1/zypp/base/String.h      2014-02-23 21:56:52.000000000 
+0100
@@ -727,26 +727,48 @@
     ///////////////////////////////////////////////////////////////////
     /** \name Indent. */
     //@{
-      /** Indent by string ["  "]
-       * Prints nothing for an empty string. Asserts a trainling '\n' on the 
last line.
+      /** Indent by string ["  "] optionally wrap.
+       * Prints nothing for an empty string. Asserts a trainling '\n' on
+       * the last line. Optionally wrap lines at ' ' at a given length.
        */
-      inline std::ostream & printIndented( std::ostream & str, const 
std::string & text_r, const std::string & indent_r = "  " )
+      inline std::ostream & printIndented( std::ostream & str, const 
std::string & text_r, const std::string & indent_r = "  ", unsigned maxWitdh_r 
= 0 )
       {
-       for ( const char * e = text_r.c_str(); *e; ++e )
+       if ( maxWitdh_r )
+       {
+         if ( indent_r.size() >= maxWitdh_r )
+           maxWitdh_r = 0;     // nonsense: indent larger than line witdh
+         else
+           maxWitdh_r -= indent_r.size();
+       }
+       unsigned width = 0;
+       for ( const char * e = text_r.c_str(), * s = e; *e; s = ++e )
        {
-         const char * s = e;
          for ( ; *e && *e != '\n'; ++e ) ;/*searching*/
+         width = e-s;
+         if ( maxWitdh_r && width > maxWitdh_r )
+         {
+           // must break line
+           width = maxWitdh_r;
+           for ( e = s+width; e > s && *e != ' '; --e ) ;/*searching*/
+           if ( e > s )
+             width = e-s;      // on a ' ', replaced by '\n'
+           else
+             e = s+width-1;    // cut line;
+         }
          str << indent_r;
-         str.write( s, e-s );
+         str.write( s, width );
          str << "\n";
          if ( !*e )    // on '\0'
            break;
        }
        return str;
       }
-      /** \overload Indent by number of chars [' '] */
-      inline std::ostream & printIndented( std::ostream & str, const 
std::string & text_r, unsigned indent_r, char indentch_r = ' ' )
-      { return printIndented( str, text_r, std::string( indent_r, indentch_r ) 
); }
+      /** \overload Indent by number of chars [' '] optionally wrap. */
+      inline std::ostream & printIndented( std::ostream & str, const 
std::string & text_r, unsigned indent_r, char indentch_r = ' ', unsigned 
maxWitdh_r = 0 )
+      { return printIndented( str, text_r, std::string( indent_r, indentch_r 
), maxWitdh_r ); }
+      /** \overload Indent by number of chars [' '] wrap. */
+      inline std::ostream & printIndented( std::ostream & str, const 
std::string & text_r, unsigned indent_r, unsigned maxWitdh_r, char indentch_r = 
' ' )
+      { return printIndented( str, text_r, std::string( indent_r, indentch_r 
), maxWitdh_r ); }
 
       /** Prefix lines by string computed by function taking line begin/end 
[std::string(const char*, const char*)]
        * Prints nothing for an empty string. Asserts a trainling '\n' on the 
last line.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/media/MediaCD.cc 
new/libzypp-14.16.1/zypp/media/MediaCD.cc
--- old/libzypp-14.14.0/zypp/media/MediaCD.cc   2013-03-20 09:29:30.000000000 
+0100
+++ new/libzypp-14.16.1/zypp/media/MediaCD.cc   2014-02-26 15:08:52.000000000 
+0100
@@ -41,7 +41,7 @@
 /*
 ** if to throw exception on eject errors or ignore them
 */
-#define  REPORT_EJECT_ERRORS     1
+#define  REPORT_EJECT_ERRORS     0
 
 /*
 ** If defined to the full path of the eject utility,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/sat/Solvable.cc 
new/libzypp-14.16.1/zypp/sat/Solvable.cc
--- old/libzypp-14.14.0/zypp/sat/Solvable.cc    2014-01-29 10:28:53.000000000 
+0100
+++ new/libzypp-14.16.1/zypp/sat/Solvable.cc    2014-02-25 13:44:53.000000000 
+0100
@@ -43,7 +43,7 @@
         if ( ! _ident )
           return;
 
-       ResKind explicitKind = Solvable::SplitIdent::explicitKind( 
_ident.c_str() );
+       ResKind explicitKind = ResKind::explicitBuiltin( _ident.c_str() );
        // NOTE: kind package and srcpackage do not have namespaced ident!
        if ( ! explicitKind  )
        {
@@ -51,7 +51,7 @@
          // No kind defaults to package
          if ( !_kind )
            _kind = ResKind::package;
-         if ( ! ( _kind == ResKind::package || _kind == ResKind::srcpackage ) )
+         else if ( ! ( _kind == ResKind::package || _kind == 
ResKind::srcpackage ) )
            _ident = IdString( str::form( "%s:%s", _kind.c_str(), 
_ident.c_str() ) );
        }
        else
@@ -88,33 +88,6 @@
     , _kind( kind_r )
     { _doSplit( _ident, _kind, _name ); }
 
-    ResKind Solvable::SplitIdent::explicitKind( const char * ident_r )
-    {
-      if ( ! ident_r )
-       return ResKind();
-
-      const char * sep = ::strchr( ident_r, ':' );
-      if ( ! sep )
-       return ResKind();
-
-      ResKind ret;
-      if ( sep-ident_r >= 4 )
-      {
-       switch ( ident_r[3] )
-       {
-         #define OUTS(K,S) if ( !::strncmp( ident_r, ResKind::K.c_str(), S ) 
&& ident_r[S] == ':' ) ret = ResKind::K
-         //             ----v
-         case 'c': OUTS( patch, 5 );       break;
-         case 'd': OUTS( product, 7 );     break;
-         case 'k': OUTS( package, 7 );     break;
-         case 'p': OUTS( srcpackage, 10 ); break;
-         case 't': OUTS( pattern, 7 );     break;
-         #undef OUTS
-       }
-      }
-      return ret;
-    }
-
     /////////////////////////////////////////////////////////////////
 
     const Solvable Solvable::noSolvable;
@@ -307,30 +280,18 @@
           break;
       }
 
+      // either explicitly prefixed...
       const char * ident = IdString( _solvable->name ).c_str();
-      const char * sep = ::strchr( ident, ':' );
+      ResKind knownKind( ResKind::explicitBuiltin( ident ) );
+      if ( knownKind )
+       return knownKind;
 
-      // no ':' in package names (hopefully)
+      // ...or no ':' in package names (hopefully)...
+      const char * sep = ::strchr( ident, ':' );
       if ( ! sep )
-        return ResKind::package;
-
-      // quick check for well known kinds
-      if ( sep-ident >= 4 )
-      {
-        switch ( ident[3] )
-        {
-#define OUTS(K,S) if ( !::strncmp( ident, ResKind::K.c_str(), S ) ) return 
ResKind::K
-          //             ----v
-          case 'c': OUTS( patch, 5 );       break;
-          case 'd': OUTS( product, 7 );     break;
-          case 'k': OUTS( package, 7 );     break;
-          case 'p': OUTS( srcpackage, 10 ); break;
-          case 't': OUTS( pattern, 7 );     break;
-#undef OUTS
-        }
-      }
+       return ResKind::package;
 
-      // an unknown kind
+      // ...or something unknown.
       return ResKind( std::string( ident, sep-ident ) );
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/sat/Solvable.h 
new/libzypp-14.16.1/zypp/sat/Solvable.h
--- old/libzypp-14.14.0/zypp/sat/Solvable.h     2014-01-29 10:28:53.000000000 
+0100
+++ new/libzypp-14.16.1/zypp/sat/Solvable.h     2014-02-25 13:44:53.000000000 
+0100
@@ -275,14 +275,6 @@
             ResKind  kind()  const { return _kind; }
             IdString name()  const { return _name; }
 
-           /** Return an idents explicit kind prefix, or \ref ResKind() if 
none.
-            * Mainly to detect whether a given ident string is explicitly 
prefixed
-            * by a known kind (e.g \c pattern:foo or \c package:foo).
-            */
-           static ResKind explicitKind( IdString ident_r )             { 
return explicitKind( ident_r.c_str() );  }
-           static ResKind explicitKind( const char * ident_r );
-           static ResKind explicitKind( const std::string & ident_r )  { 
return explicitKind( ident_r.c_str() );  }
-
           private:
             IdString  _ident;
             ResKind   _kind;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/target/RpmPostTransCollector.h 
new/libzypp-14.16.1/zypp/target/RpmPostTransCollector.h
--- old/libzypp-14.14.0/zypp/target/RpmPostTransCollector.h     2014-01-25 
17:08:52.000000000 +0100
+++ new/libzypp-14.16.1/zypp/target/RpmPostTransCollector.h     2014-02-26 
13:32:53.000000000 +0100
@@ -17,9 +17,6 @@
 #include "zypp/ManagedFile.h"
 #include "zypp/Pathname.h"
 
-#undef  ZYPP_BASE_LOGGER_LOGGROUP
-#define ZYPP_BASE_LOGGER_LOGGROUP "zypp:posttrans"
-
 ///////////////////////////////////////////////////////////////////
 namespace zypp
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libzypp-14.14.0/zypp/target/TargetImpl.commitFindFileConflicts.cc 
new/libzypp-14.16.1/zypp/target/TargetImpl.commitFindFileConflicts.cc
--- old/libzypp-14.14.0/zypp/target/TargetImpl.commitFindFileConflicts.cc       
2014-01-24 08:44:53.000000000 +0100
+++ new/libzypp-14.16.1/zypp/target/TargetImpl.commitFindFileConflicts.cc       
2014-02-23 21:56:52.000000000 +0100
@@ -65,7 +65,7 @@
          {
            //DBG << "FCCB: " << sat::Solvable( id_r ) << " " << ret << endl;
            _visited.insert( id_r );
-           if ( ! ret )
+           if ( ! ret && sat::Solvable( id_r ).isKind<Package>() )     // only 
packages have filelists
              _noFilelist.push( id_r );
            _progress.incr();
          }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/target/rpm/RpmHeader.cc 
new/libzypp-14.16.1/zypp/target/rpm/RpmHeader.cc
--- old/libzypp-14.14.0/zypp/target/rpm/RpmHeader.cc    2014-01-25 
17:08:52.000000000 +0100
+++ new/libzypp-14.16.1/zypp/target/rpm/RpmHeader.cc    2014-02-21 
13:20:53.000000000 +0100
@@ -427,6 +427,32 @@
       kindFlags   = RPMTAG_CONFLICTFLAGS;
       kindVersion = RPMTAG_CONFLICTVERSION;
       break;
+#ifdef RPMTAG_OLDSUGGESTS
+    case RPMTAG_OLDENHANCESNAME:
+      kindFlags   = RPMTAG_OLDENHANCESFLAGS;
+      kindVersion = RPMTAG_OLDENHANCESVERSION;
+      break;
+    case RPMTAG_OLDSUGGESTSNAME:
+      kindFlags   = RPMTAG_OLDSUGGESTSFLAGS;
+      kindVersion = RPMTAG_OLDSUGGESTSVERSION;
+      break;
+    case RPMTAG_RECOMMENDNAME:
+      kindFlags   = RPMTAG_RECOMMENDFLAGS;
+      kindVersion = RPMTAG_RECOMMENDVERSION;
+      break;
+    case RPMTAG_SUPPLEMENTNAME:
+      kindFlags   = RPMTAG_SUPPLEMENTFLAGS;
+      kindVersion = RPMTAG_SUPPLEMENTVERSION;
+      break;
+    case RPMTAG_SUGGESTNAME:
+      kindFlags   = RPMTAG_SUGGESTFLAGS;
+      kindVersion = RPMTAG_SUGGESTVERSION;
+      break;
+    case RPMTAG_ENHANCENAME:
+      kindFlags   = RPMTAG_ENHANCEFLAGS;
+      kindVersion = RPMTAG_ENHANCEVERSION;
+      break;
+#else
     case RPMTAG_ENHANCESNAME:
       kindFlags   = RPMTAG_ENHANCESFLAGS;
       kindVersion = RPMTAG_ENHANCESVERSION;
@@ -435,6 +461,7 @@
       kindFlags   = RPMTAG_SUGGESTSFLAGS;
       kindVersion = RPMTAG_SUGGESTSVERSION;
       break;
+#endif
     default:
       INT << "Illegal RPMTAG_dependencyNAME " << tag_r << endl;
       return ret;
@@ -586,7 +613,11 @@
 //
 CapabilitySet RpmHeader::tag_enhances( std::set<std::string> * freq_r ) const
   {
+#ifdef RPMTAG_OLDSUGGESTS
+    return PkgRelList_val( RPMTAG_ENHANCENAME, false, freq_r );
+#else
     return PkgRelList_val( RPMTAG_ENHANCESNAME, false, freq_r );
+#endif
   }
 
 ///////////////////////////////////////////////////////////////////
@@ -599,7 +630,45 @@
 //
 CapabilitySet RpmHeader::tag_suggests( std::set<std::string> * freq_r ) const
   {
+#ifdef RPMTAG_OLDSUGGESTS
+    return PkgRelList_val( RPMTAG_SUGGESTNAME, false, freq_r );
+#else
     return PkgRelList_val( RPMTAG_SUGGESTSNAME, false, freq_r );
+#endif
+  }
+
+///////////////////////////////////////////////////////////////////
+//
+//
+//        METHOD NAME : RpmHeader::tag_supplements
+//        METHOD TYPE : CapabilitySet
+//
+//        DESCRIPTION :
+//
+CapabilitySet RpmHeader::tag_supplements( std::set<std::string> * freq_r ) 
const
+  {
+#ifdef RPMTAG_OLDSUGGESTS
+    return PkgRelList_val( RPMTAG_SUPPLEMENTNAME, false, freq_r );
+#else
+    return CapabilitySet();
+#endif
+  }
+
+///////////////////////////////////////////////////////////////////
+//
+//
+//        METHOD NAME : RpmHeader::tag_recommends
+//        METHOD TYPE : CapabilitySet
+//
+//        DESCRIPTION :
+//
+CapabilitySet RpmHeader::tag_recommends( std::set<std::string> * freq_r ) const
+  {
+#ifdef RPMTAG_OLDSUGGESTS
+    return PkgRelList_val( RPMTAG_RECOMMENDNAME, false, freq_r );
+#else
+    return CapabilitySet();
+#endif
   }
 
 ///////////////////////////////////////////////////////////////////
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-14.14.0/zypp/target/rpm/RpmHeader.h 
new/libzypp-14.16.1/zypp/target/rpm/RpmHeader.h
--- old/libzypp-14.14.0/zypp/target/rpm/RpmHeader.h     2014-01-25 
17:08:52.000000000 +0100
+++ new/libzypp-14.16.1/zypp/target/rpm/RpmHeader.h     2014-02-21 
13:20:53.000000000 +0100
@@ -125,11 +125,14 @@
    * @see #tag_provides
    **/
   CapabilitySet tag_suggests( std::set<std::string> * freq_r = 0 ) const;
-  /** Unsupported by rpm.
+  /**
    * @see #tag_provides
    **/
-  CapabilitySet tag_supplements( std::set<std::string> * freq_r = 0 ) const
-  { return CapabilitySet(); }
+  CapabilitySet tag_supplements( std::set<std::string> * freq_r = 0 ) const;
+  /**
+   * @see #tag_provides
+   **/
+  CapabilitySet tag_recommends( std::set<std::string> * freq_r = 0 ) const;
 
   ByteCount tag_size()        const;
   ByteCount tag_archivesize() const;

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to