Dear list members, I think I found a bug or at least undocumented behaviour in the notmuch library. I would like to report this here. Originally I found the bug in the python library but I attached a c program that shows the same behaviour. I am running notmuch version 0.22.1 from the Arch Linux repositories.
The setup: 1. chose a query string, e.g. "is:inbox or is:spam" 2. chose a tag to exclude that is matched by the query, e.g. "spam" 3. open the database 4. create a query 5. check the message or thread count any number of times 6. exclude the tag from the query 7. check the message or thread count any number of times The result: - In step 5 the result stays the same if I repeatedly call notmuch_query_count_messages_st or query.count_messages. - In step 7 the count is different between the first call and all subsequent calls. But neither seems correct to me. I always get the same number as in step 5 for the first call and 0 afterwards. Expected result: - subsequent calls to notmuch_query_count_messages_st or query.count_messages should yield the same result - the exclusion should change the count to the actual amount (for "is:inbox or is:spam" I get 891 and for a plain "is:inbox" I get 58, which never shows up in step 7) Attached you can find a python and a c program that exhibit this behaviour. Please compile the c program with cc -DDB_PATH=\"/path/to/your/mail\" -lnotmuch test.c My question: Is this documented somewhere? Is it actually a bug or is it already fixed in a newer version? Thank you for developing notmuch! Lucas
#!/usr/bin/python3
import sys
import notmuch
query_string = sys.argv[1] if len(sys.argv) > 1 else 'tag:inbox or tag:spam'
tag_string = sys.argv[2] if len(sys.argv) > 2 else 'spam'
database = notmuch.Database(mode=notmuch.Database.MODE.READ_ONLY)
query = notmuch.Query(database, query_string)
print("{} messages".format(query.count_messages()))
print("{} messages".format(query.count_messages()))
print("Exclude '{}'".format(tag_string))
query.exclude_tag(tag_string)
print("{} messages".format(query.count_messages()))
print("{} messages".format(query.count_messages()))
del database
#include<stdio.h>
#include<notmuch.h>
#ifndef DB_PATH
# define DB_PATH "/home/luc/mail"
#endif
int main(int argc, char** argv) {
notmuch_database_t* database;
notmuch_query_t* query;
unsigned int count = 0;
notmuch_database_open(DB_PATH, NOTMUCH_DATABASE_MODE_READ_WRITE, &database);
query = notmuch_query_create(database, "is:inbox or is:spam");
notmuch_query_count_messages_st(query, &count);
printf("1. run of notmuch_query_count_messages_st yields %d\n", count);
notmuch_query_count_messages_st(query, &count);
printf("2. run of notmuch_query_count_messages_st yields %d\n", count);
printf("Excluding 'spam'\n");
notmuch_query_add_tag_exclude(query, "spam");
notmuch_query_count_messages_st(query, &count);
printf("3. run of notmuch_query_count_messages_st yields %d\n", count);
notmuch_query_count_messages_st(query, &count);
printf("4. run of notmuch_query_count_messages_st yields %d\n", count);
return 0;
}
signature.asc
Description: signature
_______________________________________________ notmuch mailing list [email protected] https://notmuchmail.org/mailman/listinfo/notmuch
