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 61e54e94 Parse nominations etc
61e54e94 is described below
commit 61e54e94006553c3b32d517a58dbbacdeec1f798
Author: Sebb <[email protected]>
AuthorDate: Sun Mar 12 17:12:13 2023 +0000
Parse nominations etc
---
lib/whimsy/asf/meeting-util.rb | 42 +++++++++++++++++++++++++++++++++++-------
1 file changed, 35 insertions(+), 7 deletions(-)
diff --git a/lib/whimsy/asf/meeting-util.rb b/lib/whimsy/asf/meeting-util.rb
index d146e5f4..652c33a0 100644
--- a/lib/whimsy/asf/meeting-util.rb
+++ b/lib/whimsy/asf/meeting-util.rb
@@ -8,7 +8,8 @@ require 'date'
module ASF
class MeetingUtil
- RECORDS = ASF::SVN.svnurl!('Meetings')
+ RECORDS = ASF::SVN.svnurl!('Meetings') # in SVN
+ MEETINGS_DIR = ASF::SVN['Meetings'] # local checkout
VCAL_EVENTS_FILENAME = 'ASF-members-meeting.ics'
PROXIES_FILENAME = 'proxies'
@@ -134,12 +135,16 @@ module ASF
end
end
- # Get the latest completed Meetings dir (i.e. has raw-irc-log)
+ # Get the latest completed Meetings dir (i.e. has raw-irc-log; this can be
overridden)
# TODO: is that the most appropriate file to check?
def self.get_latest_completed(mtg_root, sentinel='raw-irc-log')
return Dir[File.join(mtg_root, '2*')].select {|d| File.exist?
File.join(d, sentinel) }.max
end
+ def self.get_latest_file(file='.', mtg_root=nil)
+ return Dir[File.join(mtg_root || MEETINGS_DIR, '2???????', file)].max
+ end
+
# Get the latest available Meetings dir
def self.get_latest(mtg_root)
return Dir[File.join(mtg_root, '2*')].max
@@ -155,6 +160,29 @@ module ASF
return JSON.parse(IO.read(File.join(mtg_root, 'attendance.json')))
end
+
+ # 20081216: First Last <[email protected]>: Yes
+ # 20090707: First Last <[email protected]>: yes
+ # 20100323: Invite? Applied? ID Name
+ # 20100323: ------- -------- --------- ------------------
+ # 20100323: yes|no yes|no availid First Last
+ # latest:
+ # 20100713: Invite? Applied? members@? Karma? ID Name
+ # 20100713: ------- -------- --------- ------ --------- ------------------
+ # 20100713: yes|no yes|no yes|no yes|no availid First Last
+ # Note that the column widths may vary (especially the ID)
+
+ # parse a memapp file; if omitted, pick the latest found
+ # Does not support files before 2010
+ # Return: array of arrays
+ def self.parse_memapp(path=nil)
+ path ||= get_latest_file('memapp-received.txt')
+ text = File.read(path)
+ # latest layout; look for at least one yes column
+ list =
text.scan(/^(no|yes)\s+(no|yes)(?:\s+(no|yes)\s+(no|yes))?\s+(\S+)\s+(.+)/)
+ list.each {|a| a.last.strip!} # trim the user name
+ end
+
# Parse all memapp-received.txt files to get better set of names
# @see whimsy/www/members/attendance-xcheck.cgi
def self.read_memapps(dir)
@@ -163,8 +191,9 @@ module ASF
meeting = File.basename(File.dirname(received))
next if meeting.include? 'template'
text = File.read(received)
- list = text.scan(/(.+)\s<(.*)@.*>.*Yes/i)
+ list = text.scan(/(.+)\s<(.*)@.*>.*Yes/i) # early layout
if list.empty?
+ # latest layout; look for at least one yes column
list = text.scan(/^(?:no\s*)*(?:yes\s+)+(\w\S*)\s+(.*)\s*/)
else
# reverse order of id name type files
@@ -260,16 +289,15 @@ module ASF
# return the dir containing the latest meeting files
def self.latest_meeting_dir
- MeetingUtil.get_latest(ASF::SVN['Meetings'])
+ MeetingUtil.get_latest(MEETINGS_DIR)
end
# return the current status of all inactive members
def self.tracker(meetingsMissed)
- meetings = ASF::SVN['Meetings']
- cur_mtg_dir = MeetingUtil.get_latest(meetings)
+ cur_mtg_dir = MeetingUtil.get_latest(MEETINGS_DIR)
current_status = self.current_status(cur_mtg_dir)
- _attendance, matrix, dates, _nameMap =
MeetingUtil.get_attend_matrices(meetings)
+ _attendance, matrix, dates, _nameMap =
MeetingUtil.get_attend_matrices(MEETINGS_DIR)
inactive = matrix.select do |id, _name, _first, missed|
id and missed >= meetingsMissed
end