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 - ma@suse.de + +- Ignore failed-eject-exception on media change (bnc#865705) +- version 14.16.1 (16) + +------------------------------------------------------------------- +Tue Feb 25 13:42:13 CET 2014 - ma@suse.de + +- 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 - ma@suse.de + +- 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 - ma@suse.de + +- Ignore failed-eject-exception on media change (bnc#865705) +- version 14.16.1 (16) + +------------------------------------------------------------------- +Tue Feb 25 13:42:13 CET 2014 - ma@suse.de + +- 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 - ma@suse.de + +- 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 - ma@suse.de - 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: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org