[PATCH v3 08/13] lib: Use database features to drive upgrade

2014-07-31 Thread Austin Clements
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

2014-07-31 Thread Austin Clements
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