Hello community,
here is the log from the commit of package PackageKit
checked in at Thu Jul 3 09:39:29 CEST 2008.
--------
--- PackageKit/PackageKit.changes 2008-06-09 19:27:11.000000000 +0200
+++ /mounts/work_src_done/STABLE/PackageKit/PackageKit.changes 2008-07-03 01:27:59.950216000 +0200
@@ -1,0 +2,18 @@
+Thu Jul 3 01:35:30 CEST 2008 - sreeves(a)suse.de
+
+- Match libzypp API change
+
+-------------------------------------------------------------------
+Wed Jun 25 20:07:28 CEST 2008 - sreeves(a)suse.de
+
+- Fix for BNC#389415 - Use generic PolicyKit
+ More work on BNC#398391 - return all restart_suggested patches
+ instead of one at a time.
+
+-------------------------------------------------------------------
+Tue Jun 17 21:01:32 CEST 2008 - sreeves(a)suse.de
+
+- Fix for BNC#398391 - only show patches
+ swampid for this - 18244
+
+-------------------------------------------------------------------
New:
----
PackageKit-bnc389415.patch
PackageKit-bnc398391-2.patch
PackageKit-bnc398391.patch
PackageKit_libzypp_api_change.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ PackageKit.spec ++++++
--- /var/tmp/diff_new_pack.g29131/_old 2008-07-03 09:38:49.000000000 +0200
+++ /var/tmp/diff_new_pack.g29131/_new 2008-07-03 09:38:49.000000000 +0200
@@ -12,7 +12,7 @@
Name: PackageKit
Version: 0.2.1
-Release: 17
+Release: 23
License: GPL v2 or later
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: NetworkManager-devel PolicyKit-devel dbus-1-glib-devel fdupes gcc-c++ glib2-devel gtk-doc intltool libzypp-devel perl-XML-Parser python-devel sqlite-devel
@@ -24,6 +24,10 @@
Patch1: PackageKit-ac.patch
Patch2: PackageKit-openSUSE-branch.patch
Patch3: PackageKit-bnc398367-bnc398380.patch
+Patch4: PackageKit-bnc398391.patch
+Patch5: PackageKit-bnc389415.patch
+Patch6: PackageKit-bnc398391-2.patch
+Patch7: PackageKit_libzypp_api_change.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
AutoReqProv: on
Requires: dbus-1 PolicyKit
@@ -97,6 +101,10 @@
%patch1
%patch2 -p1
%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p0
%build
# uncomment out the following line if autotools should be run again (i.e.,
@@ -175,6 +183,15 @@
%{_libdir}/libpackagekit.so
%changelog
+* Thu Jul 03 2008 sreeves(a)suse.de
+- Match libzypp API change
+* Wed Jun 25 2008 sreeves(a)suse.de
+- Fix for BNC#389415 - Use generic PolicyKit
+ More work on BNC#398391 - return all restart_suggested patches
+ instead of one at a time.
+* Tue Jun 17 2008 sreeves(a)suse.de
+- Fix for BNC#398391 - only show patches
+ swampid for this - 18244
* Mon Jun 09 2008 sreeves(a)suse.de
- Fix for BNC#398367 - dont include recommends
Fix for BNC#398380 - init keyring
++++++ PackageKit-bnc389415.patch ++++++
diff --git a/libpackagekit/Makefile.am b/libpackagekit/Makefile.am
index 6b8c6b8..33269f5 100644
--- a/libpackagekit/Makefile.am
+++ b/libpackagekit/Makefile.am
@@ -4,6 +4,7 @@ NULL =
INCLUDES = \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ $(POLKIT_CFLAGS) \
$(SQLITE_CFLAGS) \
-I$(top_srcdir)/libpackagekit \
-I$(top_srcdir)/libgbus \
@@ -79,6 +80,7 @@ libpackagekit_la_LIBADD = \
$(GLIB_LIBS) \
$(DBUS_LIBS) \
$(GBUS_LIBS) \
+ $(POLKIT_LIBS) \
$(SQLITE_LIBS) \
$(NULL)
diff --git a/libpackagekit/pk-client.c b/libpackagekit/pk-client.c
index 5d07e45..2e136fc 100644
--- a/libpackagekit/pk-client.c
+++ b/libpackagekit/pk-client.c
@@ -41,6 +41,7 @@
#include <glib/gi18n.h>
#include <glib/gprintf.h>
#include <dbus/dbus-glib.h>
+#include <polkit-dbus/polkit-dbus.h>
#include "pk-enum.h"
#include "pk-client.h"
@@ -50,7 +51,6 @@
#include "pk-package-list.h"
#include "pk-debug.h"
#include "pk-marshal.h"
-#include "pk-polkit-client.h"
#include "pk-common.h"
#include "pk-control.h"
@@ -77,7 +77,6 @@ struct _PkClientPrivate
PkControl *control;
PkPackageList *package_list;
PkConnection *pconnection;
- PkPolkitClient *polkit;
PkRestartEnum require_restart;
PkStatusEnum last_status;
PkRoleEnum role;
@@ -250,6 +249,89 @@ pk_client_error_fixup (GError **error)
}
/**
+ * pk_client_error_refused_by_policy:
+ * @error: a valid #GError
+ *
+ * Return value: %TRUE if the error is the PolicyKit "RefusedByPolicy"
+ **/
+gboolean
+pk_client_error_refused_by_policy (GError *error)
+{
+ const gchar *error_name;
+
+ /* if not set */
+ if (error == NULL) {
+ return FALSE;
+ }
+
+ /* not a dbus error */
+ if (error->code != DBUS_GERROR_REMOTE_EXCEPTION) {
+ pk_warning ("not a remote exception: %s", error->message);
+ return FALSE;
+ }
+
+ /* check for specific error */
+ error_name = dbus_g_error_get_name (error);
+ pk_debug ("ERROR: %s: %s", error_name, error->message);
+ if (pk_strequal (error_name, "org.freedesktop.PackageKit.RefusedByPolicy")) {
+ return TRUE;
+ }
+ if (pk_strequal (error_name, "org.freedesktop.PackageKit.Transaction.RefusedByPolicy")) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * pk_client_error_auth_obtain:
+ * @error: the GError with the failure
+ *
+ * This function is indented to be passed failure messages from dbus methods
+ * so that extra auth can be requested.
+ *
+ * Return value: if we gained the privilege we asked for
+ **/
+gboolean
+pk_client_error_auth_obtain (GError *error)
+{
+ polkit_bool_t ret;
+ PolKitAction *action = NULL;
+ PolKitResult result;
+ gchar *action_id = NULL; /* we don't free this */
+ DBusError error2;
+ dbus_error_init (&error2);
+
+ g_return_val_if_fail (error != NULL, FALSE);
+
+ /* get PolKitAction */
+ ret = polkit_dbus_error_parse_from_strings ("org.freedesktop.PolicyKit.Error.NotAuthorized", error->message, &action, &result);
+ if (!ret) {
+ pk_debug ("Not a polkit auth failure: %s", error->message);
+ return FALSE;
+ }
+
+ /* get action_id from PolKitAction */
+ ret = polkit_action_get_action_id (action, &action_id);
+ if (!ret) {
+ pk_debug ("Unable to get an action ID");
+ return FALSE;
+ }
+
+ /* this blocks - use polkit_gnome_auth_obtain for non blocking version */
+ ret = polkit_auth_obtain (action_id, 0, getpid (), &error2);
+ if (dbus_error_is_set (&error2)) {
+ pk_warning ("Failed to obtain auth: %s", error2.message);
+ }
+ dbus_error_free (&error2);
+
+ pk_debug ("gained %s privilege = %d", action_id, ret);
+
+ polkit_action_unref (action);
+
+ return ret;
+}
+
+/**
* pk_client_get_tid:
* @client: a valid #PkClient instance
*
@@ -1092,15 +1174,15 @@ pk_client_update_system (PkClient *client, GError **error)
ret = pk_client_update_system_action (client, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
ret = pk_client_update_system_action (client, &error_pk);
}
- if (pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* we failed to get an auth */
pk_client_error_set (error, PK_CLIENT_ERROR_FAILED_AUTH, error_pk->message);
/* clear old error */
@@ -1949,9 +2031,9 @@ pk_client_remove_packages (PkClient *client, gchar **package_ids, gboolean allow
ret = pk_client_remove_packages_action (client, package_ids, allow_deps, autoremove, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2034,9 +2116,9 @@ pk_client_refresh_cache (PkClient *client, gboolean force, GError **error)
ret = pk_client_refresh_cache_action (client, force, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2128,9 +2210,9 @@ pk_client_install_packages (PkClient *client, gchar **package_ids, GError **erro
ret = pk_client_install_package_action (client, package_ids, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2228,9 +2310,9 @@ pk_client_install_signature (PkClient *client, PkSigTypeEnum type, const gchar *
ret = pk_client_install_signature_action (client, type, key_id, package_id, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2326,9 +2408,9 @@ pk_client_update_packages (PkClient *client, gchar **package_ids, GError **error
ret = pk_client_update_packages_action (client, package_ids, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2556,9 +2638,9 @@ pk_client_install_files (PkClient *client, gboolean trusted, gchar **files_rel,
ret = pk_client_install_files_action (client, trusted, files, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2689,9 +2771,9 @@ pk_client_accept_eula (PkClient *client, const gchar *eula_id, GError **error)
ret = pk_client_accept_eula_action (client, eula_id, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2773,9 +2855,9 @@ pk_client_repo_enable (PkClient *client, const gchar *repo_id, gboolean enabled,
ret = pk_client_repo_enable_action (client, repo_id, enabled, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -2866,9 +2948,9 @@ pk_client_repo_set_data (PkClient *client, const gchar *repo_id, const gchar *pa
ret = pk_client_repo_set_data_action (client, repo_id, parameter, value, &error_pk);
/* we were refused by policy */
- if (!ret && pk_polkit_client_error_denied_by_policy (error_pk)) {
+ if (!ret && pk_client_error_refused_by_policy (error_pk)) {
/* try to get auth */
- if (pk_polkit_client_gain_privilege_str (client->priv->polkit, error_pk->message)) {
+ if (pk_client_error_auth_obtain (error_pk)) {
/* clear old error */
g_clear_error (&error_pk);
/* retry the action now we have got auth */
@@ -3608,9 +3690,6 @@ pk_client_init (PkClient *client)
pk_client_connect (client);
}
- /* use PolicyKit */
- client->priv->polkit = pk_polkit_client_new ();
-
/* Use a main control object */
client->priv->control = pk_control_new ();
@@ -3712,7 +3791,6 @@ pk_client_finalize (GObject *object)
/* disconnect signal handlers */
pk_client_disconnect_proxy (client);
g_object_unref (client->priv->pconnection);
- g_object_unref (client->priv->polkit);
g_object_unref (client->priv->package_list);
g_object_unref (client->priv->control);
++++++ PackageKit-bnc398391-2.patch ++++++
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index a432c83..a15aaf9 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -610,15 +610,19 @@ zypp_get_patches ()
it != zypp->poolProxy ().byKindEnd<zypp::Patch>(); it ++) {
// check if patch is needed
if((*it)->candidateObj ().isRelevant() && !((*it)->candidateObj ().isSatisfied())) {
- patches->insert ((*it)->candidateObj ());
zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
+ if (_updating_self) {
+ if (patch->restartSuggested ())
+ patches->insert ((*it)->candidateObj ());
+ }
+ else
+ patches->insert ((*it)->candidateObj ());
- // check if the patch updates libzypp or packageKit and show only this one
- if (patch->restartSuggested ()) {
+ // check if the patch updates libzypp or packageKit and show only these
+ if (!_updating_self && patch->restartSuggested ()) {
_updating_self = TRUE;
patches->clear ();
patches->insert ((*it)->candidateObj ());
- break;
}
}
++++++ PackageKit-bnc398391.patch ++++++
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 4da636b..60f0333 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -614,21 +614,18 @@ backend_get_updates_thread (PkBackend *backend)
// get all Packages and Patches for Update
std::set<zypp::PoolItem> *candidates = zypp_get_patches ();
- std::set<zypp::PoolItem> *candidates2 = new std::set<zypp::PoolItem> ();
+ //std::set<zypp::PoolItem> *candidates2 = new std::set<zypp::PoolItem> ();
if (!_updating_self) {
- //disabling patchrepo
- zypp::RepoInfo patchRepo;
+ // exclude the patch-repository
+ std::string patchRepo;
if (!candidates->empty ()) {
- patchRepo = candidates->begin ()->resolvable ()->repoInfo ();
- patchRepo.setEnabled (FALSE);
+ patchRepo = candidates->begin ()->resolvable ()->repoInfo ().alias ();
}
- candidates2 = zypp_get_updates ();
- //enable patchRepo
- patchRepo.setEnabled (TRUE);
+ //candidates2 = zypp_get_updates (patchRepo);
- candidates->insert (candidates2->begin (), candidates2->end ());
+ //candidates->insert (candidates2->begin (), candidates2->end ());
}
pk_backend_set_percentage (backend, 80);
@@ -661,7 +658,7 @@ backend_get_updates_thread (PkBackend *backend)
}
delete (candidates);
- delete (candidates2);
+ //delete (candidates2);
pk_backend_set_percentage (backend, 100);
pk_backend_finished (backend);
@@ -904,7 +901,7 @@ backend_update_system_thread (PkBackend *backend)
//get all Patches for Update
std::set<zypp::PoolItem> *candidates = zypp_get_patches ();
- std::set<zypp::PoolItem> *candidates2 = new std::set<zypp::PoolItem> ();
+ //std::set<zypp::PoolItem> *candidates2 = new std::set<zypp::PoolItem> ();
if (_updating_self) {
pk_backend_require_restart (backend, PK_RESTART_ENUM_SESSION, _("Package Management System updated - restart needed"));
@@ -912,20 +909,17 @@ backend_update_system_thread (PkBackend *backend)
}
else {
//disabling patchrepo
- zypp::RepoInfo patchRepo;
+ std::string patchRepo;
if (!candidates->empty ()) {
- patchRepo = candidates->begin ()->resolvable ()->repoInfo ();
- patchRepo.setEnabled (FALSE);
+ patchRepo = candidates->begin ()->resolvable ()->repoInfo ().alias ();
}
//get all Updates
- candidates2 = zypp_get_updates ();
- //enable patchRepo
- patchRepo.setEnabled (TRUE);// get all Packages for Update
+ //candidates2 = zypp_get_updates (patchRepo);
//concatenate these sets
- candidates->insert (candidates2->begin (), candidates2->end ());
+ //candidates->insert (candidates2->begin (), candidates2->end ());
}
pk_backend_set_percentage (backend, 80);
@@ -942,7 +936,7 @@ backend_update_system_thread (PkBackend *backend)
return FALSE;
}
- delete (candidates2);
+ //delete (candidates2);
delete (candidates);
pk_backend_set_percentage (backend, 100);
pk_backend_finished (backend);
@@ -1390,6 +1384,10 @@ backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
repo = manager.getRepositoryInfo (rid);
repo.setEnabled (enabled);
manager.modifyRepository (rid, repo);
+ if (!enabled) {
+ zypp::Repository repository = zypp::sat::Pool::instance ().reposFind (repo.alias ());
+ repository.eraseFromPool ();
+ }
} catch (const zypp::repo::RepoNotFoundException &ex) {
pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't find the specified repository");
pk_backend_finished (backend);
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 2a84a3b..aec568c 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -569,7 +569,7 @@ zypp_find_arch_update_item (const zypp::ResPool & pool, zypp::PoolItem item)
}
std::set<zypp::PoolItem> *
-zypp_get_updates ()
+zypp_get_updates (std::string repo)
{
std::set<zypp::PoolItem> *pks = new std::set<zypp::PoolItem> ();
zypp::ResPool pool = zypp::ResPool::instance ();
@@ -584,7 +584,12 @@ zypp_get_updates ()
zypp::PoolItem candidate = zypp_find_arch_update_item (pool, *it);
if (!candidate.resolvable ())
continue;
- pks->insert (candidate);
+ if (repo.empty ()) {
+ pks->insert (candidate);
+ }else{
+ if (candidate->repoInfo ().alias ().compare (repo) != 0)
+ pks->insert (candidate);
+ }
}
return pks;
@@ -604,7 +609,7 @@ zypp_get_patches ()
for (zypp::ResPoolProxy::const_iterator it = zypp->poolProxy ().byKindBegin<zypp::Patch>();
it != zypp->poolProxy ().byKindEnd<zypp::Patch>(); it ++) {
// check if patch is needed
- if((*it)->candidateObj ().isBroken()) {
+ if((*it)->candidateObj ().isRelevant() && !((*it)->candidateObj ().isSatisfied())) {
patches->insert ((*it)->candidateObj ());
zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index 0282aa4..d0361ea 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -137,9 +137,9 @@ gboolean zypp_signature_required (PkBackend *backend, const std::string &file, c
zypp::PoolItem zypp_find_arch_update_item (const zypp::ResPool & pool, zypp::PoolItem item);
/**
- * Returns a set of all packages the could be updated
+ * Returns a set of all packages the could be updated (you're able to exclude a repo)
*/
-std::set<zypp::PoolItem> * zypp_get_updates ();
+std::set<zypp::PoolItem> * zypp_get_updates (std::string repo);
/**
* Returns a set of all patches the could be installed
++++++ PackageKit_libzypp_api_change.patch ++++++
--- backends/zypp/pk-backend-zypp.cpp
+++ backends/zypp/pk-backend-zypp.cpp
@@ -1347,7 +1347,8 @@
std::list <zypp::RepoInfo> repos;
try
{
- repos = manager.knownRepositories();
+ //repos = manager.knownRepositories();
+ repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
}
catch ( const zypp::Exception &e)
{
--- backends/zypp/zypp-utils.cpp
+++ backends/zypp/zypp-utils.cpp
@@ -141,7 +141,8 @@
zypp::RepoManager manager;
std::list<zypp::RepoInfo> repos;
try {
- repos = manager.knownRepositories ();
+ //repos = manager.knownRepositories ();
+ repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
for (std::list<zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end (); it++) {
zypp::RepoInfo repo (*it);
@@ -831,7 +832,8 @@
std::list <zypp::RepoInfo> repos;
try
{
- repos = manager.knownRepositories();
+ //repos = manager.knownRepositories();
+ repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
}
catch ( const zypp::Exception &e)
{
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org