From cca2c869e4a26b4bb8b0b43c6034c4ec6f0b69d2 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sat, 12 Jul 2025 20:11:40 -0300 Subject: [PATCH] cli/git-remote: add check for missing messages 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 | 33 ++++++++++++++++++++++++++++++++- test/T860-git-remote.sh | 1 - 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/git-remote-notmuch.c b/git-remote-notmuch.c index c5c46b1f..74c6d702 100644 --- a/git-remote-notmuch.c +++ b/git-remote-notmuch.c @@ -460,8 +460,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 diff --git a/test/T860-git-remote.sh b/test/T860-git-remote.sh index fa52c2b7..2b826c88 100755 --- a/test/T860-git-remote.sh +++ b/test/T860-git-remote.sh @@ -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 -- 2.45.2