diff options
| author | David Bremner <david@tethera.net> | 2023-09-18 06:16:47 -0300 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2023-09-18 06:16:47 -0300 |
| commit | 1129cf890ef812321ac8296a4ca964a796df0b87 (patch) | |
| tree | ffe0b3a98a7210c292d94d3ae6c9ebbed70fd4a5 /bindings | |
| parent | 12aa05f07cb8aae736895c46fb25e0106daf207c (diff) | |
| parent | d4e0aaa76bd9e7a9e36abf47dc9ad3ea8bc10334 (diff) | |
Merge remote-tracking branch 'origin/master' into nmwebnmweb
Diffstat (limited to 'bindings')
| -rw-r--r-- | bindings/Makefile.local | 4 | ||||
| -rw-r--r-- | bindings/python/notmuch/compat.py | 5 | ||||
| -rw-r--r-- | bindings/python/notmuch/version.py | 2 | ||||
| -rw-r--r-- | bindings/ruby/database.c | 62 | ||||
| -rw-r--r-- | bindings/ruby/defs.h | 17 | ||||
| -rw-r--r-- | bindings/ruby/directory.c | 4 | ||||
| -rw-r--r-- | bindings/ruby/filenames.c | 50 | ||||
| -rw-r--r-- | bindings/ruby/init.c | 32 | ||||
| -rw-r--r-- | bindings/ruby/message.c | 4 | ||||
| -rw-r--r-- | bindings/ruby/messages.c | 2 | ||||
| -rw-r--r-- | bindings/ruby/query.c | 2 | ||||
| -rw-r--r-- | bindings/ruby/tags.c | 53 | ||||
| -rw-r--r-- | bindings/ruby/thread.c | 2 |
13 files changed, 66 insertions, 173 deletions
diff --git a/bindings/Makefile.local b/bindings/Makefile.local index 7b10af08..9875123a 100644 --- a/bindings/Makefile.local +++ b/bindings/Makefile.local @@ -34,3 +34,7 @@ CLEAN += $(patsubst %,$(dir)/ruby/%, \ CLEAN += bindings/ruby/.vendorarchdir.time $(dir)/ruby.stamp CLEAN += bindings/python-cffi/build $(dir)/python-cffi.stamp +CLEAN += bindings/python-cffi/__pycache__ + +DISTCLEAN += bindings/python-cffi/_notmuch_config.py \ + bindings/python-cffi/notmuch2.egg-info diff --git a/bindings/python/notmuch/compat.py b/bindings/python/notmuch/compat.py index c931329e..4a94e05c 100644 --- a/bindings/python/notmuch/compat.py +++ b/bindings/python/notmuch/compat.py @@ -47,7 +47,10 @@ if sys.version_info[0] == 2: return value else: - from configparser import SafeConfigParser + from configparser import ConfigParser as SafeConfigParser + + if not hasattr(SafeConfigParser, 'readfp'): # py >= 3.12 + SafeConfigParser.readfp = SafeConfigParser.read_file class Python3StringMixIn(object): def __str__(self): diff --git a/bindings/python/notmuch/version.py b/bindings/python/notmuch/version.py index 943f335c..c847a1a3 100644 --- a/bindings/python/notmuch/version.py +++ b/bindings/python/notmuch/version.py @@ -1,3 +1,3 @@ # this file should be kept in sync with ../../../version -__VERSION__ = '0.37' +__VERSION__ = '0.38' SOVERSION = '5' diff --git a/bindings/ruby/database.c b/bindings/ruby/database.c index 9c3dbd96..ed224ef7 100644 --- a/bindings/ruby/database.c +++ b/bindings/ruby/database.c @@ -58,40 +58,56 @@ notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE self) notmuch_database_t *database; notmuch_status_t ret; + path = NULL; + create = 0; + mode = NOTMUCH_DATABASE_MODE_READ_ONLY; + /* Check arguments */ - rb_scan_args (argc, argv, "11", &pathv, &hashv); + rb_scan_args (argc, argv, "02", &pathv, &hashv); - SafeStringValue (pathv); - path = RSTRING_PTR (pathv); + if (!NIL_P (pathv)) { + SafeStringValue (pathv); + path = RSTRING_PTR (pathv); + } if (!NIL_P (hashv)) { - Check_Type (hashv, T_HASH); - create = RTEST (rb_hash_aref (hashv, ID2SYM (ID_db_create))); - modev = rb_hash_aref (hashv, ID2SYM (ID_db_mode)); - if (NIL_P (modev)) - mode = NOTMUCH_DATABASE_MODE_READ_ONLY; - else if (!FIXNUM_P (modev)) - rb_raise (rb_eTypeError, ":mode isn't a Fixnum"); - else { - mode = FIX2INT (modev); - switch (mode) { - case NOTMUCH_DATABASE_MODE_READ_ONLY: - case NOTMUCH_DATABASE_MODE_READ_WRITE: - break; - default: - rb_raise ( rb_eTypeError, "Invalid mode"); + VALUE rmode, rcreate; + VALUE kwargs[2]; + static ID keyword_ids[2]; + + if (!keyword_ids[0]) { + keyword_ids[0] = rb_intern_const ("mode"); + keyword_ids[1] = rb_intern_const ("create"); + } + + rb_get_kwargs (hashv, keyword_ids, 0, 2, kwargs); + + rmode = kwargs[0]; + rcreate = kwargs[1]; + + if (rmode != Qundef) { + if (!FIXNUM_P (rmode)) + rb_raise (rb_eTypeError, ":mode isn't a Fixnum"); + else { + mode = FIX2INT (rmode); + switch (mode) { + case NOTMUCH_DATABASE_MODE_READ_ONLY: + case NOTMUCH_DATABASE_MODE_READ_WRITE: + break; + default: + rb_raise ( rb_eTypeError, "Invalid mode"); + } } } - } else { - create = 0; - mode = NOTMUCH_DATABASE_MODE_READ_ONLY; + if (rcreate != Qundef) + create = RTEST (rcreate); } rb_check_typeddata (self, ¬much_rb_database_type); if (create) ret = notmuch_database_create (path, &database); else - ret = notmuch_database_open (path, mode, &database); + ret = notmuch_database_open_with_config (path, mode, NULL, NULL, &database, NULL); notmuch_rb_status_raise (ret); DATA_PTR (self) = notmuch_rb_object_create (database, "notmuch_rb_database"); @@ -408,7 +424,7 @@ notmuch_rb_database_get_all_tags (VALUE self) rb_raise (notmuch_rb_eBaseError, "%s", msg); } - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); + return notmuch_rb_tags_get (tags); } /* diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h index e2541e8f..a2cb38c8 100644 --- a/bindings/ruby/defs.h +++ b/bindings/ruby/defs.h @@ -33,7 +33,6 @@ extern VALUE notmuch_rb_cThreads; extern VALUE notmuch_rb_cThread; extern VALUE notmuch_rb_cMessages; extern VALUE notmuch_rb_cMessage; -extern VALUE notmuch_rb_cTags; extern VALUE notmuch_rb_eBaseError; extern VALUE notmuch_rb_eDatabaseError; @@ -48,8 +47,6 @@ extern VALUE notmuch_rb_eUnbalancedFreezeThawError; extern VALUE notmuch_rb_eUnbalancedAtomicError; extern ID ID_call; -extern ID ID_db_create; -extern ID ID_db_mode; /* RSTRING_PTR() is new in ruby-1.9 */ #if !defined(RSTRING_PTR) @@ -59,7 +56,6 @@ extern ID ID_db_mode; extern const rb_data_type_t notmuch_rb_object_type; extern const rb_data_type_t notmuch_rb_database_type; extern const rb_data_type_t notmuch_rb_directory_type; -extern const rb_data_type_t notmuch_rb_filenames_type; extern const rb_data_type_t notmuch_rb_query_type; extern const rb_data_type_t notmuch_rb_threads_type; extern const rb_data_type_t notmuch_rb_thread_type; @@ -92,9 +88,6 @@ extern const rb_data_type_t notmuch_rb_tags_type; #define Data_Get_Notmuch_Directory(obj, ptr) \ Data_Get_Notmuch_Object ((obj), ¬much_rb_directory_type, (ptr)) -#define Data_Get_Notmuch_FileNames(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), ¬much_rb_filenames_type, (ptr)) - #define Data_Get_Notmuch_Query(obj, ptr) \ Data_Get_Notmuch_Object ((obj), ¬much_rb_query_type, (ptr)) @@ -226,10 +219,7 @@ notmuch_rb_directory_get_child_directories (VALUE self); /* filenames.c */ VALUE -notmuch_rb_filenames_destroy (VALUE self); - -VALUE -notmuch_rb_filenames_each (VALUE self); +notmuch_rb_filenames_get (notmuch_filenames_t *fnames); /* query.c */ VALUE @@ -370,10 +360,7 @@ notmuch_rb_message_thaw (VALUE self); /* tags.c */ VALUE -notmuch_rb_tags_destroy (VALUE self); - -VALUE -notmuch_rb_tags_each (VALUE self); +notmuch_rb_tags_get (notmuch_tags_t *tags); /* init.c */ void diff --git a/bindings/ruby/directory.c b/bindings/ruby/directory.c index 910f0a99..f267d82f 100644 --- a/bindings/ruby/directory.c +++ b/bindings/ruby/directory.c @@ -87,7 +87,7 @@ notmuch_rb_directory_get_child_files (VALUE self) fnames = notmuch_directory_get_child_files (dir); - return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, ¬much_rb_filenames_type, fnames); + return notmuch_rb_filenames_get (fnames); } /* @@ -106,5 +106,5 @@ notmuch_rb_directory_get_child_directories (VALUE self) fnames = notmuch_directory_get_child_directories (dir); - return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, ¬much_rb_filenames_type, fnames); + return notmuch_rb_filenames_get (fnames); } diff --git a/bindings/ruby/filenames.c b/bindings/ruby/filenames.c index 0dec1952..60c3fb8b 100644 --- a/bindings/ruby/filenames.c +++ b/bindings/ruby/filenames.c @@ -1,53 +1,11 @@ -/* The Ruby interface to the notmuch mail library - * - * Copyright © 2010 Ali Polatel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see https://www.gnu.org/licenses/ . - * - * Author: Ali Polatel <alip@exherbo.org> - */ - #include "defs.h" -/* - * call-seq: FILENAMES.destroy! => nil - * - * Destroys the filenames, freeing all resources allocated for it. - */ -VALUE -notmuch_rb_filenames_destroy (VALUE self) -{ - notmuch_rb_object_destroy (self, ¬much_rb_filenames_type); - - return Qnil; -} - -/* - * call-seq: FILENAMES.each {|item| block } => FILENAMES - * - * Calls +block+ once for each element in +self+, passing that element as a - * parameter. - */ VALUE -notmuch_rb_filenames_each (VALUE self) +notmuch_rb_filenames_get (notmuch_filenames_t *fnames) { - notmuch_filenames_t *fnames; - - Data_Get_Notmuch_FileNames (self, fnames); + VALUE rb_array = rb_ary_new (); for (; notmuch_filenames_valid (fnames); notmuch_filenames_move_to_next (fnames)) - rb_yield (rb_str_new2 (notmuch_filenames_get (fnames))); - - return self; + rb_ary_push (rb_array, rb_str_new2 (notmuch_filenames_get (fnames))); + return rb_array; } diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c index cd9f04cd..2d1994af 100644 --- a/bindings/ruby/init.c +++ b/bindings/ruby/init.c @@ -22,13 +22,11 @@ VALUE notmuch_rb_cDatabase; VALUE notmuch_rb_cDirectory; -VALUE notmuch_rb_cFileNames; VALUE notmuch_rb_cQuery; VALUE notmuch_rb_cThreads; VALUE notmuch_rb_cThread; VALUE notmuch_rb_cMessages; VALUE notmuch_rb_cMessage; -VALUE notmuch_rb_cTags; VALUE notmuch_rb_eBaseError; VALUE notmuch_rb_eDatabaseError; @@ -43,8 +41,6 @@ VALUE notmuch_rb_eUnbalancedFreezeThawError; VALUE notmuch_rb_eUnbalancedAtomicError; ID ID_call; -ID ID_db_create; -ID ID_db_mode; const rb_data_type_t notmuch_rb_object_type = { .wrap_struct_name = "notmuch_object", @@ -65,13 +61,11 @@ const rb_data_type_t notmuch_rb_object_type = { define_type (database); define_type (directory); -define_type (filenames); define_type (query); define_type (threads); define_type (thread); define_type (messages); define_type (message); -define_type (tags); /* * Document-module: Notmuch @@ -86,13 +80,11 @@ define_type (tags); * the user: * * - Notmuch::Database - * - Notmuch::FileNames * - Notmuch::Query * - Notmuch::Threads * - Notmuch::Messages * - Notmuch::Thread * - Notmuch::Message - * - Notmuch::Tags */ void @@ -101,8 +93,6 @@ Init_notmuch (void) VALUE mod; ID_call = rb_intern ("call"); - ID_db_create = rb_intern ("create"); - ID_db_mode = rb_intern ("mode"); mod = rb_define_module ("Notmuch"); @@ -298,17 +288,6 @@ Init_notmuch (void) rb_define_method (notmuch_rb_cDirectory, "child_directories", notmuch_rb_directory_get_child_directories, 0); /* in directory.c */ /* - * Document-class: Notmuch::FileNames - * - * Notmuch file names - */ - notmuch_rb_cFileNames = rb_define_class_under (mod, "FileNames", rb_cObject); - rb_undef_method (notmuch_rb_cFileNames, "initialize"); - rb_define_method (notmuch_rb_cFileNames, "destroy!", notmuch_rb_filenames_destroy, 0); /* in filenames.c */ - rb_define_method (notmuch_rb_cFileNames, "each", notmuch_rb_filenames_each, 0); /* in filenames.c */ - rb_include_module (notmuch_rb_cFileNames, rb_mEnumerable); - - /* * Document-class: Notmuch::Query * * Notmuch query @@ -395,15 +374,4 @@ Init_notmuch (void) rb_define_method (notmuch_rb_cMessage, "tags_to_maildir_flags", notmuch_rb_message_tags_to_maildir_flags, 0); /* in message.c */ rb_define_method (notmuch_rb_cMessage, "freeze", notmuch_rb_message_freeze, 0); /* in message.c */ rb_define_method (notmuch_rb_cMessage, "thaw", notmuch_rb_message_thaw, 0); /* in message.c */ - - /* - * Document-class: Notmuch::Tags - * - * Notmuch tags - */ - notmuch_rb_cTags = rb_define_class_under (mod, "Tags", rb_cObject); - rb_undef_method (notmuch_rb_cTags, "initialize"); - rb_define_method (notmuch_rb_cTags, "destroy!", notmuch_rb_tags_destroy, 0); /* in tags.c */ - rb_define_method (notmuch_rb_cTags, "each", notmuch_rb_tags_each, 0); /* in tags.c */ - rb_include_module (notmuch_rb_cTags, rb_mEnumerable); } diff --git a/bindings/ruby/message.c b/bindings/ruby/message.c index f45c95cc..13c182f6 100644 --- a/bindings/ruby/message.c +++ b/bindings/ruby/message.c @@ -120,7 +120,7 @@ notmuch_rb_message_get_filenames (VALUE self) fnames = notmuch_message_get_filenames (message); - return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, ¬much_rb_filenames_type, fnames); + return notmuch_rb_filenames_get (fnames); } /* @@ -221,7 +221,7 @@ notmuch_rb_message_get_tags (VALUE self) if (!tags) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); + return notmuch_rb_tags_get (tags); } /* diff --git a/bindings/ruby/messages.c b/bindings/ruby/messages.c index ca5b10d0..6369d052 100644 --- a/bindings/ruby/messages.c +++ b/bindings/ruby/messages.c @@ -71,5 +71,5 @@ notmuch_rb_messages_collect_tags (VALUE self) if (!tags) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); + return notmuch_rb_tags_get (tags); } diff --git a/bindings/ruby/query.c b/bindings/ruby/query.c index 8a2b4d3d..077def02 100644 --- a/bindings/ruby/query.c +++ b/bindings/ruby/query.c @@ -45,7 +45,7 @@ notmuch_rb_query_get_sort (VALUE self) Data_Get_Notmuch_Query (self, query); - return FIX2INT (notmuch_query_get_sort (query)); + return INT2FIX (notmuch_query_get_sort (query)); } /* diff --git a/bindings/ruby/tags.c b/bindings/ruby/tags.c index 2af85e36..b64874d1 100644 --- a/bindings/ruby/tags.c +++ b/bindings/ruby/tags.c @@ -1,56 +1,13 @@ -/* The Ruby interface to the notmuch mail library - * - * Copyright © 2010, 2011 Ali Polatel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see https://www.gnu.org/licenses/ . - * - * Author: Ali Polatel <alip@exherbo.org> - */ - #include "defs.h" -/* - * call-seq: TAGS.destroy! => nil - * - * Destroys the tags, freeing all resources allocated for it. - */ -VALUE -notmuch_rb_tags_destroy (VALUE self) -{ - notmuch_rb_object_destroy (self, ¬much_rb_tags_type); - - return Qnil; -} - -/* - * call-seq: TAGS.each {|item| block } => TAGS - * - * Calls +block+ once for each element in +self+, passing that element as a - * parameter. - */ VALUE -notmuch_rb_tags_each (VALUE self) +notmuch_rb_tags_get (notmuch_tags_t *tags) { - const char *tag; - notmuch_tags_t *tags; - - Data_Get_Notmuch_Tags (self, tags); + VALUE rb_array = rb_ary_new (); for (; notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { - tag = notmuch_tags_get (tags); - rb_yield (rb_str_new2 (tag)); + const char *tag = notmuch_tags_get (tags); + rb_ary_push (rb_array, rb_str_new2 (tag)); } - - return self; + return rb_array; } diff --git a/bindings/ruby/thread.c b/bindings/ruby/thread.c index 7cb2a3dc..b20ed893 100644 --- a/bindings/ruby/thread.c +++ b/bindings/ruby/thread.c @@ -204,5 +204,5 @@ notmuch_rb_thread_get_tags (VALUE self) if (!tags) rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, ¬much_rb_tags_type, tags); + return notmuch_rb_tags_get (tags); } |
