It seems like there was some bitrot on the previous version of this
which made it not work correctly. This fixes the bitrot and also
updates how it works.
- Sometimes [PATCH.*] isn't at the beginning of the message (often on
lists I'm on).
- It now goes through all the messages in the thread. for some reason
the toplevel messages didn't usually contain all the patches in my
testing.
- Check for 'Re:' at the beginning and skip if it's there.
- Save patches to filesystem-safe filename containing the subject
(unfortunately we use system()...)
Ian
---
We now prompt for directory name to save to. Also save in the format
closer to git with numbers first.
vim/notmuch.vim | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/vim/notmuch.vim b/vim/notmuch.vim
index 331e930..8c46bb0 100644
--- a/vim/notmuch.vim
+++ b/vim/notmuch.vim
@@ -178,16 +178,32 @@ EOF
endfunction
function! s:show_save_patches()
+ let dir = input('Save to directory: ', getcwd(), 'dir')
ruby << EOF
- q = $curbuf.query($cur_thread)
- t = q.search_threads.first
- n = 0
- t.toplevel_messages.first.replies.each do |m|
- next if not m['subject'] =~ /^\[PATCH.*\]/
- file = "%04d.patch" % [n += 1]
- system "notmuch show --format=mbox id:#{m.message_id} > #{file}"
- end
- vim_puts "Saved #{n} patches"
+ dir = VIM::evaluate('dir')
+ if File.exists?(dir)
+ q = $curbuf.query($cur_thread)
+ t = q.search_threads.first
+ n = 0
+ m = get_message
+ t.messages.each do |m|
+ next if not m['subject'] =~ /\[PATCH.*\]/
+ next if m['subject'] =~ /^Re:/
+ subject = m['subject']
+ # Sanitize for the filesystem
+ subject.gsub!(/[^0-9A-Za-z.\-]/, '_')
+ # Remove leading underscores.
+ subject.gsub!(/^_+/, '')
+ # git style numbered patchset format.
+ file = "#{dir}/%04d-#{subject}.patch" % [n += 1]
+ vim_puts "Saving patch to #{file}"
+ system "notmuch show --format=mbox id:#{m.message_id} > #{file}"
+ end
+ vim_puts "Saved #{n} patch(es)"
+ else
+ VIM::command('redraw')
+ vim_puts "ERROR: Invalid directory: #{dir}"
+ end
EOF
endfunction
--
1.9.3