You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by se...@apache.org on 2019/05/11 11:06:45 UTC

[whimsy] branch master updated: WHIMSY-261 - list counts on (P)PMC pages should not include archivers

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

sebb 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 53ab0a1  WHIMSY-261 - list counts on (P)PMC pages should not include archivers
53ab0a1 is described below

commit 53ab0a138ed88dbd9510a4313615e7d0769cda58
Author: Sebb <se...@apache.org>
AuthorDate: Sat May 11 12:06:04 2019 +0100

    WHIMSY-261 - list counts on (P)PMC pages should not include archivers
---
 lib/whimsy/asf/mlist.rb            | 58 +++++++++++++++++++++++++++++---------
 www/roster/models/committee.rb     |  2 +-
 www/roster/models/nonpmc.rb        |  2 +-
 www/roster/models/ppmc.rb          |  2 +-
 www/roster/views/nonpmc/main.js.rb |  2 +-
 www/roster/views/pmc/main.js.rb    |  2 +-
 www/roster/views/ppmc/main.js.rb   |  2 +-
 7 files changed, 50 insertions(+), 20 deletions(-)

diff --git a/lib/whimsy/asf/mlist.rb b/lib/whimsy/asf/mlist.rb
index 14308fc..9f26661 100644
--- a/lib/whimsy/asf/mlist.rb
+++ b/lib/whimsy/asf/mlist.rb
@@ -145,17 +145,19 @@ module ASF
 
     # for a mail domain, extract related lists and their subscribers (default only the count)
     # also returns the time when the data was last checked
+    # N.B. by default includes archivers as subscribers
     # For top-level apache.org lists, the mail_domain is either:
     # - the full list name (e.g. press), or:
     # - the list prefix (e.g. legal)
     # If podling==true, then also check for old-style podling names
     # If list_subs==true, return subscriber emails else sub count
+    # If skip_archivers==true, exclude archivers
     # Matches:
     # {mail_domain}.apache.org/*
     # apache.org/{mail_domain}(-.*)? (e.g. press, legal)
     # incubator.apache.org/{mail_domain}-.* (if podling==true)
     # Returns: {list}@{dom}
-    def self.list_subscribers(mail_domain, podling=false, list_subs=false)
+    def self.list_subscribers(mail_domain, podling=false, list_subs=false, skip_archivers=false)
 
       return nil, nil unless File.exist? LIST_SUBS
 
@@ -179,11 +181,34 @@ module ASF
         next unless "#{mail_domain}.apache.org" == dom or
            (dom == 'apache.org' &&  list =~ /^#{mail_domain}(-|$)/) or
            (podling && dom == 'incubator.apache.org' && list =~ /^#{mail_domain}-/)
-        subscribers["#{list}@#{dom}"] = list_subs ? subs.sort : subs.size
+
+        if skip_archivers
+          subscribers["#{list}@#{dom}"] = list_subs ? subs.reject{|sub| is_archiver?(sub)}.sort : subs.reject{|sub| is_archiver?(sub)}.size
+        else
+          subscribers["#{list}@#{dom}"] = list_subs ? subs.sort : subs.size
+        end
       end
       return subscribers.to_h, (File.mtime(LIST_TIME) rescue File.mtime(LIST_SUBS))
     end
 
+    # for a mail domain, extract related lists and their subscribers (default only the count)
+    # also returns the time when the data was last checked
+    # N.B. excludes archivers
+    # For top-level apache.org lists, the mail_domain is either:
+    # - the full list name (e.g. press), or:
+    # - the list prefix (e.g. legal)
+    # If podling==true, then also check for old-style podling names
+    # If list_subs==true, return subscriber emails else sub count
+    # Matches:
+    # {mail_domain}.apache.org/*
+    # apache.org/{mail_domain}(-.*)? (e.g. press, legal)
+    # incubator.apache.org/{mail_domain}-.* (if podling==true)
+    # Returns: {list}@{dom}
+    def self.list_subs(mail_domain, podling=false, list_subs=false)
+      self.list_subscribers(mail_domain,podling,list_subs,true)
+    end
+    
+    
     # returns the list time (defaulting to list-subs time if the marker is not present)
     def self.list_time
       File.mtime(LIST_TIME) rescue File.mtime(LIST_SUBS)
@@ -298,7 +323,8 @@ module ASF
         if cached
           begin
             cached.each do |d,l,m|
-              yield d, l, m
+              # don't allow cache to be altered
+              yield d.freeze, l.freeze, m.freeze
             end
             return
           rescue WeakRef::RefError
@@ -320,10 +346,10 @@ module ASF
           dom = match[1].downcase # just in case
           list = match[2].downcase # just in case
           # Keep original case of email addresses
-          # TODO: a bit slow for subs file, implement cache of parsed file?
           mails = stanza.split(/\n/).select{|x| x =~ /@/}
           cache << [dom, list, mails]
-          yield dom, list, mails
+          # don't allow cache to be altered
+          yield dom.freeze, list.freeze, mails.freeze
         else
           # don't allow mismatches as that means the RE is wrong
           line=stanza[0..(stanza.index("\n")|| -1)]
@@ -364,12 +390,16 @@ module ASF
   end
 end
 
-#if __FILE__ == $0
-#  domain = ARGV.shift||'whimsical'
-#  p  ASF::MLIST.list_subscribers(domain)
-#  p  ASF::MLIST.list_subscribers(domain,false,true)
-#  exit
-#  p  ASF::MLIST.list_moderators(domain, true)
-#  p  ASF::MLIST.private_subscribers(domain)
-#  p  ASF::MLIST.digests(['chrisd@apache.org'])
-#end
+if __FILE__ == $0
+  domain = ARGV.shift||'whimsical'
+  p  ASF::MLIST.list_subscribers(domain)
+  p  ASF::MLIST.list_subscribers(domain,false,false,true)
+  p  ASF::MLIST.list_subs(domain)
+  p  ASF::MLIST.list_subscribers(domain,false,true)
+  p  ASF::MLIST.list_subscribers(domain,false,true,true)
+  p  ASF::MLIST.list_subs(domain,false,true)
+  exit
+  p  ASF::MLIST.list_moderators(domain, true)
+  p  ASF::MLIST.private_subscribers(domain)
+  p  ASF::MLIST.digests(['chrisd@apache.org'])
+end
diff --git a/www/roster/models/committee.rb b/www/roster/models/committee.rb
index 6798e07..286af26 100644
--- a/www/roster/models/committee.rb
+++ b/www/roster/models/committee.rb
@@ -34,7 +34,7 @@ class Committee
     if pmc.roster.include? env.user or currentUser.asf_member?
       require 'whimsy/asf/mlist'
       moderators, modtime = ASF::MLIST.list_moderators(pmc.mail_list)
-      subscribers, subtime = ASF::MLIST.list_subscribers(pmc.mail_list) # counts only
+      subscribers, subtime = ASF::MLIST.list_subs(pmc.mail_list) # counts only, no archivers
       analysePrivateSubs = currentUser.asf_member?
       unless analysePrivateSubs # check for private moderator if not already allowed access
         # TODO match using canonical emails
diff --git a/www/roster/models/nonpmc.rb b/www/roster/models/nonpmc.rb
index 6b7776c..266ab0a 100644
--- a/www/roster/models/nonpmc.rb
+++ b/www/roster/models/nonpmc.rb
@@ -35,7 +35,7 @@ class NonPMC
     if cttee.roster.include? env.user or currentUser.asf_member?
       require 'whimsy/asf/mlist'
       moderators, modtime = ASF::MLIST.list_moderators(mail_list)
-      subscribers, subtime = ASF::MLIST.list_subscribers(mail_list) # counts only
+      subscribers, subtime = ASF::MLIST.list_subs(mail_list) # counts only, no archivers
       analysePrivateSubs = currentUser.asf_member?
       unless analysePrivateSubs # check for private moderator if not already allowed access
         user_mail = currentUser.all_mail || []
diff --git a/www/roster/models/ppmc.rb b/www/roster/models/ppmc.rb
index a833508..fc65304 100644
--- a/www/roster/models/ppmc.rb
+++ b/www/roster/models/ppmc.rb
@@ -29,7 +29,7 @@ class PPMC
     if currentUser.asf_member? or owners.include? currentUser
       require 'whimsy/asf/mlist'
       moderators, modtime = ASF::MLIST.list_moderators(ppmc.mail_list, true)
-      subscribers, subtime = ASF::MLIST.list_subscribers(ppmc.mail_list, true) # counts only
+      subscribers, subtime = ASF::MLIST.list_subs(ppmc.mail_list, true) # counts only, no archivers
       analysePrivateSubs = currentUser.asf_member?
       unless analysePrivateSubs # check for private moderator if not already allowed access
         # TODO match using canonical emails
diff --git a/www/roster/views/nonpmc/main.js.rb b/www/roster/views/nonpmc/main.js.rb
index 6c708a6..3b88940 100644
--- a/www/roster/views/nonpmc/main.js.rb
+++ b/www/roster/views/nonpmc/main.js.rb
@@ -86,7 +86,7 @@ class NonPMC < Vue
     if @nonpmc.moderators
       _h2.mail! do
         _ 'Mailing list info'
-        _small ' (subscriber count includes archivers)'
+        _small ' (subscriber count excludes archivers)'
       end
       _table do
         _thead do
diff --git a/www/roster/views/pmc/main.js.rb b/www/roster/views/pmc/main.js.rb
index 2e88fbb..e1771c8 100644
--- a/www/roster/views/pmc/main.js.rb
+++ b/www/roster/views/pmc/main.js.rb
@@ -102,7 +102,7 @@ class PMC < Vue
     if @committee.moderators
       _h2.mail! do
         _ 'Mailing list info'
-        _small ' (subscriber count includes archivers)'
+        _small ' (subscriber count excludes archivers)'
       end
       _table do
         _thead do
diff --git a/www/roster/views/ppmc/main.js.rb b/www/roster/views/ppmc/main.js.rb
index 8663195..f6d3ce9 100644
--- a/www/roster/views/ppmc/main.js.rb
+++ b/www/roster/views/ppmc/main.js.rb
@@ -101,7 +101,7 @@ class PPMC < Vue
     if @ppmc.moderators
       _h2.mail! do
         _ 'Mailing list info'
-        _small ' (subscriber count includes archivers)'
+        _small ' (subscriber count excludes archivers)'
       end
       _table do
         _thead do