[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