]> git.notmuchmail.org Git - notmuch/commitdiff
cli/git-remote: add check for missing messages
authorDavid Bremner <david@tethera.net>
Sat, 24 Jan 2026 22:56:40 +0000 (07:56 +0900)
committerDavid Bremner <david@tethera.net>
Sun, 15 Feb 2026 22:24:18 +0000 (07:24 +0900)
In cases where a given 'export' both adds and deletes messages, we may
not know what messages are actually missing until the end of
processing. We thus do single pass of all remaining message-ids, and
report any that are still missing at the end of the "export"
operation.

git-remote-notmuch.c
test/T860-git-remote.sh

index a81c969e79d3eeeadf6622f438e8bb66e4d4e1cf..33ded395a5642622833041c7c6447bdf6a9a0667 100644 (file)
@@ -470,8 +470,39 @@ purge_database (notmuch_database_t *notmuch, GHashTable *msg_state)
 }
 
 static void
-check_missing (unused (notmuch_database_t *notmuch), unused (GHashTable *mid_state))
+check_missing (notmuch_database_t *notmuch, GHashTable *mid_state)
 {
+    notmuch_status_t status;
+    notmuch_bool_t strict;
+    gpointer key, value;
+
+    GHashTableIter iter;
+    int count = 0;
+
+    status = notmuch_config_get_bool (notmuch,
+                                     NOTMUCH_CONFIG_GIT_FAIL_ON_MISSING,
+                                     &strict);
+    if (print_status_database ("config_get_bool", notmuch,  status))
+       exit (EXIT_FAILURE);
+
+    g_hash_table_iter_init (&iter, mid_state);
+    while (g_hash_table_iter_next (&iter, &key, &value)) {
+       if (GPOINTER_TO_INT (value) != MSG_STATE_MISSING)
+           continue;
+
+       fprintf (stderr, "%c: missing mid %s\n", strict ? 'E' : 'W', (const char *) key);
+       flog ("%c: missing mid %s\n", strict ? 'E' : 'W', (const char *) key);
+       count++;
+    }
+
+    if (count > 0) {
+       if (strict) {
+           fprintf (stderr, "E: %d missing messages\n", count);
+           exit (1);
+       } else {
+           flog ("I: ignoring missing messages\n");
+       }
+    }
 }
 
 static void
index fa52c2b788385242b36ffcfd1f5424f5624d6ed8..2b826c880fb00b7f79ea87650eb06077be528a7a 100755 (executable)
@@ -303,7 +303,6 @@ restore_state
 
 backup_state
 test_begin_subtest 'by default, missing messages are an error during export'
-test_subtest_known_broken
 sed s/4EFC743A.3060609@april.org/missing-message@example.com/ < export.in > missing.in
 test_expect_code 1 "run_helper < missing.in"
 restore_state