<feed xmlns='http://www.w3.org/2005/Atom'>
<title>notmuch/test, branch feature/git-remote</title>
<subtitle>thread-based email index, search, and tagging</subtitle>
<id>https://git.notmuchmail.org/git/notmuch/atom?h=feature%2Fgit-remote</id>
<link rel='self' href='https://git.notmuchmail.org/git/notmuch/atom?h=feature%2Fgit-remote'/>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/'/>
<updated>2025-08-11T12:52:10Z</updated>
<entry>
<title>cli/git-remote: add check for missing messages</title>
<updated>2025-08-11T12:52:10Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2025-07-12T23:11:40Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=cca2c869e4a26b4bb8b0b43c6034c4ec6f0b69d2'/>
<id>urn:sha1:cca2c869e4a26b4bb8b0b43c6034c4ec6f0b69d2</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>cli/git-remote: handle message deletions</title>
<updated>2025-08-11T12:52:10Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2025-07-12T23:06:01Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=448c8ca81a3ca9f5c7d2cc20671bb81d7a551f67'/>
<id>urn:sha1:448c8ca81a3ca9f5c7d2cc20671bb81d7a551f67</id>
<content type='text'>
There are two main possibilities. One is explicit delete ('D' command
in the stream from git fast-export) and one is files disappearing
between commits. It is less clear the latter can happen in well formed
sequence of commits, but it could result e.g. from manual changes to
the repo.
</content>
</entry>
<entry>
<title>cli/git-remote: add export command</title>
<updated>2025-08-11T12:52:10Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2024-08-24T15:43:03Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=271dede0c9a8083aa56af153d55388af8521f6c8'/>
<id>urn:sha1:271dede0c9a8083aa56af153d55388af8521f6c8</id>
<content type='text'>
Two (sub)features are stubbed out in this initial implementation:
deleting messages (as opposed to tags), and missing messages. There
are two corresponding tests marked as broken in T860-git-remote.sh.
A third test passes with the stub, which is maybe not ideal, but at
least it acts as a regression test.
</content>
</entry>
<entry>
<title>cli/git-remote: add import command</title>
<updated>2025-08-11T12:52:10Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2024-08-24T15:13:46Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=f6526e6571847d1f27e0e4fead59a3b18c5fe455'/>
<id>urn:sha1:f6526e6571847d1f27e0e4fead59a3b18c5fe455</id>
<content type='text'>
The output in default.import is based on a modified version
of Felipe's git-remote-nm with Blake2 hashing replaced by SHA1
(for portability). This enable fetch/pull/clone, so test that as well.
</content>
</entry>
<entry>
<title>cli: start remote helper for git.</title>
<updated>2025-08-11T12:52:10Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2024-08-17T15:40:40Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=b8c2e8743ef21ea8e3c44f91a54132b16e92f1ba'/>
<id>urn:sha1:b8c2e8743ef21ea8e3c44f91a54132b16e92f1ba</id>
<content type='text'>
This is closely based on git-remote-nm (in ruby) by Felipe Contreras.
Initially just implement the commands 'capabilites' and 'list'.  This
isn't enough to do anything useful so start some unit tests. Testing
of URL passing will be done after clone (import command) support is
added.
</content>
</entry>
<entry>
<title>lib/config: add config keys for git-remote-notmuch.</title>
<updated>2025-08-09T11:19:43Z</updated>
<author>
<name>David Bremner</name>
<email>david@tethera.net</email>
</author>
<published>2024-10-12T00:58:41Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=de97e0cbdbf48bd5f7576ca0107c1e8542277cdf'/>
<id>urn:sha1:de97e0cbdbf48bd5f7576ca0107c1e8542277cdf</id>
<content type='text'>
The precise function will be explained in a future update to
notmuch-config(1).
</content>
</entry>
<entry>
<title>lib: add notmuch_threads_status()</title>
<updated>2025-08-04T13:43:35Z</updated>
<author>
<name>Anton Khirnov</name>
<email>anton@khirnov.net</email>
</author>
<published>2025-07-28T14:26:56Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=11d373b4fd05f5409bf5c49459fe141d2235f7f5'/>
<id>urn:sha1:11d373b4fd05f5409bf5c49459fe141d2235f7f5</id>
<content type='text'>
While a number of errors can happen when iterating over threads
(DatabaseModifiedError, memory allocation errors, etc.), the API
currently cannot signal them to the caller, and either triggers an
internal error (aborting the caller) or returns NULL from
notmuch_threads_get() with no information on what actually went wrong.

Add a new public function notmuch_threads_status() - similar to
previously added notmuch_messages_status() - that allows propagating
those errors to the caller.

Use this to remove the INTERNAL_ERROR() in _notmuch_thread_create()
(triggered by T642).

Fixes: https://github.com/pazz/alot/issues/1460

Amended-By: db. Resolved whitespace disagreement between emacs and
uncrustify in favour of uncrustify.
</content>
</entry>
<entry>
<title>test: add a known broken test for DatabaseModifiedError from threads iteration</title>
<updated>2025-08-04T13:17:53Z</updated>
<author>
<name>Anton Khirnov</name>
<email>anton@khirnov.net</email>
</author>
<published>2025-07-28T07:37:58Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=32af882648325ba1a24f031c0d2728b2553a5e6e'/>
<id>urn:sha1:32af882648325ba1a24f031c0d2728b2553a5e6e</id>
<content type='text'>
This is similar to previously added T641, except here we iterate over
threads rather than messages.

After f375ea1add121c428f261473512831a169dfe335, the
DatabaseModifiedError raised by Xapian is now handled in
_notmuch_message_create(), resulting in a NULL message being returned to
_notmuch_thread_create(), which currently triggers an internal error.
</content>
</entry>
<entry>
<title>lib: handle DatabaseModifiedError in _notmuch_message_create</title>
<updated>2025-07-24T10:30:58Z</updated>
<author>
<name>Anton Khirnov</name>
<email>anton@khirnov.net</email>
</author>
<published>2025-07-07T12:27:06Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=f375ea1add121c428f261473512831a169dfe335'/>
<id>urn:sha1:f375ea1add121c428f261473512831a169dfe335</id>
<content type='text'>
If an open database is modified sufficiently by other callers, the open
instance becomes invalid and operations on it throw
DatabaseModifiedError. Per Xapian documentation, the caller is then
supposed to reopen the database and restart the query. This exception is
currently not handled in _notmuch_message_create(), leading to the
default handler abort()ing the process.

Catch this exception in _notmuch_message_create() and return an error
instead of crashing. Since the entire query becomes invalid - including
results that have already been read by the caller - this situation
cannot be handled by libnotmuch transparently. A new public function -
notmuch_messages_status() - is added to allow the callers to check
whether the messages iterator was exhausted or terminated early due to
a runtime error. This also allows memory allocation failure to be
signalled to the caller.

Amended-By: David Bremner &lt;david@tethera.net&gt;
            [replace use of notmuch_messages_valid]
</content>
</entry>
<entry>
<title>test: add another known broken test for uncaught DatabaseModifiedError</title>
<updated>2025-07-06T12:14:49Z</updated>
<author>
<name>Anton Khirnov</name>
<email>anton@khirnov.net</email>
</author>
<published>2025-07-05T15:18:16Z</published>
<link rel='alternate' type='text/html' href='https://git.notmuchmail.org/git/notmuch/commit/?id=4547ae5aa8fc7fd5d05da801c9fa9c055d39636f'/>
<id>urn:sha1:4547ae5aa8fc7fd5d05da801c9fa9c055d39636f</id>
<content type='text'>
This one is raised from _notmuch_message_create().

See also https://github.com/pazz/alot/issues/1460#issuecomment-2994101019
</content>
</entry>
</feed>
