You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by hb...@apache.org on 2015/05/24 09:50:00 UTC

svn commit: r1681422 - in /comdev/projects.apache.org: scripts/ scripts/import/ site/doap/deltaspike/ site/doap/sis/ site/images/ site/js/ site/json/foundation/

Author: hboutemy
Date: Sun May 24 07:49:59 2015
New Revision: 1681422

URL: http://svn.apache.org/r1681422
Log:
replace 'TLP' with 'committee'

Added:
    comdev/projects.apache.org/site/images/committee.png
      - copied unchanged from r1681418, comdev/projects.apache.org/site/images/tlp.png
    comdev/projects.apache.org/site/images/project.png
      - copied unchanged from r1681418, comdev/projects.apache.org/site/images/sub.png
    comdev/projects.apache.org/site/json/foundation/committees-evolution.json
      - copied, changed from r1681418, comdev/projects.apache.org/site/json/foundation/tlps-evolution.json
    comdev/projects.apache.org/site/json/foundation/committees.json
      - copied, changed from r1681418, comdev/projects.apache.org/site/json/foundation/tlps.json
Removed:
    comdev/projects.apache.org/site/images/sub.png
    comdev/projects.apache.org/site/images/tlp.png
    comdev/projects.apache.org/site/json/foundation/tlps-evolution.json
    comdev/projects.apache.org/site/json/foundation/tlps.json
Modified:
    comdev/projects.apache.org/scripts/README.txt
    comdev/projects.apache.org/scripts/import/parsecommittees.py
    comdev/projects.apache.org/scripts/import/parsepmcs.py
    comdev/projects.apache.org/site/doap/deltaspike/pmc.rdf
    comdev/projects.apache.org/site/doap/sis/pmc.rdf
    comdev/projects.apache.org/site/js/projects.js
    comdev/projects.apache.org/site/json/foundation/HEADER.html

Modified: comdev/projects.apache.org/scripts/README.txt
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/scripts/README.txt?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/scripts/README.txt (original)
+++ comdev/projects.apache.org/scripts/README.txt Sun May 24 07:49:59 2015
@@ -30,9 +30,9 @@ various sources:
 
 2. importing data (import)
 
-- parsecommittees.py: Parses committee-info.txt to detect new TLPs and add them to tlps-evolution.json
-  in: foundation/tlps-evolution.json + committee-info.txt (https://svn.apache.org/repos/private/committers/board/committee-info.txt)
-  out: foundation/tlps.json + foundation/tlps-evolution.json
+- parsecommittees.py: Parses committee-info.txt to detect new committees and add them to committees-evolution.json
+  in: foundation/committees-evolution.json + committee-info.txt (https://svn.apache.org/repos/private/committers/board/committee-info.txt)
+  out: foundation/committees.json + foundation/committees-evolution.json
 
 - parsepmcs.py: imports PMC data from the old project.apache.org site. No need
   to run that more than once?
@@ -45,9 +45,6 @@ various sources:
   out: projects/*.json + foundation/projects.json
 
 - addpmc.py
-  in: foundation/pmcs.json + foundation/tlps-evolution.json + params
-  out: foundation/pmcs.json + foundation/tlps-evolution.json
-  list of PMCs with site url (pmcs.json) and monthly list of new committees (tlps-evolution.json)
-
-
-Notice: cycles.json is not imported from anywhere (could/should be from committee-info.txt)
+  in: foundation/pmcs.json + foundation/committees-evolution.json + params
+  out: foundation/pmcs.json + foundation/committees-evolution.json
+  list of PMCs with site url (pmcs.json) and monthly list of new committees (committees-evolution.json)

Modified: comdev/projects.apache.org/scripts/import/parsecommittees.py
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/scripts/import/parsecommittees.py?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/scripts/import/parsecommittees.py (original)
+++ comdev/projects.apache.org/scripts/import/parsecommittees.py Sun May 24 07:49:59 2015
@@ -7,42 +7,42 @@ import urllib.request
 import xml.etree.ElementTree as ET
 import xml.dom.minidom as minidom
 
-# Committee names from committees-info.txt that do not match tlps-evolution.json
+# Committee names from committees-info.txt that do not match committees-evolution.json
 renamesCommittee2Json = {
     'Apache APR': 'Apache Portable Runtime',
     'Apache Perl': 'Apache mod_perl'
 }
-# Committee names from http://www.apache.org/foundation/ that do not match tlps-evolution.json
+# Committee names from http://www.apache.org/foundation/ that do not match committees-evolution.json
 renamesChairs2Json = {
     'Apache Logging Services': 'Apache Logging',
     'Apache Perl': 'Apache mod_perl'
 }
-# TLP ids not matching committee name in lowercase
-tlp_ids = {
+# committee ids not matching committee name in lowercase
+committeeIds = {
     'Community Development': 'comdev',
     'HTTP Server': 'httpd',
     'Lucene.Net': 'lucenenet',
     'Open Climate Workbench': 'climate'
 }
-# LDAP group ids not matching tlp
+# LDAP group ids not matching committee id
 group_ids = {
     'webservices': 'ws'
 }
-# homepages not matching http://<tlp>.apache.org/
+# homepages not matching http://<committee id>.apache.org/
 homepages = {
     'comdev': 'http://community.apache.org/',
     'httpcomponents': 'http://hc.apache.org/'
 }
-# short description for non-classical TLPs, that are not listed in http://www.apache.org/#projects-list
+# short description for non-classical committees, that are not listed in http://www.apache.org/#committeeShortNames-list
 shortdescs = {
-    'attic': 'A home for dormant projects',
-    'comdev': 'Ressources to help people become involved with Apache projects',
-    'incubator': "Entry path into The Apache Software Foundation (ASF) for projects and codebases wishing to become part of the Foundation's efforts",
+    'attic': 'A home for dormant committeeShortNames',
+    'comdev': 'Ressources to help people become involved with Apache committeeShortNames',
+    'incubator': "Entry path into The Apache Software Foundation (ASF) for committeeShortNames and codebases wishing to become part of the Foundation's efforts",
     'labs': 'A place for innovation where committers of the foundation can experiment with new ideas'
 }
 
-with open("../../site/json/foundation/tlps-evolution.json", "r") as f:
-    tlpsEvolution = json.loads(f.read())
+with open("../../site/json/foundation/committees-evolution.json", "r") as f:
+    committeesEvolution = json.loads(f.read())
     f.close()
 
 with open("../../site/json/foundation/people.json", "r") as f:
@@ -92,6 +92,8 @@ for l in buf.readlines():
             newCommittee = False
     elif not l.startswith('==='):
         m = re.search(r"(.+?)\s+<([^@]+)@apache.org", l.strip())
+        if not m:
+            print("unexpected line format: %s" % l.strip())
         fullname = m.group(1)
         uid = m.group(2)
         isChair = fullname.endswith('(chair)')
@@ -102,9 +104,9 @@ for l in buf.readlines():
 
 www = urllib.request.urlopen("http://www.apache.org/").read().decode('utf-8')
 
-tlpCount = 0
-tlps = []
-addedTlps = []
+committeeCount = 0
+committeesList = []
+addedCommittees = []
 c = {}
 
 for pmc in re.findall(r"\* .+?\s+\(est\. [0-9/]+[^\r\n]+", data):
@@ -112,47 +114,47 @@ for pmc in re.findall(r"\* .+?\s+\(est\.
     #print(pmc)
     m = re.search(r"\* (.+?)\s+\(est. ([0-9]+)/([0-9]+)", pmc)
     if m:
-        project = m.group(1)
+        committeeShortName = m.group(1)
         month = m.group(2)
         year = m.group(3)
         if not re.search(r"Committee", pmc):
-            if project in tlp_ids:
-                tlp_id = tlp_ids[project]
+            if committeeShortName in committeeIds:
+                committeeId = committeeIds[committeeShortName]
             else:
-                tlp_id = project.lower().replace(' ', '').replace('.', '')
-            # Classical TLP
-            committee = "Apache %s" % project
-            if committee in renamesCommittee2Json:
-                committee = renamesCommittee2Json[committee]
-            #print(project)
-            tlpCount += 1
+                committeeId = committeeShortName.lower().replace(' ', '').replace('.', '')
+            # Classical committee
+            committeeName = "Apache %s" % committeeShortName
+            if committeeName in renamesCommittee2Json:
+                committeeName = renamesCommittee2Json[committeeName]
+            #print(committeeShortName)
+            committeeCount += 1
 
-            # add TLP to tlpsEvolution if necessary
+            # add committee to committeesEvolution if necessary
             key = "%s-%s" % (year, month)
-            if not key in tlpsEvolution:
-                tlpsEvolution[key] = [] # add new year-month
-            if not committee in tlpsEvolution[key]:
-                # add TLP to tlpsEvolution
-                tlpsEvolution[key].append(committee)
-                tlpsEvolution[key].sort()
-                addedTlps.append("%s: %s" % (key, committee))
-
-            # add TLP to tlps
-            tlp = {}
-            tlp['id'] = tlp_id
-            if tlp_id in group_ids:
-                group = group_ids[tlp_id]
+            if not key in committeesEvolution:
+                committeesEvolution[key] = [] # add new year-month
+            if not committeeName in committeesEvolution[key]:
+                # add committee to committeesEvolution
+                committeesEvolution[key].append(committeeName)
+                committeesEvolution[key].sort()
+                addedCommittees.append("%s: %s" % (key, committeeName))
+
+            # add committee to committees
+            committee = {}
+            committee['id'] = committeeId
+            if committeeId in group_ids:
+                group = group_ids[committeeId]
             else:
-                group = tlp_id
-            tlp['group'] = group
-            tlp['name'] = committee
-            tlp['established'] = key
+                group = committeeId
+            committee['group'] = group
+            committee['name'] = committeeName
+            committee['established'] = key
             if group in homepages:
                 homepage = homepages[group]
             else:
                 homepage = 'http://%s.apache.org/' % group
-            tlp['homepage'] = homepage
-            # TLP committers and PMC members
+            committee['homepage'] = homepage
+            # committee committers and PMC members
             pmcgroup = "%s-pmc" % group
             committers = [] # [ 'login' ]
             pmc = [] # [ 'login' ]
@@ -167,32 +169,32 @@ for pmc in re.findall(r"\* .+?\s+\(est\.
                     print("user %s has no groups" % login)
             committers.sort()
             pmc.sort()
-            # don't store committers and PMC members arrays in tlp: it's easy to get from groups.json
-            #tlp['pmcs'] = pmc
-            #tlp['committers'] = committers
+            # don't store committers and PMC members arrays in committee: it's easy to get from groups.json
+            #committee['pmcs'] = pmc
+            #committee['committers'] = committers
             if len(pmc) == 0:
-                print('WARN: %s (%s established in %s) has no PMC members LDAP group (id=%s)' % (tlp_id, committee, key, pmcgroup))
-            if project in committees:
-                tlp['chair'] = committees[project]['chair']
-            if project in cycles:
-                tlp['reporting'] = cycles[project]
+                print('WARN: %s (%s established in %s) has no PMC members LDAP group (id=%s)' % (committeeId, committee, key, pmcgroup))
+            if committeeShortName in committees:
+                committee['chair'] = committees[committeeShortName]['chair']
+            if committeeShortName in cycles:
+                committee['reporting'] = cycles[committeeShortName]
             else:
-                print('WARN: %s not found in reporting cycles' % project)
+                print('WARN: %s not found in reporting cycles' % committeeShortName)
 
             link = '<a href="%s" title="' % homepage
-            if tlp_id in shortdescs:
-                tlp['shortdesc'] = shortdescs[tlp_id]
+            if committeeId in shortdescs:
+                committee['shortdesc'] = shortdescs[committeeId]
             elif link in www:
                 shortdesc = www[(www.index(link) + len(link)):]
                 shortdesc = shortdesc[:shortdesc.index('">')]
-                tlp['shortdesc'] = shortdesc
+                committee['shortdesc'] = shortdesc
             else:
-                print("WARN: %s (%s) missing from http://www.apache.org/#projects-list" % (project, homepage))
-            # TODO tlp['description'] (or charter) not in committee-info.txt
-            # TODO tlp['retired'] not in committee-info.txt
-            tlps.append(tlp)
+                print("WARN: %s (%s) missing from http://www.apache.org/#projects-list" % (committeeShortName, homepage))
+            # TODO committee['description'] (or charter) not in committee-info.txt
+            # TODO committee['retired'] not in committee-info.txt
+            committeesList.append(committee)
 
-            # generate TLP PMC DOAP file at http://projects-new.apache.org/doap/{tlp_id}/pmc.rdf
+            # generate TLP PMC DOAP file at http://projects-new.apache.org/doap/{committeeId}/pmc.rdf
             doap = ET.Element('rdf:RDF', attrib= { 'xml:lang': 'en',
                                                    'xmlns': 'http://usefulinc.com/ns/doap#',
                                                    'xmlns:rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
@@ -200,13 +202,13 @@ for pmc in re.findall(r"\* .+?\s+\(est\.
                                                    'xmlns:foaf': 'http://xmlns.com/foaf/0.1/'
                                                    })
             doap_pmc = ET.SubElement(doap, 'asfext:pmc')
-            ET.SubElement(doap_pmc, 'asfext:name').text = committee
+            ET.SubElement(doap_pmc, 'asfext:name').text = committeeName
             ET.SubElement(doap_pmc, 'homepage', attrib = { 'rdf:resource': homepage })
             doap_chair = ET.SubElement(doap_pmc, 'asfext:chair')
             doap_chair_person = ET.SubElement(doap_chair, 'foaf:Person')
-            ET.SubElement(doap_chair_person, 'foaf:nick').text = tlp['chair']
-            ET.SubElement(doap_chair_person, 'foaf:name').text = people[tlp['chair']]['name']
-            directory = "../../site/doap/%s" % tlp_id
+            ET.SubElement(doap_chair_person, 'foaf:nick').text = committee['chair']
+            ET.SubElement(doap_chair_person, 'foaf:name').text = people[committee['chair']]['name']
+            directory = "../../site/doap/%s" % committeeId
             if not os.path.exists(directory):
                 os.makedirs(directory)
             with open("%s/pmc.rdf" % directory, "w") as f:
@@ -215,20 +217,20 @@ for pmc in re.findall(r"\* .+?\s+\(est\.
 
         else:
             # Special Committee (Officer's, President's or Board)
-            print("INFO: %s ignored %s" % (project, pmc[pmc.rfind('('):]))
-        c[committee] = True
+            print("INFO: %s ignored %s" % (committeeShortName, pmc[pmc.rfind('('):]))
+        c[committeeName] = True
 
-with open("../../site/json/foundation/tlps-evolution.json", "w") as f:
-    f.write(json.dumps(tlpsEvolution, sort_keys=True, indent=0))
+with open("../../site/json/foundation/committees-evolution.json", "w") as f:
+    f.write(json.dumps(committeesEvolution, sort_keys=True, indent=0))
     f.close()
 
-print("found %s new TLPs from %s TLPs in committee_info.txt" % (len(addedTlps), tlpCount))
-addedTlps.sort()
-for added in addedTlps:
+print("found %s new committees from %s committees in committee_info.txt" % (len(addedCommittees), committeeCount))
+addedCommittees.sort()
+for added in addedCommittees:
     print("- %s" % added)
 
-with open("../../site/json/foundation/tlps.json", "w") as f:
-    f.write(json.dumps(tlps, sort_keys=True, indent=0))
+with open("../../site/json/foundation/committees.json", "w") as f:
+    f.write(json.dumps(committeesList, sort_keys=True, indent=0))
     f.close()
 
 # compare with chairs, for consistency checking

Modified: comdev/projects.apache.org/scripts/import/parsepmcs.py
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/scripts/import/parsepmcs.py?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/scripts/import/parsepmcs.py (original)
+++ comdev/projects.apache.org/scripts/import/parsepmcs.py Sun May 24 07:49:59 2015
@@ -1,12 +1,11 @@
 from xml.dom import minidom
 import xml.etree.ElementTree as ET
 import re, urllib.request
-import csv
 import json
-import os
 
-data = urllib.request.urlopen("https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/data_files/").read().decode('utf-8')
-itemlist = re.findall(r">([a-z0-9]+)\.rdf<", data)
+data = urllib.request.urlopen("https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/pmc_list.xml").read()
+xmldoc = minidom.parseString(data)
+itemlist = xmldoc.getElementsByTagName('location')
 
 projects = {}
 
@@ -31,7 +30,9 @@ def handleChild(el):
     return tag, retval
 
 for s in itemlist :
-    url = "https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/data_files/%s.rdf" % s
+    url = s.childNodes[0].data
+    if not url.startswith('http'):
+        url = "https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/%s" % url
     print(url)
     try:
         rdf = urllib.request.urlopen(url).read()
@@ -57,7 +58,7 @@ for s in itemlist :
         print(err)
         
 with open ("../../site/json/foundation/pmcs.json", "w") as f:
-    f.write(json.dumps(projects, sort_keys=True, indent=0))
+    f.write(json.dumps(projects, indent=0))
     f.close()
 print("Done!")
     
\ No newline at end of file

Modified: comdev/projects.apache.org/site/doap/deltaspike/pmc.rdf
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/doap/deltaspike/pmc.rdf?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/site/doap/deltaspike/pmc.rdf (original)
+++ comdev/projects.apache.org/site/doap/deltaspike/pmc.rdf Sun May 24 07:49:59 2015
@@ -5,8 +5,8 @@
 		<homepage rdf:resource="http://deltaspike.apache.org/"/>
 		<asfext:chair>
 			<foaf:Person>
-				<foaf:nick>gpetracek</foaf:nick>
-				<foaf:name>Gerhard Petracek</foaf:name>
+				<foaf:nick>tandraschko</foaf:nick>
+				<foaf:name>Thomas Andraschko</foaf:name>
 			</foaf:Person>
 		</asfext:chair>
 	</asfext:pmc>

Modified: comdev/projects.apache.org/site/doap/sis/pmc.rdf
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/doap/sis/pmc.rdf?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/site/doap/sis/pmc.rdf (original)
+++ comdev/projects.apache.org/site/doap/sis/pmc.rdf Sun May 24 07:49:59 2015
@@ -5,8 +5,8 @@
 		<homepage rdf:resource="http://sis.apache.org/"/>
 		<asfext:chair>
 			<foaf:Person>
-				<foaf:nick>aestrada</foaf:nick>
-				<foaf:name>Adam Estrada</foaf:name>
+				<foaf:nick>desruisseaux</foaf:nick>
+				<foaf:name>Martin Desruisseaux</foaf:name>
 			</foaf:Person>
 		</asfext:chair>
 	</asfext:pmc>

Modified: comdev/projects.apache.org/site/js/projects.js
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/js/projects.js?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/site/js/projects.js (original)
+++ comdev/projects.apache.org/site/js/projects.js Sun May 24 07:49:59 2015
@@ -19,10 +19,10 @@
 
 var people = {}; // committer -> name lookups
 var unixgroups = {}; // unix (ldap) groups (project -> committers lookup)
-var tlps = {}; // id -> tlp info (chair, established, group, homepage, id, name, reporting, shortdesc)
-var tlpsByName = {}; // name -> tlp info
-var tlpsEvolution = {}; // TLPs sorted by date founded, with retired (name = "retired: name")
-var projects = {}; // Projects (main project or sub-project from a TLP)
+var committees = {}; // id -> committee info (chair, established, group, homepage, id, name, reporting, shortdesc)
+var committeesByName = {}; // name -> committee info
+var committeesEvolution = {}; // committees sorted by date founded, with retired (name = "retired: name")
+var projects = {}; // Projects
 var evolution = {}; // Podling evolution
 
 // --------- Global helpers ----------- \\
@@ -255,22 +255,22 @@ function appendLiInnerHTML(ul,html) {
 
 function renderProjectPage(project, projectId) {
     var obj = document.getElementById('contents');
-    var isTLP = false;
+    var isCommittee = false;
 
     if ((!project || !project.name) && projects[projectId]) {
         project = projects[projectId];
     }
-    if (tlps[projectId]) {
-        isTLP = true;
+    if (committees[projectId]) {
+        isCommittee = true;
     }
-    if ((!project || !project.name) && (!isTLP)) {
+    if ((!project || !project.name) && (!isCommittee)) {
         obj.innerHTML = "<h2>Sorry, I don't have any information available about this project</h2>";
         return;
     }
 
     var isIncubating = project && (project.podling || (project.name && project.name.match(/incubating/i)));
 
-    // Rerig the unix name and tlp
+    // Rerig the unix name and committee id
     var unixgroup = projectId.split("-")[0];
     // special case: empire-db
     if (unixgroup == "empire") unixgroup = "empire-db";
@@ -278,21 +278,21 @@ function renderProjectPage(project, proj
     if (project && project.pmc == "attic") {
         unixgroup = "attic";
     }
-    var tlpId = unixgroup;
-    if (!tlps[unixgroup]) {
-        // one TLP has a unix group that is different from TLP id: webservices (group=ws), see parsecommittees.py#group_ids
-        for (p in tlps) {
-            if (tlps[p].group == unixgroup) {
-                tlpId = p;
+    var committeeId = unixgroup;
+    if (!committees[unixgroup]) {
+        // one committee has a unix group that is different from committee id: webservices (group=ws), see parsecommittees.py#group_ids
+        for (p in committees) {
+            if (committees[p].group == unixgroup) {
+                committeeId = p;
                 break;
             }
         }
     }
     if (isIncubating) {
-        tlpId = 'incubator';
-        project.pmc = tlpId;
+        committeeId = 'incubator';
+        project.pmc = committeeId;
     }
-    var tlp = tlps[tlpId];
+    var committee = committees[committeeId];
 
     // Start by splitting the name, thus fetching the root name of the project, and not the sub-project.
     var description = "";
@@ -301,8 +301,8 @@ function renderProjectPage(project, proj
             description = project.description;
         } else if (!_.isEmpty(project.shortdesc)) {
             description = project.shortdesc;
-        } else if (!_.isEmpty(tlp.shortdesc)) {
-            description = tlp.shortdesc;
+        } else if (!_.isEmpty(committee.shortdesc)) {
+            description = committee.shortdesc;
         } else {
             description = "No description available";
         }
@@ -312,16 +312,16 @@ function renderProjectPage(project, proj
     var pt = "";
     if (isIncubating) {
         pt = "Incubating";
-    } else if (project && !tlpsByName[project.name] && tlps[project.pmc]) {
-	pt = (project.pmc == "attic") ? "in the Attic" : ""
+    } else if (project && !committeesByName[project.name] && committees[project.pmc]) {
+	    pt = (project.pmc == "attic") ? "in the Attic" : ""
     } else {
-	isTLP = true
+	    isCommittee = true
     }
-    var name = (project && project.name) ? project.name : tlp.name;
+    var name = (project && project.name) ? project.name : committee.name;
     if (!name.match(/incubating/i) && pt != "") {
         name +=  " (" + pt + ")";
     }
-    obj.innerHTML = "<h1>" + name + " <font size='-1'>(a project managed by <a href='committee.html?" + tlpId + "'>" + tlp.name + " Committee</a>)</font></h1>";
+    obj.innerHTML = "<h1>" + name + " <font size='-1'>(a project managed by <a href='committee.html?" + committeeId + "'>" + committee.name + " Committee</a>)</font></h1>";
 
     // project description
     appendElementWithInnerHTML(obj,'p',description.replace(/([^\r\n]+)\r?\n\r?\n/g,function(a) { return "<p>"+a+"</p>"}));
@@ -334,7 +334,7 @@ function renderProjectPage(project, proj
             project.pmc = project.pmc.match(/http:\/\/([a-z0-9]+)/i)[1];
         }
     } else {
-        project.pmc = tlpId;
+        project.pmc = committeeId;
     }
 
     // Base data
@@ -352,19 +352,19 @@ function renderProjectPage(project, proj
     }
 
     // Website
-    if (project.homepage && ((project.homepage != tlp.homepage) && !isTLP )) {
+    if (project.homepage && ((project.homepage != committee.homepage) && !isCommittee )) {
 	appendLiInnerHTML(ul, "<b>Website:</b> <a href='" + project.homepage + "' target='_blank'>" + project.homepage + "</a>");
     }
     if (isIncubating) {
         appendLiInnerHTML(ul, "<b>Project status:</b> <span class='ppodling'>Incubating</span>");
-    } else if (tlpId != 'attic') {
-	appendLiInnerHTML(ul, "<b>Project status:</b> <span class='pactive'>Active</span>");
+    } else if (committeeId != 'attic') {
+	    appendLiInnerHTML(ul, "<b>Project status:</b> <span class='pactive'>Active</span>");
     } else {
-	appendLiInnerHTML(ul, "<b>Project status:</b> <span class='pretired'>Retired</span>");
+	    appendLiInnerHTML(ul, "<b>Project status:</b> <span class='pretired'>Retired</span>");
     }
 
-    if (!tlpsByName[project.name] && tlps[project.pmc]) {
-	appendLiInnerHTML(ul, "<b>Sub-project of:</b> <a href='project.html?" + project.pmc + "'>" + tlps[project.pmc].name + "</a>");
+    if (!committeesByName[project.name] && committees[project.pmc]) {
+	    appendLiInnerHTML(ul, "<b>Sub-project of:</b> <a href='project.html?" + project.pmc + "'>" + committees[project.pmc].name + "</a>");
     }
 
     // Committers
@@ -424,10 +424,10 @@ function renderProjectPage(project, proj
     appendElementWithInnerHTML(obj,'h4',"Repositories:");
     ul = document.createElement('ul');
     if (project.SVNRepository&& project.SVNRepository.length > 0) {
-	appendLiInnerHTML(ul, "<b>Subversion:</b> <a target=*_blank' href='" + project.SVNRepository + "'>" + project.SVNRepository + "</a>");
+	    appendLiInnerHTML(ul, "<b>Subversion:</b> <a target=*_blank' href='" + project.SVNRepository + "'>" + project.SVNRepository + "</a>");
     }
     if (project.GitRepository && project.GitRepository.length > 0) {
-	appendLiInnerHTML(ul, "<b>Git:</b> <a target=*_blank' href='" + project.GitRepository + "'>" + project.GitRepository + "</a>");
+	    appendLiInnerHTML(ul, "<b>Git:</b> <a target=*_blank' href='" + project.GitRepository + "'>" + project.GitRepository + "</a>");
     }
     obj.appendChild(ul);
 }
@@ -441,30 +441,30 @@ function buildProjectPage() {
 function renderCommitteePage(committeeId) {
     var obj = document.getElementById('contents');
 
-    if (!tlps[committeeId]) {
+    if (!committees[committeeId]) {
         obj.innerHTML = "<h2>Sorry, I don't have any information available about this committee</h2>";
         return;
     }
 
     var unixgroup = committeeId; // there are probably a few exceptions...
-    var tlp = tlps[committeeId];
+    var committee = committees[committeeId];
 
-    obj.innerHTML = "<h1>" + tlp.name + " Committee</h1>";
+    obj.innerHTML = "<h1>" + committee.name + " Committee</h1>";
 
     var ul = document.createElement('ul');
 
     appendElementWithInnerHTML(obj, 'h4', "Committee data:");
 
-    appendLiInnerHTML(ul, "<b>Website:</b> <a href='" + tlp.homepage + "' target='_blank'>" + tlp.homepage + "</a>");
+    appendLiInnerHTML(ul, "<b>Website:</b> <a href='" + committee.homepage + "' target='_blank'>" + committee.homepage + "</a>");
 
-    appendLiInnerHTML(ul, "<b>Committee established:</b> " + tlp.established);
+    appendLiInnerHTML(ul, "<b>Committee established:</b> " + committee.established);
 
     // VP
-    appendLiInnerHTML(ul, "<b>PMC Chair:</b> " + people[tlp.chair]);
+    appendLiInnerHTML(ul, "<b>PMC Chair:</b> " + people[committee.chair]);
 
     // Reporting cycle
     var cycles = ["every month", "January, April, July, October", "February, May, August, November", "March, June, September, December"];
-    appendLiInnerHTML(ul, "<b>Reporting cycle:</b> " + cycles[tlp.reporting] + ", see <a href='https://whimsy.apache.org/board/minutes/" + camelCase(committeeId) + ".html'>minutes</a>");
+    appendLiInnerHTML(ul, "<b>Reporting cycle:</b> " + cycles[committee.reporting] + ", see <a href='https://whimsy.apache.org/board/minutes/" + camelCase(committeeId) + ".html'>minutes</a>");
 
     // PMC
     if (unixgroups[unixgroup + "-pmc"]) {
@@ -497,7 +497,7 @@ function renderCommitteePage(committeeId
     if ((subprojects.length == 0) && (committeeId != 'comdev') && (committeeId != 'labs')) {
         // if a committee did not declare any project, consider there is a default one with the id of the committee
         // only Labs and Community Development don't manage projects
-        subprojects.push({ 'id': committeeId, 'name': tlp.name, 'pmc': committeeId });
+        subprojects.push({ 'id': committeeId, 'name': committee.name, 'pmc': committeeId });
     }
     if (subprojects.length >= 1) {
         appendElementWithInnerHTML(obj, 'h4', "Projects managed by this Committee:");
@@ -525,23 +525,23 @@ function camelCase(str) {
 }
 
 function committeeIcon() {
-     return "<img src='images/tlp.png' title='Committee' style='vertical-align: middle; padding: 2px;'/> ";
+     return "<img src='images/committee.png' title='Committee' style='vertical-align: middle; padding: 2px;'/> ";
 }
 
 function projectIcon() {
-    return "<img src='images/sub.png' title='Project' style='vertical-align: middle; padding: 2px;'/> "
+    return "<img src='images/project.png' title='Project' style='vertical-align: middle; padding: 2px;'/> "
 }
 
 function committeeLink(id) {
-    var tlp = tlps[id];
-    return "<a href='committee.html?" + id + "'>" + tlp.name + "</a>";
+    var committee = committees[id];
+    return "<a href='committee.html?" + id + "'>" + committee.name + "</a>";
 }
 
 function projectLink(id) {
     var project = projects[id];
     if (!project) {
-        // not project id: perhaps tlp id
-        project = tlps[id];
+        // not project id: perhaps committee id
+        project = committees[id];
     }
     var name = project.name;
     if (project.pmc == "attic") {
@@ -738,16 +738,16 @@ function renderProjectsByPMC() {
     var projectsSorted = sortProjects();
 
     var dcount = {};
-    for (tlp in tlps) {
-        dcount[tlp] = 0;
+    for (var committee in committees) {
+        dcount[committee] = 0;
     }
     for (project in projects) {
-    project = projects[project];
+        project = projects[project];
         // Fix Incubating projects
         if (project.name.match("incubating", "i")) {
-        project.pmc = 'incubator'
+            project.pmc = 'incubator'
         }
-        if (tlps[project.pmc]) {
+        if (committees[project.pmc]) {
             dcount[project.pmc]++;
         }
     }
@@ -755,12 +755,12 @@ function renderProjectsByPMC() {
     // Construct pmc list
     var ul = document.createElement('ul');
 
-    for (lpmc in tlps) {
+    for (lpmc in committees) {
         var c = dcount[lpmc];
         var li = document.createElement('li');
         var cul = document.createElement('ul');
         if (c == 0 && lpmc != 'comdev' && lpmc != 'labs') {
-            appendLiInnerHTML(cul, projectIcon(tlps[lpmc].name) + "<a href='project.html?" + lpmc + "'>" + tlps[lpmc].name + "</a>");
+            appendLiInnerHTML(cul, projectIcon(committees[lpmc].name) + "<a href='project.html?" + lpmc + "'>" + committees[lpmc].name + "</a>");
             c = 1;
         } else {
             for (i in projectsSorted) {
@@ -770,7 +770,7 @@ function renderProjectsByPMC() {
                 if (project.name.match("incubating", "i")) {
                     project.pmc = 'incubator'
                 }
-                if (tlps[project.pmc]) {
+                if (committees[project.pmc]) {
                     xlpmc = project.pmc;
                     if (xlpmc == lpmc) {
                         appendLiInnerHTML(cul, projectIcon(project.name) + projectLink(i));
@@ -778,7 +778,7 @@ function renderProjectsByPMC() {
                 }
             }
         }
-        li.innerHTML = "<h3>" + committeeIcon() + "<a id='" + lpmc + "' href='committee.html?"+ lpmc + "'>" + tlps[lpmc].name + " PMC</a> (" + c + ")" + (c>0?":": "") + "</h3>";
+        li.innerHTML = "<h3>" + committeeIcon() + "<a id='" + lpmc + "' href='committee.html?"+ lpmc + "'>" + committees[lpmc].name + " PMC</a> (" + c + ")" + (c>0?":": "") + "</h3>";
         li.appendChild(cul);
         ul.appendChild(li);
     }
@@ -813,8 +813,8 @@ function buildProjectsList() {
 function sortCommittees() {
     var committeesSortedX = [];
     var committeesSorted = [];
-    for (i in tlps) {
-        committeesSortedX.push([i, tlps[i].name]);
+    for (i in committees) {
+        committeesSortedX.push([i, committees[i].name]);
     }
     committeesSortedX.sort(function(a,b) { return a[1].toLowerCase() > b[1].toLowerCase() ? 1 : a[1].toLowerCase() < b[1].toLowerCase() ? -1 : 0 })
     for (i in committeesSortedX) {
@@ -843,8 +843,8 @@ function renderCommitteesByDate() {
 
     var dates = [];
     var dcount = {};
-    for (i in tlps) {
-        var date = tlps[i].established;
+    for (i in committees) {
+        var date = committees[i].established;
         if (dates.indexOf(date) < 0) {
             dates.push(date);
             dcount[date] = 0;
@@ -861,8 +861,8 @@ function renderCommitteesByDate() {
         var li = document.createElement('li');
         li.innerHTML = "<h3><a id='" + date + "'>" + date + " (" + dcount[date] + ")</a>:</h3>";
         var cul = document.createElement('ul');
-        for (i in tlpsByName) {
-            i = tlpsByName[i];
+        for (i in committeesByName) {
+            i = committeesByName[i];
             if (i.established == date) {
                 appendLiInnerHTML(cul, committeeIcon() + committeeLink(i.id));
             }
@@ -903,14 +903,14 @@ function buildProjectListAsTable(json) {
 	var project = projects[p];
 	
 	// Get name of PMC
-	var pmc = tlps[project.pmc] ? tlps[project.pmc].name : "Unknown";
+	var pmc = committees[project.pmc] ? committees[project.pmc].name : "Unknown";
 	
 	// Get project type
 	var type = "Sub-Project";
 	var shortp = p.split("-")[0];
 	if (unixgroups[shortp]) {
 	    type = "TLP";
-	    if ((!tlpsByName[project.name] && tlps[project.pmc]) || project.name.match(/incubating/i)) {
+	    if ((!committeesByName[project.name] && committees[project.pmc]) || project.name.match(/incubating/i)) {
 		type = "Sub-project";
 	    }
 	} else {
@@ -956,8 +956,8 @@ function buildProjectListAsTable(json) {
 }
 
 
-function isTLP(name) {
-    return tlpsByName[name];
+function isCommittee(name) {
+    return committeesByName[name];
 }
 
 // ------------ Front page rendering ------------\\
@@ -970,7 +970,7 @@ function htmlListTooltip(date,name,value
 
 function renderFrontPage() {
     var numchairs = 0;
-    for (i in tlps) numchairs++;
+    for (i in committees) numchairs++;
     cur = evolution[0].current;
     var nsubs = 0;
     
@@ -978,12 +978,12 @@ function renderFrontPage() {
 	i = projects[i];
 	if (!i.name.match(/incubating/i)) {
 	    initiatives++;
-	    if (!isTLP(i.name)) {
-		nsubs++;
+	    if (!isCommittee(i.name)) {
+		    nsubs++;
 	    }
 	}
     }
-    var initiatives = cur + numchairs + nsubs + 5; // podlings + tlps + sub-projects + specials
+    var initiatives = cur + numchairs + nsubs + 5; // podlings + committees + sub-projects + specials
     initiatives -= initiatives % 100; // round down
     var obj = document.getElementById('details');
     obj.innerHTML = "<h3 style='text-align: center;'>There are currently <span style='color: #269;'>" + initiatives + "+</span> open source initatives at the ASF:</h3>"
@@ -996,26 +996,26 @@ function renderFrontPage() {
     var parr = [];
     var cur = 0;
     var karr = [];
-    for (i in tlpsEvolution) {
+    for (i in committeesEvolution) {
 	karr.push(i);
     }
     karr.sort();
     
     for (var j in karr) {
-	var i = karr[j];
-	var changes = tlpsEvolution[i];
-	var newTlps = [];
-	var retiredTlps = [];
-	for (var k in changes) {
-	    var change = changes[k];
-	    if (change.match(/retired: /)) {
-		retiredTlps.push(change.substring(9))
-	    } else {
-		newTlps.push(change)
-	    }
-	}
-	cur += newTlps.length - retiredTlps.length;
-	parr.push([i, newTlps.length, htmlListTooltip(i, 'new committee', newTlps), retiredTlps.length, htmlListTooltip(i, 'retired committee', retiredTlps), cur]);
+        var i = karr[j];
+        var changes = committeesEvolution[i];
+        var newCommittees = [];
+        var retiredCommittees = [];
+        for (var k in changes) {
+            var change = changes[k];
+            if (change.match(/retired: /)) {
+                retiredCommittees.push(change.substring(9))
+            } else {
+                newCommittees.push(change)
+            }
+        }
+        cur += newCommittees.length - retiredCommittees.length;
+        parr.push([i, newCommittees.length, htmlListTooltip(i, 'new committee', newCommittees), retiredCommittees.length, htmlListTooltip(i, 'retired committee', retiredCommittees), cur]);
     }
     //narr.sort(function(a,b) { return (b[1] - a[1]) });
     var data1 = new google.visualization.DataTable();
@@ -1279,27 +1279,27 @@ function searchProjects(str) {
     hits = {};
     hitssorted = [];
     
-    // Search TLPs
+    // Search committees
     for (p in projects) {
-	var project = projects[p];
-	for (key in project) {
-	    if (typeof project[key] == "string") {
-	        val = project[key].toLowerCase();
-		if (val.indexOf(str) >= 0 && val.substr(0,1) != "{") {
-		    if (!hits[p]) {
-			hits[p] = [];
-		    }
-		    estr = new RegExp(str, "i");
-		    hits[p].push({
-			'key': key,
-			'val': project[key].replace(estr, function(a) { return "<u style='color: #963;'>"+a+"</u>"}, "img")
-		    });
-		    if (hitssorted.indexOf(p) < 0) {
-			hitssorted.push(p);
-		    }
-		} 
-	    }
-	}
+        var project = projects[p];
+        for (key in project) {
+            if (typeof project[key] == "string") {
+                val = project[key].toLowerCase();
+                if (val.indexOf(str) >= 0 && val.substr(0,1) != "{") {
+                    if (!hits[p]) {
+                        hits[p] = [];
+                    }
+                    estr = new RegExp(str, "i");
+                    hits[p].push({
+                    'key': key,
+                    'val': project[key].replace(estr, function(a) { return "<u style='color: #963;'>"+a+"</u>"}, "img")
+                    });
+                    if (hitssorted.indexOf(p) < 0) {
+                        hitssorted.push(p);
+                    }
+                }
+            }
+        }
     }
     
     obj.innerHTML = "<h2>Search results for '" + str + "' (" + hitssorted.length + "):</h2>";
@@ -1308,15 +1308,15 @@ function searchProjects(str) {
 	
     for (h in hitssorted) {
         h = hitssorted;
-	var project = hits[h];
-	var html = "<h4><a href='/project.html?" + h + "'>" + projects[h].name + "</a> (" + project.length + " hit(s)):</h4>";
-	for (x in project) {
-	    html += "<blockquote><b>" + project[x].key + ":</b> " +  project[x].val + "</blockquote>";
-	}
-	appendLiInnerHTML(ul,html);
+        var project = hits[h];
+        var html = "<h4><a href='/project.html?" + h + "'>" + projects[h].name + "</a> (" + project.length + " hit(s)):</h4>";
+        for (x in project) {
+            html += "<blockquote><b>" + project[x].key + ":</b> " +  project[x].val + "</blockquote>";
+        }
+        appendLiInnerHTML(ul,html);
     }
     if (hitssorted.length == 0) {
-	obj.innerHTML += "No search results found";
+    	obj.innerHTML += "No search results found";
     }
     obj.appendChild(ul);
 }
@@ -1328,7 +1328,7 @@ function checkKeyPress(e, txt) {
     if (!e) e = window.event;
     var keyCode = e.keyCode || e.which;
     if (keyCode == '13'){
-	searchProjects(txt.value);
+	    searchProjects(txt.value);
     }
 }
 
@@ -1338,23 +1338,23 @@ function checkKeyPress(e, txt) {
 // Add projects if they aren't in the hash already
 function weaveInProjects(json) {
     for (p in json) {
-	if (!projects[p]) {
-            if (json[p].category) {
-                // temporary hack: json are now generated without the http://projects.apache.org/category/ url
-                json[p].category = json[p].category.replace(new RegExp("http://projects.apache.org/category/", 'g'), '');
-            }
-	    projects[p] = json[p];
-	}
+        if (!projects[p]) {
+                if (json[p].category) {
+                    // temporary hack: json are now generated without the http://projects.apache.org/category/ url
+                    json[p].category = json[p].category.replace(new RegExp("http://projects.apache.org/category/", 'g'), '');
+                }
+            projects[p] = json[p];
+        }
     }
 }
 
-function setTlps(json, state) {
+function setCommittees(json, state) {
     for (p in json) {
         p = json[p];
-        // tlps = { id -> tlp }
-        tlps[p.id] = p;
-        // tlpsByName = { name -> tlp }
-        tlpsByName[p.name] = p;
+        // committees = { id -> committee }
+        committees[p.id] = p;
+        // committeesByName = { name -> committee }
+        committeesByName[p.name] = p;
     }
     if (state) {
         state();
@@ -1365,13 +1365,13 @@ function setTlps(json, state) {
 function renderReleases(releases) {
     var arr = [];
     for (p in releases) {
-	var releasedata = releases[p];
-	
-	for (filename in releasedata) {
-	    var date = releasedata[filename];
-	    // Shove the result into a row
-	    arr.push([ p, p, date, filename]);
-	}
+        var releasedata = releases[p];
+
+        for (filename in releasedata) {
+            var date = releasedata[filename];
+            // Shove the result into a row
+            arr.push([ p, p, date, filename]);
+        }
     }
     
     // Construct the data table
@@ -1409,12 +1409,12 @@ function buildReleases() {
 
 function preloadEverything(callback) {
     GetAsyncJSONArray([
-	    ["json/foundation/tlps.json", setTlps],
+	    ["json/foundation/committees.json", setCommittees],
 	    ["json/foundation/groups.json", function(json) { unixgroups = json; }],
 	    ["json/foundation/people_name.json", function(json) { people = json; }],
 	    ["json/foundation/projects.json", weaveInProjects],
 	    ["json/foundation/podlings.json", weaveInProjects],
-        ["json/foundation/tlps-evolution.json", function(json) { tlpsEvolution = json; }],
+        ["json/foundation/committees-evolution.json", function(json) { committeesEvolution = json; }],
         ["json/foundation/podlings-evolution.json", function(json) { evolution = json; }]
         ],
 	callback);

Modified: comdev/projects.apache.org/site/json/foundation/HEADER.html
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/json/foundation/HEADER.html?rev=1681422&r1=1681421&r2=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/site/json/foundation/HEADER.html (original)
+++ comdev/projects.apache.org/site/json/foundation/HEADER.html Sun May 24 07:49:59 2015
@@ -4,11 +4,11 @@ see <code><a href="http://svn.apache.org
 for more information.
 <ul>
 <li><a href="accounts-evolution.json"><code>accounts-evolution.json</code></a> generated by <code>cronjobs/countaccounts.py</code> from LDAP</li>
-<li><a href="chairs.json"><code>chairs.json</code></a> generated by <code>cronjobs/parsechairs.py</code> from <a href="http://www.apache.org/foundation/">http://www.apache.org/foundation/</a> (not used any more, replaced by tlps.json)</li>
+<li><i><a href="chairs.json"><code>chairs.json</code></a> generated by <code>cronjobs/parsechairs.py</code> from <a href="http://www.apache.org/foundation/">http://www.apache.org/foundation/</a> (not used any more, replaced by committees.json)</i></li>
 <li><a href="groups.json"><code>groups.json</code></a>, <a href="people.json"><code>people.json</code></a> and <a href="people_name.json"><code>people_name.json</code></a> generated by <code>cronjobs/parsecommitters.py</code> from <a href="http://people.apache.org/committer-index.html">http://people.apache.org/committer-index.html</a></li>
-<li><a href="pmcs.json"><code>pmcs.json</code></a> imported with <code>import/parsepmcs.py</code> from <a href='https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/data_files/'>PMC DOAP files</a> (not used any more, replaced by tlps.json)</li>
+<li><i><a href="pmcs.json"><code>pmcs.json</code></a> imported with <code>import/parsepmcs.py</code> from <a href='https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/data_files/'>PMC DOAP files</a> (not used any more, replaced by committees.json)</i></li>
 <li><a href="podlings.json"><code>podlings.json</code></a> and <a href="podlings-evolution.json"><code>podlings-evolution.json</code></a> generated by <code>cronjobs/podlings.py</code> from <a href="http://incubator.apache.org/podlings.xml">http://incubator.apache.org/podlings.xml</a></li>
 <li><a href="projects.json"><code>projects.json</code></a> imported with <code>import/rdfparse.py</code> from <a href='https://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/files.xml'>projects' DOAP files</a></li>
 <li><a href="releases.json"><code>releases.json</code></a> generated by <code>cronjobs/parsereleases.py</code> from <a href="http://www.apache.org/dist/">http://www.apache.org/dist/</a></li>
-<li><a href="tlps.json"><code>tlps.json</code></a> and <a href="tlps-evolution.json"><code>tlps-evolution.json</code></a> imported with <code>import/parsecommittees.py</code> from <code>https://svn.apache.org/repos/private/committers/board/committee-info.txt</code></li>
+<li><a href="committees.json"><code>committees.json</code></a> and <a href="committees-evolution.json"><code>committees-evolution.json</code></a> imported with <code>import/parsecommittees.py</code> from <code>https://svn.apache.org/repos/private/committers/board/committee-info.txt</code></li>
 </ul>
\ No newline at end of file

Copied: comdev/projects.apache.org/site/json/foundation/committees-evolution.json (from r1681418, comdev/projects.apache.org/site/json/foundation/tlps-evolution.json)
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/json/foundation/committees-evolution.json?p2=comdev/projects.apache.org/site/json/foundation/committees-evolution.json&p1=comdev/projects.apache.org/site/json/foundation/tlps-evolution.json&r1=1681418&r2=1681422&rev=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/site/json/foundation/tlps-evolution.json (original)
+++ comdev/projects.apache.org/site/json/foundation/committees-evolution.json Sun May 24 07:49:59 2015
@@ -533,5 +533,8 @@
 "Apache Parquet",
 "retired: Apache Click",
 "retired: Apache Lenya"
+],
+"2015-05": [
+"Apache Whimsy"
 ]
 }
\ No newline at end of file

Copied: comdev/projects.apache.org/site/json/foundation/committees.json (from r1681418, comdev/projects.apache.org/site/json/foundation/tlps.json)
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/json/foundation/committees.json?p2=comdev/projects.apache.org/site/json/foundation/committees.json&p1=comdev/projects.apache.org/site/json/foundation/tlps.json&r1=1681418&r2=1681422&rev=1681422&view=diff
==============================================================================
--- comdev/projects.apache.org/site/json/foundation/tlps.json (original)
+++ comdev/projects.apache.org/site/json/foundation/committees.json Sun May 24 07:49:59 2015
@@ -127,7 +127,7 @@
 "id": "attic",
 "name": "Apache Attic",
 "reporting": 1,
-"shortdesc": "A home for dormant projects"
+"shortdesc": "A home for dormant committeeShortNames"
 },
 {
 "chair": "wfarner",
@@ -136,7 +136,8 @@
 "homepage": "http://aurora.apache.org/",
 "id": "aurora",
 "name": "Apache Aurora",
-"reporting": 3
+"reporting": 3,
+"shortdesc": ""
 },
 {
 "chair": "tomwhite",
@@ -185,7 +186,8 @@
 "homepage": "http://bookkeeper.apache.org/",
 "id": "bookkeeper",
 "name": "Apache BookKeeper",
-"reporting": 2
+"reporting": 2,
+"shortdesc": ""
 },
 {
 "chair": "boisvert",
@@ -244,7 +246,8 @@
 "homepage": "http://celix.apache.org/",
 "id": "celix",
 "name": "Apache Celix",
-"reporting": 1
+"reporting": 1,
+"shortdesc": ""
 },
 {
 "chair": "fmui",
@@ -314,7 +317,7 @@
 "id": "comdev",
 "name": "Apache Community Development",
 "reporting": 2,
-"shortdesc": "Ressources to help people become involved with Apache projects"
+"shortdesc": "Ressources to help people become involved with Apache committeeShortNames"
 },
 {
 "chair": "batkinson",
@@ -417,7 +420,7 @@
 "shortdesc": "RESTful cloud management interface"
 },
 {
-"chair": "gpetracek",
+"chair": "tandraschko",
 "established": "2013-04",
 "group": "deltaspike",
 "homepage": "http://deltaspike.apache.org/",
@@ -433,7 +436,8 @@
 "homepage": "http://devicemap.apache.org/",
 "id": "devicemap",
 "name": "Apache DeviceMap",
-"reporting": 2
+"reporting": 2,
+"shortdesc": ""
 },
 {
 "chair": "raffaeleguidi",
@@ -462,7 +466,8 @@
 "homepage": "http://drill.apache.org/",
 "id": "drill",
 "name": "Apache Drill",
-"reporting": 2
+"reporting": 2,
+"shortdesc": ""
 },
 {
 "chair": "francisdb",
@@ -521,7 +526,8 @@
 "homepage": "http://flink.apache.org/",
 "id": "flink",
 "name": "Apache Flink",
-"reporting": 3
+"reporting": 3,
+"shortdesc": ""
 },
 {
 "chair": "arvind",
@@ -661,7 +667,7 @@
 "id": "incubator",
 "name": "Apache Incubator",
 "reporting": 0,
-"shortdesc": "Entry path into The Apache Software Foundation (ASF) for projects and codebases wishing to become part of the Foundation's efforts"
+"shortdesc": "Entry path into The Apache Software Foundation (ASF) for committeeShortNames and codebases wishing to become part of the Foundation's efforts"
 },
 {
 "chair": "danhaywood",
@@ -890,7 +896,8 @@
 "homepage": "http://metamodel.apache.org/",
 "id": "metamodel",
 "name": "Apache MetaModel",
-"reporting": 2
+"reporting": 2,
+"shortdesc": ""
 },
 {
 "chair": "jeffmaury",
@@ -1069,7 +1076,8 @@
 "homepage": "http://orc.apache.org/",
 "id": "orc",
 "name": "Apache Orc",
-"reporting": 1
+"reporting": 1,
+"shortdesc": ""
 },
 {
 "chair": "julien",
@@ -1078,7 +1086,8 @@
 "homepage": "http://parquet.apache.org/",
 "id": "parquet",
 "name": "Apache Parquet",
-"reporting": 1
+"reporting": 1,
+"shortdesc": ""
 },
 {
 "chair": "lehmi",
@@ -1107,7 +1116,8 @@
 "homepage": "http://phoenix.apache.org/",
 "id": "phoenix",
 "name": "Apache Phoenix",
-"reporting": 2
+"reporting": 2,
+"shortdesc": ""
 },
 {
 "chair": "rohini",
@@ -1196,7 +1206,8 @@
 "homepage": "http://samza.apache.org/",
 "id": "samza",
 "name": "Apache Samza",
-"reporting": 1
+"reporting": 1,
+"shortdesc": ""
 },
 {
 "chair": "coheigea",
@@ -1239,7 +1250,7 @@
 "shortdesc": "Powerful and easy-to-use application security framework"
 },
 {
-"chair": "aestrada",
+"chair": "desruisseaux",
 "established": "2012-09",
 "group": "sis",
 "homepage": "http://sis.apache.org/",
@@ -1325,7 +1336,8 @@
 "homepage": "http://stratos.apache.org/",
 "id": "stratos",
 "name": "Apache Stratos",
-"reporting": 2
+"reporting": 2,
+"shortdesc": ""
 },
 {
 "chair": "rgielen",
@@ -1537,6 +1549,15 @@
 "shortdesc": "Projects related to Web Services"
 },
 {
+"chair": "rgardler",
+"established": "2015-05",
+"group": "whimsy",
+"homepage": "http://whimsy.apache.org/",
+"id": "whimsy",
+"name": "Apache Whimsy",
+"reporting": 2
+},
+{
 "chair": "dashorst",
 "established": "2007-06",
 "group": "wicket",
@@ -1603,7 +1624,8 @@
 "homepage": "http://zest.apache.org/",
 "id": "zest",
 "name": "Apache Zest",
-"reporting": 3
+"reporting": 3,
+"shortdesc": ""
 },
 {
 "chair": "michim",