diff -u rhythmbox-0.12.8/debian/changelog rhythmbox-0.12.8/debian/changelog --- rhythmbox-0.12.8/debian/changelog +++ rhythmbox-0.12.8/debian/changelog @@ -1,3 +1,15 @@ +rhythmbox (0.12.8-0ubuntu6) lucid-proposed; urgency=low + + * debian/patches/98_git_dont_require_can_read.patch: + - git change to not require the can-read attribute to be available since + the smb mounts sometime don't have it and that breaks import (lp: #273294) + * debian/patches/99_git_python_initialization.patch: + - git change to fix python initialization issues, the change is not + technically required in lucid but it will avoid having crashes if the + changes to python from maverick are backport to lucid later + + -- Sebastien Bacher Tue, 01 Jun 2010 15:45:56 +0200 + rhythmbox (0.12.8-0ubuntu5) lucid-proposed; urgency=low * debian/patches/97_git_no_double_deletion.patch only in patch2: unchanged: --- rhythmbox-0.12.8.orig/debian/patches/99_git_python_initialization.patch +++ rhythmbox-0.12.8/debian/patches/99_git_python_initialization.patch @@ -0,0 +1,172 @@ +From 4394826f36fad0ad36ea773b6d4525dfcfcd389b Mon Sep 17 00:00:00 2001 +From: Jonathan Matthew +Date: Wed, 05 May 2010 12:58:26 +0000 +Subject: python: fix a number of python initialization problems (bug #617587) + +- pygtk.require("2.8") doesn't work - it's only after a major version, + so we should pass in "2.0" instead +- init_pygobject() is deprecated, use pygobject_init (and pass in the + version we require) instead +- init_pygtk() is a macro that returns from the current function on + error, so we need to call it from a separate function for our error + handling to work +- if some aspect of python initialization failed, we were still using + the pygobject GIL macros, which were crashing +--- +diff --git a/shell/main.c b/shell/main.c +index 1f27fee..a4dd50a 100644 +--- a/shell/main.c ++++ b/shell/main.c +@@ -35,6 +35,7 @@ + #define NO_IMPORT_PYGOBJECT + #define NO_IMPORT_PYGTK + #include ++#include "rb-python-module.h" + + /* make sure it's defined somehow */ + #ifndef _XOPEN_SOURCE +@@ -327,11 +328,15 @@ main (int argc, char **argv) + + rb_profile_start ("mainloop"); + #ifdef ENABLE_PYTHON +- pyg_begin_allow_threads; +-#endif ++ if (rb_python_init_successful ()) { ++ pyg_begin_allow_threads; ++ gtk_main (); ++ pyg_end_allow_threads; ++ } else { ++ gtk_main (); ++ } ++#else + gtk_main (); +-#ifdef ENABLE_PYTHON +- pyg_end_allow_threads; + #endif + rb_profile_end ("mainloop"); + +diff --git a/shell/rb-python-module.c b/shell/rb-python-module.c +index 9e14731..1995a42 100644 +--- a/shell/rb-python-module.c ++++ b/shell/rb-python-module.c +@@ -84,8 +84,16 @@ extern PyMethodDef pyrb_functions[]; + /* We retreive this to check for correct class hierarchy */ + static PyTypeObject *PyRBPlugin_Type; + ++static gboolean python_init_successful; ++ + G_DEFINE_TYPE (RBPythonModule, rb_python_module, G_TYPE_TYPE_MODULE); + ++static void ++actually_init_pygtk (void) ++{ ++ init_pygtk (); ++} ++ + void + rb_python_module_init_python (void) + { +@@ -98,6 +106,7 @@ rb_python_module_init_python (void) + char *argv[] = { "rb", "rhythmdb", NULL }; + GList *paths; + ++ python_init_successful = FALSE; + if (Py_IsInitialized ()) { + g_warning ("Python Should only be initialized once, since it's in class_init"); + g_return_if_reached (); +@@ -130,7 +139,7 @@ rb_python_module_init_python (void) + + PySys_SetArgv (1, argv); + +- /* pygtk.require("2.8") */ ++ /* pygtk.require("2.0") */ + pygtk = PyImport_ImportModule ("pygtk"); + if (pygtk == NULL) { + g_warning ("Could not import pygtk"); +@@ -140,11 +149,15 @@ rb_python_module_init_python (void) + + mdict = PyModule_GetDict (pygtk); + require = PyDict_GetItemString (mdict, "require"); +- PyObject_CallObject (require, Py_BuildValue ("(S)", PyString_FromString ("2.8"))); ++ PyObject_CallObject (require, Py_BuildValue ("(S)", PyString_FromString ("2.0"))); ++ if (PyErr_Occurred ()) { ++ g_warning ("pygtk.require(2.0) failed"); ++ PyErr_Print(); ++ return; ++ } + + /* import gobject */ +- init_pygobject (); +- if (PyErr_Occurred ()) { ++ if (pygobject_init (2, 16, 0) == NULL) { + g_warning ("Could not initialize pygobject"); + PyErr_Print(); + return; +@@ -154,7 +167,7 @@ rb_python_module_init_python (void) + pyg_disable_warning_redirections (); + + /* import gtk */ +- init_pygtk (); ++ actually_init_pygtk (); + if (PyErr_Occurred ()) { + g_warning ("Could not initialize pygtk"); + PyErr_Print(); +@@ -172,7 +185,7 @@ rb_python_module_init_python (void) + + mdict = PyModule_GetDict (gtk); + pygtk_version = PyDict_GetItemString (mdict, "pygtk_version"); +- pygtk_required_version = Py_BuildValue ("(iii)", 2, 4, 0); ++ pygtk_required_version = Py_BuildValue ("(iii)", 2, 8, 0); + if (PyObject_Compare (pygtk_version, pygtk_required_version) == -1) { + g_warning("PyGTK %s required, but %s found.", + PyString_AsString (PyObject_Repr (pygtk_required_version)), +@@ -264,6 +277,8 @@ rb_python_module_init_python (void) + gettext_args = Py_BuildValue ("ss", GETTEXT_PACKAGE, GNOMELOCALEDIR); + PyObject_CallObject (install, gettext_args); + Py_DECREF (gettext_args); ++ ++ python_init_successful = TRUE; + } + + static gboolean +@@ -329,6 +344,11 @@ rb_python_module_load_with_gil (GTypeModule *module) + PyGILState_STATE state; + gboolean ret; + ++ if (python_init_successful == FALSE) { ++ g_warning ("unable to load module as python runtime could not be initialized"); ++ return FALSE; ++ } ++ + state = pyg_gil_state_ensure (); + ret = rb_python_module_load (module); + pyg_gil_state_release (state); +@@ -485,6 +505,12 @@ rb_python_module_new (const gchar *path, + return result; + } + ++gboolean ++rb_python_init_successful (void) ++{ ++ return python_init_successful; ++} ++ + /* --- these are not module methods, they are here out of convenience --- */ + + #if 0 +diff --git a/shell/rb-python-module.h b/shell/rb-python-module.h +index 5b2c152..30c1200 100644 +--- a/shell/rb-python-module.h ++++ b/shell/rb-python-module.h +@@ -60,6 +60,8 @@ GObject *rb_python_module_new_object (RBPythonModule *module); + + void rb_python_module_init_python (void); + ++gboolean rb_python_init_successful (void); ++ + void rb_python_garbage_collect (void); + + void rb_python_shutdown (void); +-- +cgit v0.8.3.1 + only in patch2: unchanged: --- rhythmbox-0.12.8.orig/debian/patches/98_git_dont_require_can_read.patch +++ rhythmbox-0.12.8/debian/patches/98_git_dont_require_can_read.patch @@ -0,0 +1,34 @@ +From a57a51913b1057c85603bf3ada52f6d76582d139 Mon Sep 17 00:00:00 2001 +From: Jonathan Matthew +Date: Sun, 18 Apr 2010 03:25:18 +0000 +Subject: file-helpers: don't ignore files when we don't get access::can-read + +--- +diff --git a/lib/rb-file-helpers.c b/lib/rb-file-helpers.c +index 5a0f96d..1b121af 100644 +--- a/lib/rb-file-helpers.c ++++ b/lib/rb-file-helpers.c +@@ -714,8 +714,17 @@ static gboolean + _should_process (GFileInfo *info) + { + /* check that the file is non-hidden and readable */ +- return (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ) && +- (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN) == FALSE)); ++ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ)) { ++ if (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ) == FALSE) { ++ return FALSE; ++ } ++ } ++ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN)) { ++ if (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN)) { ++ return FALSE; ++ } ++ } ++ return TRUE; + } + + static void +-- + + +