unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views
@ 2012-10-24  6:59 Tomi Ollila
  2012-10-24  6:59 ` [PATCH 2/2] contrib/nmbug/nmbug-status: combine thread messages Tomi Ollila
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Tomi Ollila @ 2012-10-24  6:59 UTC (permalink / raw)
  To: notmuch; +Cc: tomi.ollila

In latest configuration quite a few long views were added to the
Notmuch Patches page. To ease navigating to the views a 'Views'
section was added to the beginning of page containing hyperlink
to every view.
---
 contrib/nmbug/nmbug-status |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/contrib/nmbug/nmbug-status b/contrib/nmbug/nmbug-status
index 9a334cc..c663409 100755
--- a/contrib/nmbug/nmbug-status
+++ b/contrib/nmbug/nmbug-status
@@ -67,7 +67,7 @@ def print_view(title, query, comment):
     last['thread_id'] = ''
 
     if output_format == 'html':
-        print '<h3>%s</h3>' % title
+        print '<h3><a name="%s" />%s</h3>' % (title, title)
         print comment
         print 'The view is generated from the following query:'
         print '<blockquote>'
@@ -144,6 +144,12 @@ if output_format == 'html':
     print 'Generated: %s<br />' % datetime.datetime.utcnow().date()
     print 'For more infomation see <a href="http://notmuchmail.org/nmbug">nmbug</a>'
 
+    print '<h3>Views</h3>'
+    print '<ul>'
+    for view in config['views']:
+        print '<li><a href="#%(title)s">%(title)s</a></li>' % view
+    print '</ul>'
+
 for view in config['views']:
     print_view(**view)
 
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] contrib/nmbug/nmbug-status: combine thread messages
  2012-10-24  6:59 [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views Tomi Ollila
@ 2012-10-24  6:59 ` Tomi Ollila
  2012-10-24  7:17 ` Tomi Ollila
  2012-10-24 21:58 ` [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views David Bremner
  2 siblings, 0 replies; 4+ messages in thread
From: Tomi Ollila @ 2012-10-24  6:59 UTC (permalink / raw)
  To: notmuch; +Cc: tomi.ollila

Newer patch email containing In-Reply-To: to an email sent some time ago
(i.e. to a "thread") was not visible in that "thread" in patch view when
another patch "thread" was submitted in between. This change collects
all messages in every (notmuch-created) thread together before printing
all these threads out in a patch view.

Thanks to Ethan Glasser-Camp for initial review and suggestions with
code examples.
---
Notes:

Thread class was added for convenience at late time to replace tuple
containing last dict & lines list; It could be more utilized -- my excuse
of not doing so is to minimize change...

OrderedDict could be used in place of threadlist but that requires 
Python 2.7 (I used python 2.6 where argparse.py was copied to cwd;
also nmbug site uses python 2.6...). 

The table row separator '\n<tr><td colspan="2"><br /></td></tr>\n'
is a hack; If someone knows better simple semantic alternative that
could be used later...

 contrib/nmbug/nmbug-status |   73 +++++++++++++++++++++++++++----------------
 1 files changed, 46 insertions(+), 27 deletions(-)

diff --git a/contrib/nmbug/nmbug-status b/contrib/nmbug/nmbug-status
index c663409..69b407c 100755
--- a/contrib/nmbug/nmbug-status
+++ b/contrib/nmbug/nmbug-status
@@ -51,12 +51,19 @@ if args.text:
 else:
     output_format = 'html'
 
-headers = ['date', 'from', 'subject']
-last = {}
+class Thread:
+    def __init__(self, last, lines):
+        self.last = last
+        self.lines = lines
+
+    def join_utf8_with_newlines(self):
+        return '\n'.join( (line.encode('utf-8') for line in self.lines) )
 
-def clear_last():
-    for header in headers:
-        last[header] = ''
+def output_with_separator(threadlist, sep):
+    outputs = (thread.join_utf8_with_newlines() for thread in threadlist)
+    print sep.join(outputs)
+
+headers = ['date', 'from', 'subject']
 
 def print_view(title, query, comment):
 
@@ -64,7 +71,12 @@ def print_view(title, query, comment):
     q_new = notmuch.Query(db, query_string)
     q_new.set_sort(notmuch.Query.SORT.OLDEST_FIRST)
 
-    last['thread_id'] = ''
+    last_thread_id = ''
+    threads = {}
+    threadlist = []
+    out = {}
+    last = None
+    lines = None
 
     if output_format == 'html':
         print '<h3><a name="%s" />%s</h3>' % (title, title)
@@ -77,11 +89,21 @@ def print_view(title, query, comment):
 
     for m in q_new.search_messages():
 
-        out = {}
-
         thread_id = m.get_thread_id()
-        if thread_id != last['thread_id']:
-            clear_last()
+
+        if thread_id != last_thread_id:
+            if threads.has_key(thread_id):
+                last = threads[thread_id].last
+                lines = threads[thread_id].lines
+            else:
+                last = {}
+                lines = []
+                thread = Thread(last, lines)
+                threads[thread_id] = thread
+                for h in headers:
+                    last[h] = ''
+                threadlist.append(thread)
+            last_thread_id = thread_id
 
         for header in headers:
             val = m.get_header(header)
@@ -94,38 +116,35 @@ def print_view(title, query, comment):
                 if val == '':
                     val = addr.split('@')[0]
 
-            if last[header] == val:
+            if header != 'subject' and last[header] == val:
                 out[header] = ''
             else:
-                out[header] = val.encode('utf-8')
+                out[header] = val
                 last[header] = val
 
         mid = m.get_message_id()
         out['id'] = 'id:"%s"' % mid
 
         if output_format == 'html':
-            # XXX using <br /> is a hack, but ... // 20111216 too
-            if thread_id != last['thread_id']:
-                br = '<br />'
-            else:
-                br = ''
 
             out['subject'] = '<a href="http://mid.gmane.org/%s">%s</a>' \
                 % (urllib.quote(mid), out['subject'])
 
-            print ' <tr><td>%s %s' % (br, out['date'])
-            print '</td><td>%s %s' % (br, out['id'])
-            print '</td></tr>'
-            print ' <tr><td>%s' % out['from']
-            print '</td><td>%s' % out['subject']
-            print '</td></tr>\n'
+            lines.append(' <tr><td>%s' % out['date'])
+            lines.append('</td><td>%s' % out['id'])
+            lines.append('</td></tr>')
+            lines.append(' <tr><td>%s' % out['from'])
+            lines.append('</td><td>%s' % out['subject'])
+            lines.append('</td></tr>')
         else:
-            print '%(date)-10.10s %(from)-20.20s %(subject)-40.40s\n%(id)72s\n' % out
-
-        last['thread_id'] = thread_id
+            lines.append('%(date)-10.10s %(from)-20.20s %(subject)-40.40s\n%(id)72s' % out)
 
     if output_format == 'html':
+        output_with_separator(threadlist,
+                              '\n<tr><td colspan="2"><br /></td></tr>\n')
         print '</table>'
+    else:
+        output_with_separator(threadlist, '\n\n')
 
 # main program
 
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] contrib/nmbug/nmbug-status: combine thread messages
  2012-10-24  6:59 [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views Tomi Ollila
  2012-10-24  6:59 ` [PATCH 2/2] contrib/nmbug/nmbug-status: combine thread messages Tomi Ollila
@ 2012-10-24  7:17 ` Tomi Ollila
  2012-10-24 21:58 ` [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views David Bremner
  2 siblings, 0 replies; 4+ messages in thread
From: Tomi Ollila @ 2012-10-24  7:17 UTC (permalink / raw)
  To: notmuch; +Cc: tomi.ollila

Newer patch email containing In-Reply-To: to an email sent some time ago
(i.e. to a "thread") was not visible in that "thread" in patch view when
another patch "thread" was submitted in between. This change collects
all messages in every (notmuch-created) thread together before printing
all these threads out in a patch view.

Thanks to Ethan Glasser-Camp for initial review and suggestions with
code examples.
---

Replaces: id:"1351061999-25473-2-git-send-email-tomi.ollila@iki.fi"
Change: restored out = {} where it was (and should be)

Notes:

Thread class was added for convenience at late time to replace tuple
containing last dict & lines list; It could be more utilized -- my excuse
of not doing so is to minimize change...

OrderedDict could be used in place of threadlist but that requires 
Python 2.7 (I used python 2.6 where argparse.py was copied to cwd;
also nmbug site uses python 2.6...). 

The table row separator '\n<tr><td colspan="2"><br /></td></tr>\n'
is a hack; If someone knows better simple semantic alternative that
could be used later...

 contrib/nmbug/nmbug-status |   68 ++++++++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 24 deletions(-)

diff --git a/contrib/nmbug/nmbug-status b/contrib/nmbug/nmbug-status
index c663409..b0e5060 100755
--- a/contrib/nmbug/nmbug-status
+++ b/contrib/nmbug/nmbug-status
@@ -51,12 +51,19 @@ if args.text:
 else:
     output_format = 'html'
 
-headers = ['date', 'from', 'subject']
-last = {}
+class Thread:
+    def __init__(self, last, lines):
+        self.last = last
+        self.lines = lines
+
+    def join_utf8_with_newlines(self):
+        return '\n'.join( (line.encode('utf-8') for line in self.lines) )
 
-def clear_last():
-    for header in headers:
-        last[header] = ''
+def output_with_separator(threadlist, sep):
+    outputs = (thread.join_utf8_with_newlines() for thread in threadlist)
+    print sep.join(outputs)
+
+headers = ['date', 'from', 'subject']
 
 def print_view(title, query, comment):
 
@@ -64,7 +71,11 @@ def print_view(title, query, comment):
     q_new = notmuch.Query(db, query_string)
     q_new.set_sort(notmuch.Query.SORT.OLDEST_FIRST)
 
-    last['thread_id'] = ''
+    last_thread_id = ''
+    threads = {}
+    threadlist = []
+    last = None
+    lines = None
 
     if output_format == 'html':
         print '<h3><a name="%s" />%s</h3>' % (title, title)
@@ -80,8 +91,20 @@ def print_view(title, query, comment):
         out = {}
 
         thread_id = m.get_thread_id()
-        if thread_id != last['thread_id']:
-            clear_last()
+
+        if thread_id != last_thread_id:
+            if threads.has_key(thread_id):
+                last = threads[thread_id].last
+                lines = threads[thread_id].lines
+            else:
+                last = {}
+                lines = []
+                thread = Thread(last, lines)
+                threads[thread_id] = thread
+                for h in headers:
+                    last[h] = ''
+                threadlist.append(thread)
+            last_thread_id = thread_id
 
         for header in headers:
             val = m.get_header(header)
@@ -94,38 +117,35 @@ def print_view(title, query, comment):
                 if val == '':
                     val = addr.split('@')[0]
 
-            if last[header] == val:
+            if header != 'subject' and last[header] == val:
                 out[header] = ''
             else:
-                out[header] = val.encode('utf-8')
+                out[header] = val
                 last[header] = val
 
         mid = m.get_message_id()
         out['id'] = 'id:"%s"' % mid
 
         if output_format == 'html':
-            # XXX using <br /> is a hack, but ... // 20111216 too
-            if thread_id != last['thread_id']:
-                br = '<br />'
-            else:
-                br = ''
 
             out['subject'] = '<a href="http://mid.gmane.org/%s">%s</a>' \
                 % (urllib.quote(mid), out['subject'])
 
-            print ' <tr><td>%s %s' % (br, out['date'])
-            print '</td><td>%s %s' % (br, out['id'])
-            print '</td></tr>'
-            print ' <tr><td>%s' % out['from']
-            print '</td><td>%s' % out['subject']
-            print '</td></tr>\n'
+            lines.append(' <tr><td>%s' % out['date'])
+            lines.append('</td><td>%s' % out['id'])
+            lines.append('</td></tr>')
+            lines.append(' <tr><td>%s' % out['from'])
+            lines.append('</td><td>%s' % out['subject'])
+            lines.append('</td></tr>')
         else:
-            print '%(date)-10.10s %(from)-20.20s %(subject)-40.40s\n%(id)72s\n' % out
-
-        last['thread_id'] = thread_id
+            lines.append('%(date)-10.10s %(from)-20.20s %(subject)-40.40s\n%(id)72s' % out)
 
     if output_format == 'html':
+        output_with_separator(threadlist,
+                              '\n<tr><td colspan="2"><br /></td></tr>\n')
         print '</table>'
+    else:
+        output_with_separator(threadlist, '\n\n')
 
 # main program
 
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views
  2012-10-24  6:59 [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views Tomi Ollila
  2012-10-24  6:59 ` [PATCH 2/2] contrib/nmbug/nmbug-status: combine thread messages Tomi Ollila
  2012-10-24  7:17 ` Tomi Ollila
@ 2012-10-24 21:58 ` David Bremner
  2 siblings, 0 replies; 4+ messages in thread
From: David Bremner @ 2012-10-24 21:58 UTC (permalink / raw)
  To: Tomi Ollila, notmuch; +Cc: tomi.ollila

Tomi Ollila <tomi.ollila@iki.fi> writes:

> In latest configuration quite a few long views were added to the
> Notmuch Patches page. To ease navigating to the views a 'Views'
> section was added to the beginning of page containing hyperlink
> to every view.

Pushed both, and ran once by hand so the live view currently reflects
these patches.

d

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-10-24 21:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-24  6:59 [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views Tomi Ollila
2012-10-24  6:59 ` [PATCH 2/2] contrib/nmbug/nmbug-status: combine thread messages Tomi Ollila
2012-10-24  7:17 ` Tomi Ollila
2012-10-24 21:58 ` [PATCH 1/2] contrib/nmbug/nmbug-status: added table of views David Bremner

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).