You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by cu...@apache.org on 2020/02/04 15:43:25 UTC

[whimsy] branch master updated: Capture JSON parse error and attempt to rebulid cache

This is an automated email from the ASF dual-hosted git repository.

curcuru pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
     new a9ede33  Capture JSON parse error and attempt to rebulid cache
a9ede33 is described below

commit a9ede33401f241345129777a0e54050a954a6bfa
Author: Shane Curcuru <as...@shanecurcuru.org>
AuthorDate: Tue Feb 4 10:43:13 2020 -0500

    Capture JSON parse error and attempt to rebulid cache
    
    With the right file this time
---
 tools/mboxhdr2csv.rb | 103 ++++++++++++++++++++++++++-------------------------
 1 file changed, 53 insertions(+), 50 deletions(-)

diff --git a/tools/mboxhdr2csv.rb b/tools/mboxhdr2csv.rb
index 1ebd520..c89ddd0 100644
--- a/tools/mboxhdr2csv.rb
+++ b/tools/mboxhdr2csv.rb
@@ -156,64 +156,67 @@ module MailUtils
     # Return cached calculated data if present
     cache_json = File.join(mailroot, "#{yearmonth}.json")
     if File.file?(cache_json)
-      return JSON.parse(File.read(cache_json))
-    else
-      emails = {}
-      files = Dir[File.join(mailroot, yearmonth, '*')]
-      return emails if files.empty?
-      emails[MAILS] = []
-      emails[TOOLS] = []
-      files.each do |email|
-        next if email.end_with? '/index'
-        message = IO.read(email.untaint, mode: 'rb')
-        data = {}
-        data[DATE] = DateTime.parse(message[/^Date: (.*)/, 1]).iso8601
-        data[FROM] = message[/^From: (.*)/, 1]
-        # Originally (before 2265343) the local method #find_who_from expected an email address and returned who, committer
-        # Emulate this with the version from MailUtils which expects and updates a hash
-        temp = {from: data[FROM]} # pass a hash
-        MailUtils.find_who_from(temp) # update the hash
-        # pick out the bits we want
-        data[WHO], data[COMMITTER] = temp[:who], temp[:committer] 
+      begin
+        return JSON.parse(File.read(cache_json))
+      rescue StandardError => e
+        # No-op: fall through to attempt to re-create cache
+      end
+    end
+    emails = {}
+    files = Dir[File.join(mailroot, yearmonth, '*')]
+    return emails if files.empty?
+    emails[MAILS] = []
+    emails[TOOLS] = []
+    files.each do |email|
+      next if email.end_with? '/index'
+      message = IO.read(email.untaint, mode: 'rb')
+      data = {}
+      data[DATE] = DateTime.parse(message[/^Date: (.*)/, 1]).iso8601
+      data[FROM] = message[/^From: (.*)/, 1]
+      # Originally (before 2265343) the local method #find_who_from expected an email address and returned who, committer
+      # Emulate this with the version from MailUtils which expects and updates a hash
+      temp = {from: data[FROM]} # pass a hash
+      MailUtils.find_who_from(temp) # update the hash
+      # pick out the bits we want
+      data[WHO], data[COMMITTER] = temp[:who], temp[:committer] 
 
-        data[SUBJECT] = message[/^Subject: (.*)/, 1]
-        if nondiscuss
-          nondiscuss.each do |typ, rx|
-            if data[SUBJECT] =~ rx
-              data[TOOLS] = typ
-              break # regex.each
-            end
+      data[SUBJECT] = message[/^Subject: (.*)/, 1]
+      if nondiscuss
+        nondiscuss.each do |typ, rx|
+          if data[SUBJECT] =~ rx
+            data[TOOLS] = typ
+            break # regex.each
           end
         end
-        data.has_key?(TOOLS) ? emails[TOOLS] << data : emails[MAILS] << data
-      end
-      # Provide as sorted data for ease of use
-      emails[TOOLS].sort_by! { |email| email[DATE] }
-      emails[TOOLCOUNT] = Hash.new {|h, k| h[k] = 0 }
-      emails[TOOLS].each do |mail|
-        emails[TOOLCOUNT][mail[TOOLS]] += 1
-      end
-      emails[TOOLCOUNT] = emails[TOOLCOUNT].sort_by { |k,v| -v}.to_h
-      
-      emails[MAILS].sort_by! { |email| email[DATE] }
-      emails[MAILCOUNT] = Hash.new {|h, k| h[k] = 0 }
-      emails[MAILS].each do |mail|
-        emails[MAILCOUNT][mail[WHO]] += 1
       end
-      emails[MAILCOUNT] = emails[MAILCOUNT].sort_by { |k,v| -v}.to_h
+      data.has_key?(TOOLS) ? emails[TOOLS] << data : emails[MAILS] << data
+    end
+    # Provide as sorted data for ease of use
+    emails[TOOLS].sort_by! { |email| email[DATE] }
+    emails[TOOLCOUNT] = Hash.new {|h, k| h[k] = 0 }
+    emails[TOOLS].each do |mail|
+      emails[TOOLCOUNT][mail[TOOLS]] += 1
+    end
+    emails[TOOLCOUNT] = emails[TOOLCOUNT].sort_by { |k,v| -v}.to_h
+    
+    emails[MAILS].sort_by! { |email| email[DATE] }
+    emails[MAILCOUNT] = Hash.new {|h, k| h[k] = 0 }
+    emails[MAILS].each do |mail|
+      emails[MAILCOUNT][mail[WHO]] += 1
+    end
+    emails[MAILCOUNT] = emails[MAILCOUNT].sort_by { |k,v| -v}.to_h
 
-      # If yearmonth is before current month, then write out yearmonth.json as cache
-      if yearmonth < Date.today.strftime('%Y%m')
-        begin
-          File.open(cache_json, 'w') do |f|
-            f.puts JSON.pretty_generate(emails)
-          end
-        rescue
-          # No-op, just don't cache for now
+    # If yearmonth is before current month, then write out yearmonth.json as cache
+    if yearmonth < Date.today.strftime('%Y%m')
+      begin
+        File.open(cache_json, 'w') do |f|
+          f.puts JSON.pretty_generate(emails)
         end
+      rescue
+        # No-op, just don't cache for now
       end
-      return emails
     end
+    return emails
   end
 end