[evolution-couchdb] 0.5.0, patch thanks to Milan Crha to compile against latest evo

Peter Robinson pbrobinson at fedoraproject.org
Mon Sep 27 07:20:08 UTC 2010


commit 09f9874293db57ea23cb82a7f738282782de5e71
Author: Peter Robinson <pbrobinson at gmail.com>
Date:   Mon Sep 27 08:20:07 2010 +0100

    0.5.0, patch thanks to Milan Crha to compile against latest evo

 ecd.patch              |  387 ++++++++++++++++++++++++++++++++++++++++++++++++
 evolution-couchdb.spec |    7 +-
 2 files changed, 392 insertions(+), 2 deletions(-)
---
diff --git a/ecd.patch b/ecd.patch
new file mode 100644
index 0000000..e95c0f9
--- /dev/null
+++ b/ecd.patch
@@ -0,0 +1,387 @@
+diff --git a/addressbook/e-book-backend-couchdb.c b/addressbook/e-book-backend-couchdb.c
+index 49c292e..dd76d94 100644
+--- a/addressbook/e-book-backend-couchdb.c
++++ b/addressbook/e-book-backend-couchdb.c
+@@ -28,6 +28,10 @@
+ #include <dbus/dbus-glib.h>
+ #include <gnome-keyring.h>
+ 
++#define EDB_ERROR(_code) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, NULL)
++#define EDB_ERROR_EX(_code, _msg) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, _msg)
++#define EDB_ERROR_FMT(_code, _fmt, _msg) e_data_book_create_error_fmt (E_DATA_BOOK_STATUS_ ## _code, _fmt, _msg)
++
+ #define COUCHDB_REVISION_PROP                "X-COUCHDB-REVISION"
+ #define COUCHDB_UUID_PROP                    "X-COUCHDB-UUID"
+ #define COUCHDB_APPLICATION_ANNOTATIONS_PROP "X-COUCHDB-APPLICATION-ANNOTATIONS"
+@@ -950,18 +954,19 @@ document_deleted_cb (CouchdbDatabase *database, const char *docid, gpointer user
+ 	e_book_backend_cache_remove_contact (couchdb_backend->cache, docid);
+ }
+ 
+-static GNOME_Evolution_Addressbook_CallStatus
++static void
+ e_book_backend_couchdb_load_source (EBookBackend *backend,
+ 				    ESource *source,
+-				    gboolean only_if_exists)
++				    gboolean only_if_exists,
++				    GError **error)
+ {
+ 	gchar *uri;
+ 	const gchar *property;
+-	GError *error = NULL;
++	GError *err = NULL;
+ 	GSList *doc_list, *sl;
+ 	EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
+ 
+-	g_return_val_if_fail (E_IS_BOOK_BACKEND_COUCHDB (couchdb_backend), GNOME_Evolution_Addressbook_OtherError);
++	e_return_data_book_error_if_fail (E_IS_BOOK_BACKEND_COUCHDB (couchdb_backend), E_DATA_BOOK_STATUS_INVALID_ARG);
+ 
+ 	if (couchdb_backend->couchdb != NULL)
+ 		g_object_unref (G_OBJECT (couchdb_backend->couchdb));
+@@ -976,8 +981,8 @@ e_book_backend_couchdb_load_source (EBookBackend *backend,
+ 	property = e_source_get_property (source, "couchdb_instance");
+ 	if (g_strcmp0 (property, "user") == 0) {
+ 		if (! (couchdb_backend->couchdb = COUCHDB_SESSION (desktopcouch_session_new ()))) {
+-			g_warning ("Could not create DesktopcouchSession object");
+-			return GNOME_Evolution_Addressbook_NoSuchBook;
++			g_propagate_error (error, EDB_ERROR_EX (NO_SUCH_BOOK, "Could not create DesktopcouchSession object"));
++			return;
+ 		}
+ 
+ 		couchdb_backend->using_desktopcouch = TRUE;
+@@ -988,41 +993,55 @@ e_book_backend_couchdb_load_source (EBookBackend *backend,
+ 			uri = g_strdup ("http://127.0.0.1:5984");
+ 
+ 		if (! (couchdb_backend->couchdb = couchdb_session_new (uri))) {
++			g_propagate_error (error, EDB_ERROR_FMT (NO_SUCH_BOOK, "Cannot create session with URI '%s'", uri));
+ 			g_free (uri);
+-			return GNOME_Evolution_Addressbook_NoSuchBook;
++			return;
+ 		}
+ 
+ 		g_free (uri);
+ 	}
+ 
+ 	/* check if only_if_exists */
+-	error = NULL;
++	err = NULL;
+ 	couchdb_backend->database = couchdb_session_get_database (couchdb_backend->couchdb,
+ 								  "contacts",
+-								  &error);
++								  &err);
+ 	if (couchdb_backend->database == NULL) {
+-		if (error) {
+-			g_warning ("Could not get CouchDB database info: %s", error->message);
+-			g_error_free (error);
++		if (err) {
++			g_propagate_error (error, EDB_ERROR_FMT (NO_SUCH_BOOK, "Could not get CouchDB database info: %s", err->message));
++			g_error_free (err);
+ 		}
+ 
+-		if (only_if_exists)
+-			return GNOME_Evolution_Addressbook_NoSuchBook;
+-		
++		if (only_if_exists) {
++			if (error && !*error)
++				g_propagate_error (error, EDB_ERROR_EX (NO_SUCH_BOOK, "Cannot get CouchDB database info"));
++			return;
++		}
++
++		g_clear_error (error);
++
+ 		/* if it does not exist, create it */
+-		error = NULL;
++		err = NULL;
+ 		if (!couchdb_session_create_database (couchdb_backend->couchdb,
+ 						      "contacts",
+-						      &error)) {
+-			g_warning ("Could not create 'contacts' database: %s", error->message);
+-			g_error_free (error);
++						      &err)) {
++			g_propagate_error (error, EDB_ERROR_FMT (PERMISSION_DENIED, "Could not create 'contacts' database: %s", err->message));
++			g_error_free (err);
+ 
+-			return GNOME_Evolution_Addressbook_PermissionDenied;
++			return;
+ 		}
+ 
++		err = NULL;
+ 		couchdb_backend->database = couchdb_session_get_database (couchdb_backend->couchdb,
+ 									  "contacts",
+-									  &error);
++									  &err);
++
++		if (err) {
++			g_propagate_error (error, EDB_ERROR_FMT (OTHER_ERROR, "Cannot get CouchDB database: %s", err->message));
++			g_error_free (err);
++
++			return;
++		}
+ 	}
+ 
+ 	/* Create cache */
+@@ -1032,9 +1051,9 @@ e_book_backend_couchdb_load_source (EBookBackend *backend,
+ 
+ 	/* Populate the cache */
+ 	e_file_cache_clean (E_FILE_CACHE (couchdb_backend->cache));
+-	error = NULL;
++	err = NULL;
+ 	doc_list = couchdb_database_get_all_documents (couchdb_backend->database,
+-						       &error);
++						       &err);
+ 	for (sl = doc_list; sl != NULL; sl = sl->next) {
+ 		EContact *contact;
+ 		CouchdbDocument *document = COUCHDB_DOCUMENT (sl->data);
+@@ -1059,8 +1078,6 @@ e_book_backend_couchdb_load_source (EBookBackend *backend,
+ 
+ 	e_book_backend_set_is_loaded (backend, TRUE);
+ 	e_book_backend_set_is_writable (backend, TRUE);
+-
+-	return GNOME_Evolution_Addressbook_Success;
+ }
+ 
+ static void
+@@ -1076,7 +1093,7 @@ e_book_backend_couchdb_remove (EBookBackend *backend, EDataBook *book, guint32 o
+ 
+ 	/* We don't remove data from CouchDB, since it would affect other apps,
+ 	   so just report success */
+-	e_data_book_respond_remove (book, opid, GNOME_Evolution_Addressbook_Success);
++	e_data_book_respond_remove (book, opid, NULL /* Success */);
+ }
+ 
+ static char *
+@@ -1086,7 +1103,7 @@ e_book_backend_couchdb_get_static_capabilities (EBookBackend *backend)
+ }
+ 
+ static EContact *
+-put_document (EBookBackendCouchDB *couchdb_backend, CouchdbDocument *document)
++put_document (EBookBackendCouchDB *couchdb_backend, CouchdbDocument *document, GError **perror)
+ {
+ 	GError *error = NULL;
+ 
+@@ -1102,8 +1119,10 @@ put_document (EBookBackendCouchDB *couchdb_backend, CouchdbDocument *document)
+ 		return new_contact;
+ 	} else {
+ 		if (error != NULL) {
+-			g_warning ("Could not PUT document: %s\n", error->message);
++			g_propagate_error (perror, EDB_ERROR_FMT (OTHER_ERROR, "Could not PUT document: %s", error->message));
+ 			g_error_free (error);
++		} else {
++			g_propagate_error (perror, EDB_ERROR_EX (OTHER_ERROR, "Could not PUT document"));
+ 		}
+ 	}
+ 
+@@ -1119,26 +1138,30 @@ e_book_backend_couchdb_create_contact (EBookBackend *backend,
+ 	EContact *contact, *new_contact;
+ 	CouchdbDocument *document;
+ 	EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
++	GError *err = NULL;
+ 
+ 	contact = e_contact_new_from_vcard (vcard);
+ 	if (!contact) {
+-		e_data_book_respond_create (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL);
++		e_data_book_respond_create (book, opid, EDB_ERROR_EX (OTHER_ERROR, "Invalid vCard"), NULL);
+ 		return;
+ 	}
+ 
+ 	document = couch_document_from_contact (couchdb_backend, contact);
+ 	if (!document) {
+-		e_data_book_respond_create (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL);
++		e_data_book_respond_create (book, opid, EDB_ERROR_EX (OTHER_ERROR, "Cannot create CouchDB document from a contact"), NULL);
+ 		g_object_unref (G_OBJECT (contact));
+ 		return;
+ 	}
+ 
+ 	/* save the contact into the DB */
+-	if ((new_contact = put_document (couchdb_backend, document)) != NULL) {
+-		e_data_book_respond_create (book, opid, GNOME_Evolution_Addressbook_Success, new_contact);
++	if ((new_contact = put_document (couchdb_backend, document, &err)) != NULL) {
++		e_data_book_respond_create (book, opid, NULL /* Success */, new_contact);
+ 		g_object_unref (new_contact);
+-	} else
+-		e_data_book_respond_create (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL);
++	} else {
++		if (!err)
++			err = EDB_ERROR_EX (OTHER_ERROR, "Could not PUT document");
++		e_data_book_respond_create (book, opid, err, NULL);
++	}
+ 
+ 	/* free memory */
+ 	g_object_unref (G_OBJECT (contact));
+@@ -1153,6 +1176,7 @@ e_book_backend_couchdb_remove_contacts (EBookBackend *backend,
+ {
+ 	GList *l, *deleted_ids = NULL;
+ 	EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
++	GError *err = NULL;
+ 
+ 	for (l = id_list; l != NULL; l = l->next) {
+ 		CouchdbDocument *document;
+@@ -1189,10 +1213,10 @@ e_book_backend_couchdb_remove_contacts (EBookBackend *backend,
+ 					e_book_backend_cache_remove_contact (couchdb_backend->cache, uid);
+ 				} else {
+ 					if (error != NULL) {
+-						g_debug ("Error deleting document: %s", error->message);
++						err = EDB_ERROR_FMT (OTHER_ERROR, "Error deleting document: %s", error->message);
+ 						g_error_free (error);
+ 					} else
+-						g_debug ("Error deleting document");
++						err = EDB_ERROR_EX (OTHER_ERROR, "Error deleting document");
+ 				}
+ 
+ 				/* Free memory */
+@@ -1205,28 +1229,29 @@ e_book_backend_couchdb_remove_contacts (EBookBackend *backend,
+ 					e_book_backend_cache_remove_contact (couchdb_backend->cache, uid);
+ 				} else {
+ 					if (error != NULL) {
+-						g_debug ("Error deleting document: %s", error->message);
++						err = EDB_ERROR_FMT (OTHER_ERROR, "Error deleting document: %s", error->message);
+ 						g_error_free (error);
+ 					} else
+-						g_debug ("Error deleting document");
++						err = EDB_ERROR_EX (OTHER_ERROR, "Error deleting document");
+ 				}
+ 			}
+ 		} else {
+ 			if (error != NULL) {
+-				g_debug ("Error getting document: %s", error->message);
++				err = EDB_ERROR_FMT (OTHER_ERROR, "Error getting document: %s", error->message);
+ 				g_error_free (error);
+ 			} else
+-				g_debug ("Error getting document");
++				err = EDB_ERROR_EX (OTHER_ERROR, "Error getting document");
+ 		}
+ 	}
+ 
+ 	if (deleted_ids) {
+-		e_data_book_respond_remove_contacts (book, opid,
+-						     GNOME_Evolution_Addressbook_Success, deleted_ids);
++		e_data_book_respond_remove_contacts (book, opid, NULL /* Success */, deleted_ids);
+ 		g_list_free (deleted_ids);
++
++		if (err)
++			g_error_free (err);
+ 	} else
+-		e_data_book_respond_remove_contacts (book, opid,
+-						     GNOME_Evolution_Addressbook_OtherError, NULL);
++		e_data_book_respond_remove_contacts (book, opid, err, NULL);
+ }
+ 
+ static void
+@@ -1238,26 +1263,30 @@ e_book_backend_couchdb_modify_contact (EBookBackend *backend,
+ 	EContact *contact, *new_contact;
+ 	CouchdbDocument *document;
+ 	EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
++	GError *err = NULL;
+ 
+ 	contact = e_contact_new_from_vcard (vcard);
+ 	if (!contact) {
+-		e_data_book_respond_modify (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL);
++		e_data_book_respond_modify (book, opid, EDB_ERROR_EX (OTHER_ERROR, "Invalid vCard"), NULL);
+ 		return;
+ 	}
+ 
+ 	document = couch_document_from_contact (couchdb_backend, contact);
+ 	if (!document) {
+-		e_data_book_respond_modify (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL);
++		e_data_book_respond_modify (book, opid, EDB_ERROR_EX (OTHER_ERROR, "Cannot create CouchDB document from a contact"), NULL);
+ 		g_object_unref (G_OBJECT (document));
+ 		return;
+ 	}
+ 
+ 	/* save the contact into the DB */
+-	if ((new_contact = put_document (couchdb_backend, document)) != NULL) {
+-		e_data_book_respond_modify (book, opid, GNOME_Evolution_Addressbook_Success, new_contact);
++	if ((new_contact = put_document (couchdb_backend, document, &err)) != NULL) {
++		e_data_book_respond_modify (book, opid, NULL /* Success */, new_contact);
+ 		g_object_unref (new_contact);
+-	} else
+-		e_data_book_respond_modify (book, opid, GNOME_Evolution_Addressbook_OtherError, NULL);
++	} else {
++		if (!err)
++			err = EDB_ERROR_EX (OTHER_ERROR, "Could not PUT document");
++		e_data_book_respond_modify (book, opid, err, NULL);
++	}
+ 
+ 	/* free memory */
+ 	g_object_unref (G_OBJECT (contact));
+@@ -1281,14 +1310,14 @@ e_book_backend_couchdb_get_contact (EBookBackend *backend,
+ 		if (vcard != NULL) {
+ 			e_data_book_respond_get_contact (book,
+ 							 opid,
+-							 GNOME_Evolution_Addressbook_Success,
++							 NULL /* Success */,
+ 							 vcard);
+ 			g_free (vcard);
+ 			return;
+ 		}
+ 	}
+ 
+-	e_data_book_respond_get_contact (book, opid, GNOME_Evolution_Addressbook_ContactNotFound, "");
++	e_data_book_respond_get_contact (book, opid, EDB_ERROR (CONTACT_NOT_FOUND), "");
+ }
+ 
+ static void
+@@ -1313,7 +1342,7 @@ e_book_backend_couchdb_get_contact_list (EBookBackend *backend,
+ 		g_object_unref (G_OBJECT (contact));
+ 	}
+ 
+-	e_data_book_respond_get_contact_list (book, opid, GNOME_Evolution_Addressbook_Success, contacts);
++	e_data_book_respond_get_contact_list (book, opid, NULL /* Success */, contacts);
+ }
+ 
+ static void
+@@ -1342,7 +1371,7 @@ e_book_backend_couchdb_start_book_view (EBookBackend *backend,
+ 		g_object_unref (G_OBJECT (contact));
+ 	}
+ 
+-	e_data_book_view_notify_complete (book_view, GNOME_Evolution_Addressbook_Success);
++	e_data_book_view_notify_complete (book_view, NULL /* Success */);
+ }
+ 
+ static void
+@@ -1381,8 +1410,7 @@ e_book_backend_couchdb_get_required_fields (EBookBackend *backend,
+ 	field_name = e_contact_field_name (E_CONTACT_GIVEN_NAME);
+ 	fields = g_list_append (fields, g_strdup (field_name));
+ 
+-	e_data_book_respond_get_required_fields(book, opid,
+-						GNOME_Evolution_Addressbook_Success, fields);
++	e_data_book_respond_get_required_fields (book, opid, NULL /* Success */, fields);
+ 
+ 	g_list_foreach (fields, (GFunc) g_free, NULL);
+ 	g_list_free (fields);
+@@ -1459,8 +1487,7 @@ e_book_backend_couchdb_get_supported_fields (EBookBackend *backend,
+ 	fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_SKYPE)));
+ 	fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_YAHOO)));
+ 
+-	e_data_book_respond_get_supported_fields (book, opid,
+-						  GNOME_Evolution_Addressbook_Success, fields);
++	e_data_book_respond_get_supported_fields (book, opid, NULL /* Success */, fields);
+ 
+ 	g_list_foreach (fields, (GFunc) g_free, NULL);
+ 	g_list_free (fields);
+@@ -1473,21 +1500,20 @@ e_book_backend_couchdb_get_supported_auth_methods (EBookBackend *backend, EDataB
+ 
+ 	auth_methods = g_list_append (auth_methods, g_strdup ("plain/password"));
+ 
+-	e_data_book_respond_get_supported_auth_methods (book, opid,
+-							GNOME_Evolution_Addressbook_Success, auth_methods);
++	e_data_book_respond_get_supported_auth_methods (book, opid, NULL /* Success */, auth_methods);
+ 
+ 	g_list_foreach (auth_methods, (GFunc) g_free, NULL);
+ 	g_list_free (auth_methods);
+ }
+ 
+-static GNOME_Evolution_Addressbook_CallStatus
+-e_book_backend_couchdb_cancel_operation (EBookBackend *backend, EDataBook *book)
++static void
++e_book_backend_couchdb_cancel_operation (EBookBackend *backend, EDataBook *book, GError **perror)
+ {
+-	return GNOME_Evolution_Addressbook_CouldNotCancel;
++	g_propagate_error (perror, EDB_ERROR (COULD_NOT_CANCEL));
+ }
+ 
+ static void
+-e_book_backend_couchdb_set_mode (EBookBackend *backend, GNOME_Evolution_Addressbook_BookMode mode)
++e_book_backend_couchdb_set_mode (EBookBackend *backend, EDataBookMode mode)
+ {
+ }
+ 
diff --git a/evolution-couchdb.spec b/evolution-couchdb.spec
index 5abbaf0..db0efb1 100644
--- a/evolution-couchdb.spec
+++ b/evolution-couchdb.spec
@@ -7,6 +7,7 @@ Group:         System Environment/Libraries
 License:       GPLv3+
 URL:           http://www.gnome.org/
 Source0:       ftp://ftp.gnome.org/pub/gnome/sources/%{name}/0.5/%{name}-%{version}.tar.bz2
+Patch0:        ecd.patch
 
 BuildRequires: couchdb-glib-devel
 BuildRequires: dbus-glib-devel
@@ -27,6 +28,7 @@ stored in a CouchDB.
 
 %prep
 %setup -q
+%patch0 -p1 -b .ecd
 
 %build
 %configure --disable-static
@@ -59,12 +61,13 @@ rm -rf %{buildroot}
 %defattr(-,root,root,-)
 %doc COPYING NEWS
 %{_libdir}/evolution-data-server-1.2/extensions/libebookbackendcouchdb.so
-%{_libdir}/evolution/3.0/plugins/liborg-gnome-evolution-couchdb.so
-%{_libdir}/evolution/3.0/plugins/org-gnome-evolution-couchdb.eplug
+%{_libdir}/evolution/2.32/plugins/liborg-gnome-evolution-couchdb.so
+%{_libdir}/evolution/2.32/plugins/org-gnome-evolution-couchdb.eplug
 
 %changelog
 * Fri Sep 17 2010 Peter Robinson <pbrobinson at gmail.com> 0.5.0-1
 - Update to 0.5.0 upstream release
+- Add patch thanks to Milan Crha to compile against latest evo
 
 * Tue Jul 20 2010 Peter Robinson <pbrobinson at gmail.com> 0.4.93-1
 - Update to 0.4.93 upstream release


More information about the scm-commits mailing list