blob: 26924e0fc909191f12176934cbd128a07221f64b [file] [log] [blame]
# Reads LDAP ou=projects and committee-info
#
# Previously read LDAP ou=pmc,ou=committees,ou=groups,dc=apache,dc=org
# but this is deprecated.
# The output is intended to include the same entries as before;
# as such it includes tac and security even though they are not PMCs
#
# Creates JSON output with the following format:
#
# {
# "lastTimestamp": "20160119171152Z", // most recent modifyTimestamp
# "committees": {
# "abdera": {
# "modifyTimestamp": "20111204095436Z",
# "roster": ["uid",
# ...
# ]
# },
# ...
# },
# }
#
require_relative 'public_json_common'
# gather committee info
entries = {}
projects = ASF::Project.preload
# which projects should be in the committees file?
# The output previously included all entries in the LDAP committee group,
# i.e. tac and security as well as all valid PMCs
# TODO perhaps drop these?
pmcs = ASF::Committee.pmcs.map(&:name) + ['tac', 'security']
if projects.empty?
Wunderbar.error "No results retrieved, output not created"
exit 0
end
lastStamp = ''
projects.keys.sort_by {|a| a.name}.each do |project|
next unless pmcs.include? project.name
m = []
createTimestamp = project.createTimestamp
modifyTimestamp = project.modifyTimestamp
project.owners.sort_by {|a| a.name}.each do |e|
m << e.name
end
lastStamp = modifyTimestamp if modifyTimestamp > lastStamp
entries[project.name] = {
createTimestamp: createTimestamp,
modifyTimestamp: modifyTimestamp,
roster: m
}
end
info = {
# Is there a use case for the last createTimestamp ?
lastTimestamp: lastStamp,
committees: entries,
}
public_json_output(info)
if changed? and @old_file
# for validating UIDs
uids = ASF::Person.list().map(&:id)
entries.each do |name, entry|
entry[:roster].each do |id|
Wunderbar.warn "#{name}: unknown uid '#{id}'" unless uids.include?(id)
end
end
end