Hello community, here is the log from the commit of package libzypp for openSUSE:Factory checked in at 2011-12-27 18:37:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libzypp (Old) and /work/SRC/openSUSE:Factory/.libzypp.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libzypp", Maintainer is "m...@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes 2011-12-07 21:41:07.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.libzypp.new/libzypp.changes 2011-12-27 18:37:53.000000000 +0100 @@ -1,0 +2,10 @@ +Fri Dec 23 14:51:25 CET 2011 - m...@suse.de + +- Adapt Repository iteration to libsolv changes. +- Add sat::Pool tests +- Fix Flags<> api to be more consistent and add testcase. +- Set min_curl_version 7.19.4 (bnc#735284) +- Doc: add some words about 'Solver - Vendor protection' +- version 11.0.0 (0) + +------------------------------------------------------------------- Old: ---- libzypp-10.3.5.tar.bz2 New: ---- libzypp-11.0.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libzypp.spec ++++++ --- /var/tmp/diff_new_pack.HOeoyU/_old 2011-12-27 18:37:56.000000000 +0100 +++ /var/tmp/diff_new_pack.HOeoyU/_new 2011-12-27 18:37:56.000000000 +0100 @@ -23,7 +23,7 @@ Group: System/Packages BuildRoot: %{_tmppath}/%{name}-%{version}-build Summary: Package, Patch, Pattern, and Product Management -Version: 10.3.5 +Version: 11.0.0 Release: 1 Source: %{name}-%{version}.tar.bz2 Source1: %{name}-rpmlintrc @@ -104,20 +104,7 @@ Requires: gnupg2 %endif -# --------------------------------------------------------------- -%if 0%{?suse_version} >= 1110 -# (almost) common codebase, but on SLES11-SP1 (according to Rudi -# suse_version == 1110) we have a patched libcurl-7.19.0-11.22, -# and no aria2. Furthermore SLE may use it's own set of .po files -# from po/sle-zypp-po.tar.bz2. - -# this check should use 7.19.0 if SLE and 7.19.4 if not (backported -# CURLOPT_REDIR_PROTOCOLS) -%define min_curl_version 7.19.0-11.22 -%endif - -# --------------------------------------------------------------- - +%define min_curl_version 7.19.4 %if 0%{?suse_version} %if 0%{?suse_version} >= 1100 # Code11+ ++++++ libzypp-10.3.5.tar.bz2 -> libzypp-11.0.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/VERSION.cmake new/libzypp-11.0.0/VERSION.cmake --- old/libzypp-10.3.5/VERSION.cmake 2011-12-06 13:11:17.000000000 +0100 +++ new/libzypp-11.0.0/VERSION.cmake 2011-12-23 15:04:41.000000000 +0100 @@ -58,11 +58,11 @@ # - Consider calling ./mkChangelog to assist you. # See './mkChangelog -h' for help. # -SET(LIBZYPP_MAJOR "10") -SET(LIBZYPP_COMPATMINOR "3") -SET(LIBZYPP_MINOR "3") -SET(LIBZYPP_PATCH "5") +SET(LIBZYPP_MAJOR "11") +SET(LIBZYPP_COMPATMINOR "0") +SET(LIBZYPP_MINOR "0") +SET(LIBZYPP_PATCH "0") # -# LAST RELEASED: 10.3.5 (3) +# LAST RELEASED: 11.0.0 (0) # (The number in parenthesis is LIBZYPP_COMPATMINOR) #======= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/libzypp.spec.cmake new/libzypp-11.0.0/libzypp.spec.cmake --- old/libzypp-10.3.5/libzypp.spec.cmake 2011-12-06 13:11:17.000000000 +0100 +++ new/libzypp-11.0.0/libzypp.spec.cmake 2011-12-23 15:04:41.000000000 +0100 @@ -104,20 +104,7 @@ Requires: gnupg2 %endif -# --------------------------------------------------------------- -%if 0%{?suse_version} >= 1110 -# (almost) common codebase, but on SLES11-SP1 (according to Rudi -# suse_version == 1110) we have a patched libcurl-7.19.0-11.22, -# and no aria2. Furthermore SLE may use it's own set of .po files -# from po/sle-zypp-po.tar.bz2. - -# this check should use 7.19.0 if SLE and 7.19.4 if not (backported -# CURLOPT_REDIR_PROTOCOLS) -%define min_curl_version 7.19.0-11.22 -%endif - -# --------------------------------------------------------------- - +%define min_curl_version 7.19.4 %if 0%{?suse_version} %if 0%{?suse_version} >= 1100 # Code11+ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/mkChangelog new/libzypp-11.0.0/mkChangelog --- old/libzypp-10.3.5/mkChangelog 2011-12-06 13:11:17.000000000 +0100 +++ new/libzypp-11.0.0/mkChangelog 2011-12-23 15:04:41.000000000 +0100 @@ -107,7 +107,7 @@ echo "" } -git status --porcelain | grep '^[^ ]' | grep -v "$VERSIONFILE\|$CHANGESFILE" && { +git status --porcelain | grep '^[^ ?]' | grep -v "$VERSIONFILE\|$CHANGESFILE" && { Becho "!!! Files other than version and changes are added to the index." Becho "!!! Doing dryrun..." DRYRUN=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/package/libzypp.changes new/libzypp-11.0.0/package/libzypp.changes --- old/libzypp-10.3.5/package/libzypp.changes 2011-12-06 13:11:17.000000000 +0100 +++ new/libzypp-11.0.0/package/libzypp.changes 2011-12-23 15:04:41.000000000 +0100 @@ -1,4 +1,14 @@ ------------------------------------------------------------------- +Fri Dec 23 14:51:25 CET 2011 - m...@suse.de + +- Adapt Repository iteration to libsolv changes. +- Add sat::Pool tests +- Fix Flags<> api to be more consistent and add testcase. +- Set min_curl_version 7.19.4 (bnc#735284) +- Doc: add some words about 'Solver - Vendor protection' +- version 11.0.0 (0) + +------------------------------------------------------------------- Thu Dec 1 01:13:37 CET 2011 - m...@suse.de - Update zypp-po.tar.bz2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/tests/sat/CMakeLists.txt new/libzypp-11.0.0/tests/sat/CMakeLists.txt --- old/libzypp-10.3.5/tests/sat/CMakeLists.txt 2011-12-06 13:11:17.000000000 +0100 +++ new/libzypp-11.0.0/tests/sat/CMakeLists.txt 2011-12-23 15:04:41.000000000 +0100 @@ -2,6 +2,13 @@ # to find the KeyRingTest receiver INCLUDE_DIRECTORIES( ${LIBZYPP_SOURCE_DIR}/tests/zypp ) -ADD_TESTS(Solvable SolvParsing WhatProvides WhatObsoletes LookupAttr AttrMatcher IdString) - - +ADD_TESTS( + AttrMatcher + IdString + LookupAttr + Pool + Solvable + SolvParsing + WhatObsoletes + WhatProvides +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/tests/sat/LookupAttr_test.cc new/libzypp-11.0.0/tests/sat/LookupAttr_test.cc --- old/libzypp-10.3.5/tests/sat/LookupAttr_test.cc 2011-12-06 13:11:17.000000000 +0100 +++ new/libzypp-11.0.0/tests/sat/LookupAttr_test.cc 2011-12-23 15:04:41.000000000 +0100 @@ -8,11 +8,6 @@ // Must be the first test! BOOST_AUTO_TEST_CASE(bnc_435838) { - // On the fly check that findSystemRepo does not - // cause loading the SystemRepo. check 2 times. - BOOST_REQUIRE( ! test.satpool().findSystemRepo() ); - BOOST_REQUIRE( ! test.satpool().findSystemRepo() ); - // empty @system to pool test.satpool().systemRepo(); BOOST_REQUIRE( test.satpool().findSystemRepo() ); @@ -25,7 +20,7 @@ BOOST_AUTO_TEST_CASE(LookupAttr_init) { - test.loadTarget(); // initialize and load target + //test.loadTarget(); // initialize and load target test.loadRepo( TESTS_SRC_DIR "/data/openSUSE-11.1" ); test.loadRepo( TESTS_SRC_DIR "/data/obs_virtualbox_11_1" ); test.loadRepo( TESTS_SRC_DIR "/data/11.0-update" ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/tests/sat/Pool_test.cc new/libzypp-11.0.0/tests/sat/Pool_test.cc --- old/libzypp-10.3.5/tests/sat/Pool_test.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/libzypp-11.0.0/tests/sat/Pool_test.cc 2011-12-23 15:04:41.000000000 +0100 @@ -0,0 +1,93 @@ +#include "TestSetup.h" +#include <zypp/Repository.h> +#include <zypp/sat/Pool.h> + +static TestSetup test( Arch_x86_64 ); + +namespace zypp { namespace detail { + /** \relates RepositoryIterator Stream output */ + inline std::ostream & operator<<( std::ostream & str, const RepositoryIterator & obj ) + { + str << "RI["<< *obj <<"]"; + return str; + } +}} + +// Must be the first test! +BOOST_AUTO_TEST_CASE(findSystemRepo) +{ + // On the fly check that findSystemRepo does not + // cause loading the SystemRepo. check 2 times. + BOOST_REQUIRE( ! test.satpool().findSystemRepo() ); + BOOST_REQUIRE( ! test.satpool().findSystemRepo() ); +} + +unsigned checkRepoIter() +{ + sat::Pool satpool( test.satpool() ); + sat::Pool::size_type count = satpool.reposSize(); + for_( it, satpool.reposBegin(), satpool.reposEnd() ) + { + cout << "- " << count << " " << *it << endl; + BOOST_CHECK( *it ); + --count; + } + BOOST_CHECK_EQUAL( count, 0 ); +} + + +BOOST_AUTO_TEST_CASE(repolist) +{ + // libzypp-11: underlying libsolv changed the pools repository + // pointer list. It may now contain emebeded NULLs which have + // to be skipped when iterating the repos. + // + sat::Pool satpool( test.satpool() ); + BOOST_CHECK( satpool.reposEmpty() ); + BOOST_CHECK_EQUAL( satpool.reposSize(), 0 ); + checkRepoIter(); + + // empty @system to pool + test.satpool().systemRepo(); + BOOST_REQUIRE( satpool.findSystemRepo() ); + BOOST_CHECK( !satpool.reposEmpty() ); + BOOST_CHECK_EQUAL( satpool.reposSize(), 1 ); + checkRepoIter(); + + test.loadRepo( TESTS_SRC_DIR "/data/obs_virtualbox_11_1" ); + BOOST_CHECK( !satpool.reposEmpty() ); + BOOST_CHECK_EQUAL( satpool.reposSize(), 2 ); + checkRepoIter(); + + test.loadRepo( TESTS_SRC_DIR "/data/11.0-update" ); + BOOST_CHECK( !satpool.reposEmpty() ); + BOOST_CHECK_EQUAL( satpool.reposSize(), 3 ); + checkRepoIter(); + + satpool.reposErase( ":obs_virtualbox_11_1" ); + BOOST_CHECK( !satpool.reposEmpty() ); + BOOST_CHECK_EQUAL( satpool.reposSize(), 2 ); + checkRepoIter(); + + satpool.reposErase( ":11.0-update" ); + test.loadRepo( TESTS_SRC_DIR "/data/openSUSE-11.1" ); + BOOST_CHECK( !satpool.reposEmpty() ); + BOOST_CHECK_EQUAL( satpool.reposSize(), 2 ); + checkRepoIter(); + + + +/* for_( it, satpool.reposBegin(), satpool.reposEnd() ) + { + cout << "- " << *it << endl; + }*/ + //test.loadRepo( TESTS_SRC_DIR "/data/openSUSE-11.1" ); +} + +#if 0 +BOOST_AUTO_TEST_CASE(LookupAttr_) +{ + base::LogControl::TmpLineWriter shutUp( new log::FileLineWriter( "/tmp/YLOG" ) ); + MIL << "GO" << endl; +} +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/tests/zypp/CMakeLists.txt new/libzypp-11.0.0/tests/zypp/CMakeLists.txt --- old/libzypp-10.3.5/tests/zypp/CMakeLists.txt 2011-12-06 13:11:18.000000000 +0100 +++ new/libzypp-11.0.0/tests/zypp/CMakeLists.txt 2011-12-23 15:04:41.000000000 +0100 @@ -16,6 +16,7 @@ Edition Fetcher FileChecker + Flags InstanceId KeyRing Locks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/tests/zypp/Flags_test.cc new/libzypp-11.0.0/tests/zypp/Flags_test.cc --- old/libzypp-10.3.5/tests/zypp/Flags_test.cc 1970-01-01 01:00:00.000000000 +0100 +++ new/libzypp-11.0.0/tests/zypp/Flags_test.cc 2011-12-23 15:04:41.000000000 +0100 @@ -0,0 +1,83 @@ +// +// tests for Flags +// +#include <boost/test/auto_unit_test.hpp> +#include "zypp/base/Logger.h" +#include "zypp/base/Flags.h" + +using boost::unit_test::test_case; +using std::cout; +using std::endl; +using namespace zypp; + +enum TBits +{ + T_0 = 0, + T_1 = 1 << 0, + T_2 = 1 << 1, + T_3 = T_2 | T_1, + T_4 = 1 << 2, + T_5 = T_4 | T_1, + T_8 = 1 << 3, +}; + +ZYPP_DECLARE_FLAGS( TFlags, TBits ); +ZYPP_DECLARE_OPERATORS_FOR_FLAGS( TFlags ); + +static const TFlags T_6( T_4 | T_2 ); +static const TFlags T_7( T_4 | T_2 | T_1 ); + +BOOST_AUTO_TEST_CASE(flags) +{ + TFlags t0; + BOOST_CHECK_EQUAL( t0, 0 ); + BOOST_CHECK_EQUAL( t0, T_0 ); + BOOST_CHECK_EQUAL( t0, TFlags(0) ); + BOOST_CHECK_EQUAL( ~t0, ~0 ); + BOOST_CHECK_EQUAL( ~~t0, 0 ); + BOOST_CHECK_EQUAL( ~t0, ~T_0 ); + BOOST_CHECK_EQUAL( ~~t0, T_0 ); + + TFlags t1( T_1 ); + BOOST_CHECK_EQUAL( t1, 1 ); + BOOST_CHECK_EQUAL( t1, T_1 ); + BOOST_CHECK_EQUAL( t1, TFlags(1) ); + + TFlags t; + // t = 1; // must not compile: assign from int_type + t = T_2; // = enum + BOOST_CHECK_EQUAL( t, T_2 ); + t = T_6; // = TFlags + BOOST_CHECK_EQUAL( t, T_6 ); + + // enum op enum + t = ~T_1; BOOST_CHECK_EQUAL( ~t, T_1 ); + t = T_1 & T_2; BOOST_CHECK_EQUAL( t, T_0 ); + t = T_1 | T_2; BOOST_CHECK_EQUAL( t, T_3 ); + t = T_1 ^ T_2; BOOST_CHECK_EQUAL( t, T_3 ); + + // enum op TFlags + t = T_2 & T_6; BOOST_CHECK_EQUAL( t, T_2 ); + t = T_2 | T_6; BOOST_CHECK_EQUAL( t, T_6 ); + t = T_2 ^ T_6; BOOST_CHECK_EQUAL( t, T_4 ); + + // TFlags op enum + t = ~T_7; BOOST_CHECK_EQUAL( ~t, T_7 ); + t = T_7 & T_2; BOOST_CHECK_EQUAL( t, T_2 ); + t = T_7 | T_2; BOOST_CHECK_EQUAL( t, T_7 ); + t = T_7 ^ T_2; BOOST_CHECK_EQUAL( t, T_5 ); + + // TFlags op enum + t = T_7 & T_6; BOOST_CHECK_EQUAL( t, T_6 ); + t = T_7 | T_6; BOOST_CHECK_EQUAL( t, T_7 ); + t = T_7 ^ T_7; BOOST_CHECK_EQUAL( t, T_0 ); + + + t = T_3; + BOOST_CHECK( t.testFlag( T_1 ) ); + BOOST_CHECK( t.testFlag( T_2 ) ); + BOOST_CHECK( t.testFlag( T_3 ) ); + t.unsetFlag( T_2 ); BOOST_CHECK( t.testFlag( T_1 ) ); + t.setFlag( T_1, false ); BOOST_CHECK( t.testFlag( T_0 ) ); + t.setFlag( T_3, true ); BOOST_CHECK( t.testFlag( T_3 ) ); +} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/zypp/Repository.cc new/libzypp-11.0.0/zypp/Repository.cc --- old/libzypp-10.3.5/zypp/Repository.cc 2011-12-06 13:11:18.000000000 +0100 +++ new/libzypp-11.0.0/zypp/Repository.cc 2011-12-23 15:04:43.000000000 +0100 @@ -308,6 +308,22 @@ << "}"; } + ////////////////////////////////////////////////////////////////// + namespace detail + { + void RepositoryIterator::increment() + { + if ( base() ) + { + ::_Pool * satpool = sat::Pool::instance().get(); + do { + ++base_reference(); + } while ( !*base() && base() < satpool->repos+satpool->nrepos ); + } + } + } // namespace detail + ////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// // // Repository::ProductInfoIterator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/zypp/Repository.h new/libzypp-11.0.0/zypp/Repository.h --- old/libzypp-10.3.5/zypp/Repository.h 2011-12-06 13:11:18.000000000 +0100 +++ new/libzypp-11.0.0/zypp/Repository.h 2011-12-23 15:04:43.000000000 +0100 @@ -418,6 +418,8 @@ Repository dereference() const { return Repository( *base() ); } + + void increment(); }; /////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/zypp/base/Flags.h new/libzypp-11.0.0/zypp/base/Flags.h --- old/libzypp-10.3.5/zypp/base/Flags.h 2011-12-06 13:11:18.000000000 +0100 +++ new/libzypp-11.0.0/zypp/base/Flags.h 2011-12-23 15:04:43.000000000 +0100 @@ -63,7 +63,7 @@ public: Flags() : _val( 0 ) {} Flags( Enum flag_r ) : _val( flag_r ) {} - Flags( unsigned flag_r ) : _val( flag_r ) {} + explicit Flags( unsigned flag_r ) : _val( flag_r ) {} Flags & operator&=( Flags rhs ) { _val &= rhs._val; return *this; } Flags & operator&=( Enum rhs ) { _val &= rhs; return *this; } @@ -89,13 +89,17 @@ Flags operator~() const { return Flags( ~_val ); } public: - Flags & setFlag( Enum flag_r, bool newval_r ) - { return( newval_r ? setFlag(flag_r) : unsetFlag(flag_r) ); } + Flags & setFlag( Flags flag_r, bool newval_r ) { return( newval_r ? setFlag(flag_r) : unsetFlag(flag_r) ); } + Flags & setFlag( Enum flag_r, bool newval_r ) { return( newval_r ? setFlag(flag_r) : unsetFlag(flag_r) ); } - Flags & setFlag( Enum flag_r ) { _val |= flag_r; return *this; } - Flags & unsetFlag( Enum flag_r ) { _val &= ~flag_r; return *this; } + Flags & setFlag( Flags flag_r ) { _val |= flag_r; return *this; } + Flags & setFlag( Enum flag_r ) { _val |= flag_r; return *this; } - bool testFlag( Enum flag_r ) const { return _val & flag_r; } + Flags & unsetFlag( Flags flag_r ) { _val &= ~flag_r; return *this; } + Flags & unsetFlag( Enum flag_r ) { _val &= ~flag_r; return *this; } + + bool testFlag( Flags flag_r ) const { return ( _val & flag_r ) == flag_r; } + bool testFlag( Enum flag_r ) const { return ( _val & flag_r ) == flag_r; } private: unsigned _val; @@ -111,8 +115,13 @@ /** \relates Flags */ #define ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Name) \ -inline Name operator|( Name::enum_type lhs, Name::enum_type rhs ) { return Name( lhs ) |= rhs; } \ -inline Name operator|( Name::enum_type lhs, Name rhs ) { return rhs |= lhs; } +inline Name operator&( Name::enum_type lhs, Name::enum_type rhs ) { return Name( lhs ) &= rhs; } \ +inline Name operator&( Name::enum_type lhs, Name rhs ) { return rhs &= lhs; } \ +inline Name operator|( Name::enum_type lhs, Name::enum_type rhs ) { return Name( lhs ) |= rhs; } \ +inline Name operator|( Name::enum_type lhs, Name rhs ) { return rhs |= lhs; } \ +inline Name operator^( Name::enum_type lhs, Name::enum_type rhs ) { return Name( lhs ) ^= rhs; } \ +inline Name operator^( Name::enum_type lhs, Name rhs ) { return rhs ^= lhs; } \ +inline Name operator~( Name::enum_type lhs ) { return ~Name( lhs ); } /** \relates Flags */ #define ZYPP_DECLARE_FLAGS_AND_OPERATORS(Name,Enum) \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-10.3.5/zypp/sat/Pool.cc new/libzypp-11.0.0/zypp/sat/Pool.cc --- old/libzypp-10.3.5/zypp/sat/Pool.cc 2011-12-06 13:11:18.000000000 +0100 +++ new/libzypp-11.0.0/zypp/sat/Pool.cc 2011-12-23 15:04:43.000000000 +0100 @@ -49,13 +49,21 @@ { return myPool().prepareForSolving(); } bool Pool::reposEmpty() const - { return ! myPool()->nrepos; } + { return ! myPool()->urepos; } Pool::size_type Pool::reposSize() const - { return myPool()->nrepos; } + { return myPool()->urepos; } Pool::RepositoryIterator Pool::reposBegin() const - { return RepositoryIterator( myPool()->repos ); } + { + if ( myPool()->urepos ) + { // repos[0] == NULL + for_( it, myPool()->repos+1, myPool()->repos+myPool()->nrepos ) + if ( *it ) + return RepositoryIterator( it ); + } + return reposEnd(); + } Pool::RepositoryIterator Pool::reposEnd() const { return RepositoryIterator( myPool()->repos+myPool()->nrepos ); } -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org