--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# vim: ts=4 et sw=4 sts=4 ai sta:
+
+import sys
+import json
+import re
+import codecs
+
+
+def main(argv):
+
+ if len(argv) < 2:
+ raise SystemExit("Usage: %s <projects.json>" % argv[0])
+
+ # TODO: read from domains file
+ domains = [
+ 'App Framework',
+ 'Applications',
+ 'Automotive',
+ 'Base',
+ 'Graphics & UI Framework',
+ 'Location',
+ 'Messaging',
+ 'Multimedia',
+ 'Network & Connectivity',
+ 'Platform Development',
+ 'SDK',
+ 'Security',
+ 'Social & Content',
+ 'System',
+ 'Telephony',
+ 'Testing',
+ 'Web Framework'
+ ]
+
+ # Interesting for us branches.
+ # TODO: read from branches file
+ branches = [
+ 'tizen', 'tizen_2.2', 'tizen_2.1', 'tizen_2.0'
+ ]
+
+ # Mappings between domain names and ACLs
+ domain_to_acl = {}
+ acl_to_domain = {}
+
+ # Populate mappings
+ for domain in domains:
+ domain_converted = "scm/acls/domain_"+domain.replace("&","and").replace(" ","_").lower()
+ domain_to_acl[domain] = domain_converted
+ acl_to_domain[domain_converted] = domain
+
+ projects = json.load(open(argv[1],"r"))
+
+ git_names = sorted(projects.keys())
+
+ out_projects = {}
+
+ # Gather data
+ for name in git_names:
+ if 'parent' not in projects[name]:
+ # Top-level git tree
+ continue
+ if name.startswith("scm/"):
+ # special hierarchy
+ continue
+ out_projects[name] = {
+ 'maintainers': [],
+ 'integrators': [],
+ 'reviewers': [],
+ 'licenses': [],
+ 'comments': [],
+ 'path': name
+ }
+ if projects[name]['parent'] in acl_to_domain:
+ out_projects[name]['domain'] = acl_to_domain[projects[name]['parent']]
+ else:
+ out_projects[name]['domain'] = ''
+ out_projects[name]['comments'].append('Missing domain!')
+ if 'description' in projects[name] and projects[name]['description']:
+ for line in re.split(r";[\n ]", projects[name]['description']):
+ if not line:
+ continue
+ if line[-1] == ';':
+ line = line[:-1]
+ tup = line.split(": ", 1)
+ if len(tup) != 2:
+ # Not well known line
+ continue
+ if tup[0] == 'Domain':
+ # Let's check if domain matches with ACLs
+ if out_projects[name]['domain'] != tup[1]:
+ out_projects[name]['description_domain'] = tup[1]
+ emes="Domain mismatch: '%s' vs. '%s'" % \
+ (out_projects[name]['domain'], tup[1])
+ out_projects[name]['comments'].append(emes)
+ else:
+ out_projects[name][tup[0].lower()] = re.split(r", ?", tup[1])
+ if 'branches' in projects[name]:
+ # TODO: Add information about branches
+ interesting = False
+ out_projects[name]['branches'] = { branch: False for branch in branches }
+ for branch in branches:
+ if branch in projects[name]['branches']:
+ out_projects[name]['branches'][branch] = True
+ interesting = True
+ else:
+ out_projects[name]['branches'][branch] = False
+ if not interesting:
+ # Project doesn't have any of interesting for us branches
+ del out_projects[name]
+
+
+ with codecs.open("git-trees.new", "wb", encoding="utf-8") as outfile:
+ dump_all(out_projects, outfile)
+
+
+def dump_all(git_trees, outfp = None):
+ names = sorted(git_trees.keys())
+ for name in names:
+ out = dumps_one_project(git_trees[name])
+ if outfp:
+ outfp.write("\n"+out)
+
+
+def dumps_one_project(git_dict):
+ out = []
+
+ #out.append("")
+ out.append("T: %s" % git_dict['path'])
+ out.append("D: %s" % git_dict['domain'])
+ if 'description' in git_dict:
+ for line in git_dict['description']:
+ out.append("O: %s" % line)
+ if 'profiles' in git_dict:
+ for profile in git_dict['profiles']:
+ out.append("P: %s" % profile)
+ if 'status' in git_dict:
+ out.append("S: %s" % git_dict['status'])
+ for role in ("maintainers", "integrators", "reviewers"):
+ if role in git_dict:
+ for person in git_dict[role]:
+ out.append("%s: %s" % (role[0].upper(), person))
+ if 'branches' in git_dict:
+ for branch in git_dict['branches']:
+ if git_dict['branches'][branch]:
+ out.append("B: %s" % branch)
+ if 'licenses' in git_dict:
+ for license in git_dict['licenses']:
+ out.append("L: %s" % license)
+ if 'homepage' in git_dict:
+ out.append("H: %s" % git_dict['homepage'])
+ if 'upstream url' in git_dict:
+ out.append("U: %s" % git_dict['upstream url'])
+ if 'upstream vcs' in git_dict:
+ out.append("V: %s" % git_dict['upstream vcs'])
+ if 'comments' in git_dict:
+ for line in git_dict['comments']:
+ out.append("C: %s" % line)
+ return "\n".join(out)+"\n"
+
+
+if __name__ == '__main__':
+ main(sys.argv)
+