[PATCH] Handle rename of message file

classic Classic list List threaded Threaded
6 messages Options
Mikhail Gusarov Mikhail Gusarov
Reply | Threaded
Open this post in threaded view
|

[PATCH] Handle rename of message file

If message file has been renamed, just update filename in the DB.

Signed-off-by: Mikhail Gusarov <[hidden email]>
---
 lib/database.cc |   21 ++++++++++++---------
 1 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/lib/database.cc b/lib/database.cc
index 3c8d626..c4eb8b6 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -925,20 +925,23 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
  if (private_status == NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND) {
     _notmuch_message_set_filename (message, filename);
     _notmuch_message_add_term (message, "type", "mail");
+
+    ret = _notmuch_database_link_message (notmuch, message, message_file);
+    if (ret)
+ goto DONE;
+
+    date = notmuch_message_file_get_header (message_file, "date");
+    _notmuch_message_set_date (message, date);
+
+    _notmuch_message_index_file (message, filename);
+ } else if (strcmp(notmuch_message_get_filename(message), filename)) {
+    /* Message file has been moved/renamed */
+    _notmuch_message_set_filename (message, filename);
  } else {
     ret = NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;
     goto DONE;
  }
 
- ret = _notmuch_database_link_message (notmuch, message, message_file);
- if (ret)
-    goto DONE;
-
- date = notmuch_message_file_get_header (message_file, "date");
- _notmuch_message_set_date (message, date);
-
- _notmuch_message_index_file (message, filename);
-
  _notmuch_message_sync (message);
     } catch (const Xapian::Error &error) {
  fprintf (stderr, "A Xapian exception occurred: %s.\n",
--
1.6.3.3


Carl Worth-2 Carl Worth-2
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Handle rename of message file

On Wed, 18 Nov 2009 02:51:18 +0600, Mikhail Gusarov <[hidden email]> wrote:
> If message file has been renamed, just update filename in the DB.
>
> Signed-off-by: Mikhail Gusarov <[hidden email]>

I believe you said in IRC that this patch is not ready yet.

I'd love to hear more from you on any experiments/ideas you have in this
area. It would be a really nice feature to have, (particularly for
people who are experimenting with notmuch while still using some other
primary email program that keeps fiddling with the filenames).

-Carl

Mikhail Gusarov Mikhail Gusarov
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Handle rename of message file


Twas brillig at 02:08:15 19.11.2009 UTC+01 when [hidden email] did gyre and gimble:

 CW> I believe you said in IRC that this patch is not ready yet.

Yes.

 CW> I'd love to hear more from you on any experiments/ideas you have in
 CW> this area. It would be a really nice feature to have, (particularly
 CW> for people who are experimenting with notmuch while still using
 CW> some other primary email program that keeps fiddling with the
 CW> filenames).

Did not have time to work on it further yet.

The only dumb idea I have in mind is hardlinking all mail to separate
directory in order to make a "pristine copy" which does not change as
time goes. This directory could be cleaned up: if some file has only 1
link, then it was deleted from main mail spool and should be deleted
From copy too.

--
  http://fossarchy.blogspot.com/

attachment0 (834 bytes) Download Attachment
Keith Packard Keith Packard
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Handle rename of message file

In reply to this post by Carl Worth-2
On Thu, 19 Nov 2009 02:08:15 +0100, Carl Worth <[hidden email]> wrote:

> I'd love to hear more from you on any experiments/ideas you have in this
> area. It would be a really nice feature to have, (particularly for
> people who are experimenting with notmuch while still using some other
> primary email program that keeps fiddling with the filenames).

Checking for new files is easy; notmuch already does that, and so
handling renames doesn't seem all that difficult. The hard part to me is
detecting deleted messages; about the only thing I can imagine being at
all efficient is to use inotify in a daemon. Starting that daemon up
would entail scanning the database for all messages in a particular
directory and then looking for those files to see if they were still
around. Ick.

--
[hidden email]





attachment0 (189 bytes) Download Attachment
Mikhail Gusarov Mikhail Gusarov
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Handle rename of message file


Twas brillig at 18:06:09 18.11.2009 UTC-08 when [hidden email] did gyre and gimble:

 KP> Checking for new files is easy; notmuch already does that, and so
 KP> handling renames doesn't seem all that difficult.

Except rename does not change mtime of file, and so it won't be picked
up by 'notmuch new'.

--
  http://fossarchy.blogspot.com/

attachment0 (834 bytes) Download Attachment
Keith Packard Keith Packard
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Handle rename of message file

On Thu, 19 Nov 2009 08:11:12 +0600, Mikhail Gusarov <[hidden email]> wrote:
>
> Twas brillig at 18:06:09 18.11.2009 UTC-08 when [hidden email] did gyre and gimble:
>
>  KP> Checking for new files is easy; notmuch already does that, and so
>  KP> handling renames doesn't seem all that difficult.
>
> Except rename does not change mtime of file, and so it won't be picked
> up by 'notmuch new'.

Yeah, good point -- notmuch new doesn't make sure each file it finds is
already in the database. Again, some kind of inotify-based daemon would
make that efficient, while starting up that daemon could take some time
while the database was searched for new or missing files.

Alternatively, we could record the contents of the directory after
scanning it and then use that to track file changes. It seems like the
current database just doesn't have enough information to make this
tractable.

--
[hidden email]


attachment0 (189 bytes) Download Attachment