Hello community, here is the log from the commit of package yast2-pkg-bindings checked in at Wed Jan 9 21:24:06 CET 2008. -------- --- yast2-pkg-bindings/yast2-pkg-bindings.changes 2008-01-04 12:57:16.000000000 +0100 +++ /mounts/work_src_done/STABLE/yast2-pkg-bindings/yast2-pkg-bindings.changes 2008-01-07 16:52:45.859292000 +0100 @@ -1,0 +2,10 @@ +Mon Jan 7 16:40:35 CET 2008 - lslezak@suse.cz + +- added missing "log.h" file in Makefile.am +- added GPG key management functions (FATE 300754): + Pkg::GPGKeys() - get list of the known or trusted GPG keys + Pkg::DeleteGPGKey() - delete the GPG key from the known or + trusted keyring +- 2.16.9 + +------------------------------------------------------------------- Old: ---- yast2-pkg-bindings-2.16.8.tar.bz2 New: ---- yast2-pkg-bindings-2.16.9.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-pkg-bindings-devel-doc.spec ++++++ --- /var/tmp/diff_new_pack.Z24912/_old 2008-01-09 21:23:45.000000000 +0100 +++ /var/tmp/diff_new_pack.Z24912/_new 2008-01-09 21:23:45.000000000 +0100 @@ -1,5 +1,5 @@ # -# spec file for package yast2-pkg-bindings-devel-doc (Version 2.16.8) +# spec file for package yast2-pkg-bindings-devel-doc (Version 2.16.9) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -11,12 +11,12 @@ # norootforbuild Name: yast2-pkg-bindings-devel-doc -Version: 2.16.8 +Version: 2.16.9 Release: 1 License: GPL v2 or later Group: Documentation/HTML BuildRoot: %{_tmppath}/%{name}-%{version}-build -Source0: yast2-pkg-bindings-2.16.8.tar.bz2 +Source0: yast2-pkg-bindings-2.16.9.tar.bz2 Prefix: /usr # same as in the main package (because we use the same configure.in.in) BuildRequires: blocxx-devel boost boost-devel dbus-1-devel docbook-xsl-stylesheets doxygen gcc-c++ hal-devel libgcrypt-devel libxcrypt-devel libxslt libzypp libzypp-devel perl-XML-Writer rpm-devel sgml-skel yast2-core-devel yast2-devtools @@ -37,7 +37,7 @@ Ladislav Slez�k <lslezak@novell.com> %prep -%setup -n yast2-pkg-bindings-2.16.8 +%setup -n yast2-pkg-bindings-2.16.9 # build only documentation, ignore all other directories echo "doc" > SUBDIRS ++++++ yast2-pkg-bindings.spec ++++++ --- /var/tmp/diff_new_pack.Z24912/_old 2008-01-09 21:23:45.000000000 +0100 +++ /var/tmp/diff_new_pack.Z24912/_new 2008-01-09 21:23:45.000000000 +0100 @@ -1,5 +1,5 @@ # -# spec file for package yast2-pkg-bindings (Version 2.16.8) +# spec file for package yast2-pkg-bindings (Version 2.16.9) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -11,12 +11,12 @@ # norootforbuild Name: yast2-pkg-bindings -Version: 2.16.8 +Version: 2.16.9 Release: 1 License: GPL v2 or later Group: System/YaST BuildRoot: %{_tmppath}/%{name}-%{version}-build -Source0: yast2-pkg-bindings-2.16.8.tar.bz2 +Source0: yast2-pkg-bindings-2.16.9.tar.bz2 Prefix: /usr BuildRequires: blocxx-devel boost boost-devel dbus-1-devel docbook-xsl-stylesheets doxygen gcc-c++ hal-devel libgcrypt-devel libxcrypt-devel libxslt perl-XML-Writer rpm-devel sgml-skel yast2-core-devel yast2-devtools BuildRequires: libzypp-devel >= 3.25.0 @@ -40,7 +40,7 @@ Stanislav Visnovsky <visnov@suse.cz> %prep -%setup -n yast2-pkg-bindings-2.16.8 +%setup -n yast2-pkg-bindings-2.16.9 # build only the library, ignore documentation (it is in devel-doc package) echo "src" > SUBDIRS @@ -72,6 +72,13 @@ %{_libdir}/YaST2/plugin/libpy2Pkg.so %doc %{prefix}/share/doc/packages/yast2-pkg-bindings %changelog +* Mon Jan 07 2008 - lslezak@suse.cz +- added missing "log.h" file in Makefile.am +- added GPG key management functions (FATE 300754): + Pkg::GPGKeys() - get list of the known or trusted GPG keys + Pkg::DeleteGPGKey() - delete the GPG key from the known or + trusted keyring +- 2.16.9 * Fri Jan 04 2008 - lslezak@suse.cz - the functionality from PkgModuleFunctions has been moved to PkgFunctions to reduce compile dependency, removed unnecessary ++++++ yast2-pkg-bindings-2.16.8.tar.bz2 -> yast2-pkg-bindings-2.16.9.tar.bz2 ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/configure new/yast2-pkg-bindings-2.16.9/configure --- old/yast2-pkg-bindings-2.16.8/configure 2008-01-04 12:56:01.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/configure 2008-01-07 16:51:11.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for yast2-pkg-bindings 2.16.8. +# Generated by GNU Autoconf 2.61 for yast2-pkg-bindings 2.16.9. # # Report bugs to <http://bugs.opensuse.org/>. # @@ -728,8 +728,8 @@ # Identity of this package. PACKAGE_NAME='yast2-pkg-bindings' PACKAGE_TARNAME='yast2-pkg-bindings' -PACKAGE_VERSION='2.16.8' -PACKAGE_STRING='yast2-pkg-bindings 2.16.8' +PACKAGE_VERSION='2.16.9' +PACKAGE_STRING='yast2-pkg-bindings 2.16.9' PACKAGE_BUGREPORT='http://bugs.opensuse.org/' ac_unique_file="RPMNAME" @@ -1447,7 +1447,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures yast2-pkg-bindings 2.16.8 to adapt to many kinds of systems. +\`configure' configures yast2-pkg-bindings 2.16.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1518,7 +1518,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of yast2-pkg-bindings 2.16.8:";; + short | recursive ) echo "Configuration of yast2-pkg-bindings 2.16.9:";; esac cat <<\_ACEOF @@ -1627,7 +1627,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -yast2-pkg-bindings configure 2.16.8 +yast2-pkg-bindings configure 2.16.9 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1641,7 +1641,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by yast2-pkg-bindings $as_me 2.16.8, which was +It was created by yast2-pkg-bindings $as_me 2.16.9, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -2462,7 +2462,7 @@ # Define the identity of the package. PACKAGE='yast2-pkg-bindings' - VERSION='2.16.8' + VERSION='2.16.9' cat >>confdefs.h <<_ACEOF @@ -2689,7 +2689,7 @@ -VERSION="2.16.8" +VERSION="2.16.9" RPMNAME="yast2-pkg-bindings" MAINTAINER="Ladislav Slezák <lslezak@suse.cz>" @@ -21198,7 +21198,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by yast2-pkg-bindings $as_me 2.16.8, which was +This file was extended by yast2-pkg-bindings $as_me 2.16.9, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21251,7 +21251,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -yast2-pkg-bindings config.status 2.16.8 +yast2-pkg-bindings config.status 2.16.9 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/configure.in new/yast2-pkg-bindings-2.16.9/configure.in --- old/yast2-pkg-bindings-2.16.8/configure.in 2008-01-04 12:55:51.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/configure.in 2008-01-07 16:51:01.000000000 +0100 @@ -3,7 +3,7 @@ dnl -- This file is generated by y2autoconf 2.15.9 - DO NOT EDIT! -- dnl (edit configure.in.in instead) -AC_INIT(yast2-pkg-bindings, 2.16.8, http://bugs.opensuse.org/, yast2-pkg-bindings) +AC_INIT(yast2-pkg-bindings, 2.16.9, http://bugs.opensuse.org/, yast2-pkg-bindings) dnl Check for presence of file 'RPMNAME' AC_CONFIG_SRCDIR([RPMNAME]) @@ -17,7 +17,7 @@ AM_INIT_AUTOMAKE(tar-ustar) dnl searches for some needed programs dnl Important YaST2 variables -VERSION="2.16.8" +VERSION="2.16.9" RPMNAME="yast2-pkg-bindings" MAINTAINER="Ladislav Slezák <lslezak@suse.cz>" diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/package/yast2-pkg-bindings-2.16.7/pkg-bindings.pot new/yast2-pkg-bindings-2.16.9/package/yast2-pkg-bindings-2.16.7/pkg-bindings.pot --- old/yast2-pkg-bindings-2.16.8/package/yast2-pkg-bindings-2.16.7/pkg-bindings.pot 2007-12-12 16:36:49.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/package/yast2-pkg-bindings-2.16.7/pkg-bindings.pot 1970-01-01 01:00:00.000000000 +0100 @@ -1,148 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR SuSE Linux Products GmbH, Nuernberg -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-12-12 16:36+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#. help text -#: src/HelpTexts.h:36 -msgid "<P><BIG><B>Loading Available Packages</B></BIG></P><P>Loading available objects from the configured repositories is in progress. This may take a while...</P>" -msgstr "" - -#. help text -#: src/HelpTexts.h:42 -msgid "<P><BIG><B>Loading Installed Packages</B><BIG></P><P>The package manager is reading installed packages...</P>" -msgstr "" - -#. help text -#: src/HelpTexts.h:47 -msgid "<P><BIG><B>Registering a New Repository</B></BIG></P><P>A new repository is being registered. The package manager is reading list of available packages in the repository...</P>" -msgstr "" - -#: src/HelpTexts.h:52 -msgid "<P><BIG><B>Saving Repositories</B></BIG></P><P>The package manager is updating configured repositories...</P>" -msgstr "" - -#: src/HelpTexts.h:55 -msgid "<P><BIG><B>Refreshing the Repository</B></BIG></P><P>The package manager is updating the repository content...</P>" -msgstr "" - -#: src/Source_Callbacks.cc:129 -msgid "Refreshing repository " -msgstr "" - -#: src/Source_Callbacks.cc:150 -msgid "Probing repository " -msgstr "" - -#: src/Source_Create.cc:51 -msgid "Scanning products in " -msgstr "" - -#: src/Source_Create.cc:593 -msgid "Search Available Products" -msgstr "" - -#: src/Source_Create.cc:598 -msgid "Probe Source Type" -msgstr "" - -#: src/Source_Create.cc:601 -msgid "Download Descriptions" -msgstr "" - -#: src/Source_Create.cc:602 src/Source_Download.cc:243 src/Source_Load.cc:112 -#: src/Source_Load.cc:304 -msgid "Rebuild Cache" -msgstr "" - -#: src/Source_Create.cc:606 src/Source_Load.cc:113 src/Source_Load.cc:305 -#: src/Source_Set.cc:75 -msgid "Load Data" -msgstr "" - -#: src/Source_Create.cc:609 -msgid "Adding the Repository..." -msgstr "" - -#: src/Source_Download.cc:45 src/Source_Download.cc:173 -msgid "Downloading " -msgstr "" - -#. stages: "download", "build cache" -#: src/Source_Download.cc:242 -msgid "Refresh Metadata" -msgstr "" - -#. 3 steps per repository (download, cache rebuild, load resolvables) -#: src/Source_Download.cc:250 -msgid "Refreshing Repository..." -msgstr "" - -#. error message (followed by detailed description) -#: src/Source_Installation.cc:69 -msgid "Error: Cannot copy the cache to the target directory\n" -msgstr "" - -#. error message (followed by directory name) -#: src/Source_Installation.cc:103 -msgid "Cannot create directory " -msgstr "" - -#. error message -#: src/Source_Installation.cc:133 -msgid "Copying failed" -msgstr "" - -#: src/Source_Load.cc:111 src/Source_Load.cc:303 -msgid "Refresh Sources" -msgstr "" - -#. 3 steps per repository (download, cache rebuild, load resolvables) -#: src/Source_Load.cc:118 src/Source_Load.cc:308 src/Source_Set.cc:82 -#: src/Target_Load.cc:65 src/Target_Load.cc:129 -msgid "Loading the Package Manager..." -msgstr "" - -#: src/Source_Load.cc:302 -msgid "Load Sources" -msgstr "" - -#. TODO: improve the error message -#: src/Source_Misc.cc:72 -msgid "Cannot find source" -msgstr "" - -#: src/Source_Save.cc:112 -msgid "Remove Repositories" -msgstr "" - -#. stages: "download", "build cache" -#: src/Source_Save.cc:117 -msgid "Save Repositories" -msgstr "" - -#. start the process -#: src/Source_Save.cc:125 -msgid "Saving Repositories..." -msgstr "" - -#: src/Target_Load.cc:61 -msgid "Initialize the Target System" -msgstr "" - -#: src/Target_Load.cc:62 src/Target_Load.cc:125 -msgid "Read Installed Packages" -msgstr "" diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/src/Keyring.cc new/yast2-pkg-bindings-2.16.9/src/Keyring.cc --- old/yast2-pkg-bindings-2.16.8/src/Keyring.cc 2008-01-03 09:12:53.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/src/Keyring.cc 2008-01-07 16:28:10.000000000 +0100 @@ -14,18 +14,25 @@ Summary: Access to the Package Manager Namespace: Pkg - Purpose: Access to the Package Manager - keyring related bindings + Purpose: Access to the Package Manager - GPG key management related functions /-*/ +#include <list> +#include <set> + #include "PkgFunctions.h" #include "log.h" #include <ycp/YCPVoid.h> #include <ycp/YCPBoolean.h> #include <ycp/YCPString.h> +#include <ycp/YCPList.h> +#include <ycp/YCPMap.h> #include <zypp/KeyRing.h> +#include <zypp/PublicKey.h> +#include <zypp/Pathname.h> /**************************************************************************************** * @builtin ImportGPGKey @@ -40,8 +47,8 @@ YCPValue PkgFunctions::ImportGPGKey(const YCPString& filename, const YCPBoolean& trusted) { - bool trusted_key = trusted->value(); - std::string file = filename->value(); + const bool trusted_key = trusted->value(); + const std::string file = filename->value(); y2milestone("importing %s key: %s", (trusted_key) ? "trusted" : "untrusted", file.c_str()); @@ -60,3 +67,105 @@ return YCPVoid(); } +// A helper class +// converts PublicKey to YCPMap and adds it to an YCPList +class PublicKeyAdder : public std::unary_function<const zypp::PublicKey &, void> +{ + public: + + // where to add the public key maps, which keys are trusted + PublicKeyAdder(YCPList &lst, bool trusted_keyring) + : list(lst), trusted(trusted_keyring) + { + } + + void operator() (const zypp::PublicKey &key) + { + YCPMap ret; + + ret->add(YCPString("id"), YCPString(key.id())); + ret->add(YCPString("name"), YCPString(key.name())); + ret->add(YCPString("fingerprint"), YCPString(key.fingerprint())); + + // is the key trusted? + ret->add(YCPString("trusted"), YCPBoolean(trusted)); + + return list->add(ret); + } + + private: + + // where to add the converted value + YCPList &list; + // processing trusted or known GPG keys + const bool trusted; +}; + +/**************************************************************************************** + * @builtin GPGKeys + * @short Read the GPG keys in the package manager keyring + * @description + * Read known or trusted keys from the package manager + * + * @param boolean trusted If set to true trusted keys are returned, + * @return list List of maps $[ "id" : string , "name" : string, "fingerprint" : string, "trusted" : boolean ], nil when an error occurred + **/ +YCPValue PkgFunctions::GPGKeys(const YCPBoolean& trusted) +{ + try + { + YCPList ret; + const bool trusted_only = trusted->value(); + const zypp::KeyRing_Ptr keyring(zypp_ptr()->keyRing()); + + // use the required keyring + std::list<zypp::PublicKey> key_list( + trusted_only ? keyring->trustedPublicKeys() + : keyring->publicKeys() + ); + + // convert std::list<PublicKey> to YCPList, pass the known/trusted flag + for_each(key_list.begin(), key_list.end(), PublicKeyAdder(ret, trusted_only)); + + return ret; + } + catch (const zypp::Exception& excpt) + { + y2error("Cannot read GPG keys: %s", excpt.asString().c_str()); + _last_error.setLastError(ExceptionAsString(excpt)); + return YCPVoid(); + } +} + +/**************************************************************************************** + * @builtin DeleteGPGKey + * @short Remove the GPG key from the package manager keyring + * @description + * Remove the GPG key from the known or trusted keyring + * + * @param key_id GPG key ID of the key to remove + * @param trusted If set to true the key will be removed from the trusted keyring otherwise it's removed from the known keyring + * @return boolean true on success + **/ +YCPValue PkgFunctions::DeleteGPGKey(const YCPString& key_id, const YCPBoolean& trusted) +{ + bool ret; + try + { + zypp_ptr()->keyRing()->deleteKey(key_id->value(), trusted->value()); + ret = true; + } + catch(const zypp::Exception &excpt) + { + y2error("Cannot delete GPG key %s from %s keying: %s", + key_id->value().c_str(), + trusted->value() ? "trusted" : "known", + excpt.asString().c_str() + ); + + _last_error.setLastError(ExceptionAsString(excpt)); + ret = false; + } + + return YCPBoolean(ret); +} diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/src/log.h new/yast2-pkg-bindings-2.16.9/src/log.h --- old/yast2-pkg-bindings-2.16.8/src/log.h 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/src/log.h 2008-01-03 09:09:41.000000000 +0100 @@ -0,0 +1,4 @@ + +#define y2log_component "Pkg" +#include <y2util/y2log.h> + diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/src/Makefile.am new/yast2-pkg-bindings-2.16.9/src/Makefile.am --- old/yast2-pkg-bindings-2.16.8/src/Makefile.am 2008-01-03 13:52:41.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/src/Makefile.am 2008-01-07 16:10:47.000000000 +0100 @@ -50,7 +50,7 @@ Callbacks.cc Callbacks_Register.cc \ Y2PkgFunction.cc Y2PkgFunction.h \ YRepo.h YRepo.cc \ - HelpTexts.h i18n.h + HelpTexts.h i18n.h log.h libpy2Pkg_la_LDFLAGS = -version-info 2:0 diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/src/Makefile.in new/yast2-pkg-bindings-2.16.9/src/Makefile.in --- old/yast2-pkg-bindings-2.16.8/src/Makefile.in 2008-01-04 12:56:04.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/src/Makefile.in 2008-01-07 16:51:14.000000000 +0100 @@ -295,7 +295,7 @@ Callbacks.cc Callbacks_Register.cc \ Y2PkgFunction.cc Y2PkgFunction.h \ YRepo.h YRepo.cc \ - HelpTexts.h i18n.h + HelpTexts.h i18n.h log.h libpy2Pkg_la_LDFLAGS = -version-info 2:0 libpy2Pkg_la_LIBADD = \ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/src/PkgFunctions.h new/yast2-pkg-bindings-2.16.9/src/PkgFunctions.h --- old/yast2-pkg-bindings-2.16.8/src/PkgFunctions.h 2008-01-03 16:23:35.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/src/PkgFunctions.h 2008-01-07 15:33:32.000000000 +0100 @@ -689,6 +689,10 @@ // keyring related /* TYPEINFO: void(string,boolean)*/ YCPValue ImportGPGKey(const YCPString& filename, const YCPBoolean& trusted); + /* TYPEINFO: list<map<string,any>>(boolean)*/ + YCPValue GPGKeys(const YCPBoolean& trusted); + /* TYPEINFO: boolean(string,boolean)*/ + YCPValue DeleteGPGKey(const YCPString&, const YCPBoolean&); /* TYPEINFO: boolean()*/ YCPValue SourceReleaseAll (); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-pkg-bindings-2.16.8/VERSION new/yast2-pkg-bindings-2.16.9/VERSION --- old/yast2-pkg-bindings-2.16.8/VERSION 2008-01-04 12:51:31.000000000 +0100 +++ new/yast2-pkg-bindings-2.16.9/VERSION 2008-01-07 16:39:43.000000000 +0100 @@ -1 +1 @@ -2.16.8 +2.16.9 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org