#!/usr/bin/env ruby

# @(#) DRAFT: scan members.mdtext and look for non-members (members.txt)

#  Licensed to the Apache Software Foundation (ASF) under one or more
#  contributor license agreements.  See the NOTICE file distributed with
#  this work for additional information regarding copyright ownership.
#  The ASF licenses this file to You under the Apache License, Version 2.0
#  (the "License"); you may not use this file except in compliance with
#  the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

$LOAD_PATH.unshift '/srv/whimsy/lib'
require 'whimsy/asf'
require 'strscan'

status = ASF::Member.status
emeritus = ASF::Member.emeritus
current = ASF::Member.current

MEMBERS = 'apache/www-site/main/content/foundation/members.md'

file = ARGV.shift # Override for local testing
if file
  puts "Reading #{file}"
  contents = File.read(file)
else
  puts "Fetching members.md"
  code, contents = ASF::Git.github(MEMBERS)
  raise "Could not read #{MEMBERS}, error: #{code}" unless code == '200'
end

# # Members of The Apache Software Foundation #
#
# N.B. the listing below is optional; there is a separate summary of  [members](http://home.apache.org/committers-by-project.html#member)
#
# | Id | Name | Projects |
# |^---|------|----------|
# | id | Public Name |

puts "Checking member list"
puts "===================="

s = StringScanner.new(contents)
s.skip_until(/\| Id \| Name \| Projects \|\n/)
s.skip_until(/\n/)
prev = nil # for context on error
loop do
  s.scan(/\| (\S+) \|.*?$/)
  id = s[1]
  unless current.include? id
    puts "#{id}: #{status[id] || 'unknown status'}" 
    puts "Previous id: #{prev}" unless id
  end
  prev = id
  s.skip_until(/\n/)
  break if s.match? %r{^\s*$|^##} # blank line or next section
end


# ## Emeritus Members of The Apache Software Foundation
#
# | Id | Name |
# |----|------|
# | id or ? | Public Name |

puts ''

puts "Checking Emeritus list"
puts "======================"

s.skip_until(/\| Id \| Name \|\n/)
s.skip_until(/\n/)
loop do
  s.scan(/\| (\S+) \|.*?$/)
  id = s[1] or break
  unless id == '?'
    unless emeritus.include?(id)
      puts "#{id} #{status[id] || current.include?(id) ? 'Current member' : 'unknown id'}"
    end
  end
  s.skip_until(/\n/)
end
