[PATCH v3 08/13] lib: Use database features to drive upgrade
Previously, we had database version information hard-coded in the upgrade code. Slightly re-organize the upgrade process around the set of new database features to be enabled by the upgrade. --- lib/database.cc | 24 +--- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/database.cc b/lib/database.cc index faeab51..69d775f 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1195,11 +1195,12 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, void *closure) { void *local = talloc_new (NULL); +Xapian::TermIterator t, t_end; Xapian::WritableDatabase *db; struct sigaction action; struct itimerval timerval; notmuch_bool_t timer_is_active = FALSE; -unsigned int version; +unsigned int target_features, new_features; notmuch_status_t status; unsigned int count = 0, total = 0; @@ -1209,9 +1210,10 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, db = static_cast (notmuch->xapian_db); -version = notmuch_database_get_version (notmuch); +target_features = notmuch->features | NOTMUCH_FEATURES_CURRENT; +new_features = NOTMUCH_FEATURES_CURRENT & ~notmuch->features; -if (version >= NOTMUCH_DATABASE_VERSION) +if (! new_features) return NOTMUCH_STATUS_SUCCESS; if (progress_notify) { @@ -1237,18 +1239,17 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, /* Set the target features so we write out changes in the desired * format. */ -notmuch->features |= NOTMUCH_FEATURES_CURRENT; +notmuch->features = target_features; /* Before version 1, each message document had its filename in the * data field. Copy that into the new format by calling * notmuch_message_add_filename. */ -if (version < 1) { +if (new_features & NOTMUCH_FEATURE_FILE_TERMS) { notmuch_query_t *query = notmuch_query_create (notmuch, ""); notmuch_messages_t *messages; notmuch_message_t *message; char *filename; - Xapian::TermIterator t, t_end; total = notmuch_query_count_messages (query); @@ -1277,11 +1278,12 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, } notmuch_query_destroy (query); +} - /* Also, before version 1 we stored directory timestamps in -* XTIMESTAMP documents instead of the current XDIRECTORY -* documents. So copy those as well. */ - +/* Also, before version 1 we stored directory timestamps in + * XTIMESTAMP documents instead of the current XDIRECTORY + * documents. So copy those as well. */ +if (new_features & NOTMUCH_FEATURE_DIRECTORY_DOCS) { t_end = notmuch->xapian_db->allterms_end ("XTIMESTAMP"); for (t = notmuch->xapian_db->allterms_begin ("XTIMESTAMP"); @@ -1325,7 +1327,7 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, * stemmed. Change it to the current boolean prefix. Add "path:" * prefixes while at it. */ -if (version < 2) { +if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER) { notmuch_query_t *query = notmuch_query_create (notmuch, ""); notmuch_messages_t *messages; notmuch_message_t *message; -- 2.0.0
[PATCH v3 08/13] lib: Use database features to drive upgrade
Previously, we had database version information hard-coded in the upgrade code. Slightly re-organize the upgrade process around the set of new database features to be enabled by the upgrade. --- lib/database.cc | 24 +--- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/database.cc b/lib/database.cc index faeab51..69d775f 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1195,11 +1195,12 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, void *closure) { void *local = talloc_new (NULL); +Xapian::TermIterator t, t_end; Xapian::WritableDatabase *db; struct sigaction action; struct itimerval timerval; notmuch_bool_t timer_is_active = FALSE; -unsigned int version; +unsigned int target_features, new_features; notmuch_status_t status; unsigned int count = 0, total = 0; @@ -1209,9 +1210,10 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, db = static_cast Xapian::WritableDatabase * (notmuch-xapian_db); -version = notmuch_database_get_version (notmuch); +target_features = notmuch-features | NOTMUCH_FEATURES_CURRENT; +new_features = NOTMUCH_FEATURES_CURRENT ~notmuch-features; -if (version = NOTMUCH_DATABASE_VERSION) +if (! new_features) return NOTMUCH_STATUS_SUCCESS; if (progress_notify) { @@ -1237,18 +1239,17 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, /* Set the target features so we write out changes in the desired * format. */ -notmuch-features |= NOTMUCH_FEATURES_CURRENT; +notmuch-features = target_features; /* Before version 1, each message document had its filename in the * data field. Copy that into the new format by calling * notmuch_message_add_filename. */ -if (version 1) { +if (new_features NOTMUCH_FEATURE_FILE_TERMS) { notmuch_query_t *query = notmuch_query_create (notmuch, ); notmuch_messages_t *messages; notmuch_message_t *message; char *filename; - Xapian::TermIterator t, t_end; total = notmuch_query_count_messages (query); @@ -1277,11 +1278,12 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, } notmuch_query_destroy (query); +} - /* Also, before version 1 we stored directory timestamps in -* XTIMESTAMP documents instead of the current XDIRECTORY -* documents. So copy those as well. */ - +/* Also, before version 1 we stored directory timestamps in + * XTIMESTAMP documents instead of the current XDIRECTORY + * documents. So copy those as well. */ +if (new_features NOTMUCH_FEATURE_DIRECTORY_DOCS) { t_end = notmuch-xapian_db-allterms_end (XTIMESTAMP); for (t = notmuch-xapian_db-allterms_begin (XTIMESTAMP); @@ -1325,7 +1327,7 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, * stemmed. Change it to the current boolean prefix. Add path: * prefixes while at it. */ -if (version 2) { +if (new_features NOTMUCH_FEATURE_BOOL_FOLDER) { notmuch_query_t *query = notmuch_query_create (notmuch, ); notmuch_messages_t *messages; notmuch_message_t *message; -- 2.0.0 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch