#!/usr/bin/env python # reads bazel query XML files, to join target names with their licenses. from __future__ import print_function import argparse from collections import defaultdict from shutil import copyfileobj from sys import stdout, stderr import xml.etree.ElementTree as ET DO_NOT_DISTRIBUTE = "//lib:LICENSE-DO_NOT_DISTRIBUTE" LICENSE_PREFIX = "//lib:LICENSE-" parser = argparse.ArgumentParser() parser.add_argument("--asciidoctor", action="store_true") parser.add_argument("xmls", nargs="+") args = parser.parse_args() entries = defaultdict(list) graph = defaultdict(list) handled_rules = [] for xml in args.xmls: tree = ET.parse(xml) root = tree.getroot() for child in root: rule_name = child.attrib["name"] if rule_name in handled_rules: # already handled in other xml files continue handled_rules.append(rule_name) for c in child.getchildren(): if c.tag != "rule-input": continue license_name = c.attrib["name"] if LICENSE_PREFIX in license_name: entries[rule_name].append(license_name) graph[license_name].append(rule_name) if len(graph[DO_NOT_DISTRIBUTE]): print("DO_NOT_DISTRIBUTE license found in:", file=stderr) for target in graph[DO_NOT_DISTRIBUTE]: print(target, file=stderr) exit(1) if args.asciidoctor: print( # We don't want any blank line before "= Gerrit Code Review - Licenses" """= Gerrit Code Review - Licenses Gerrit open source software is licensed under the <>. Executable distributions also include other software components that are provided under additional licenses. [[cryptography]] == Cryptography Notice This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See the link:http://www.wassenaar.org/[Wassenaar Arrangement] for more information. The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code. Gerrit includes an SSH daemon (Apache SSHD), to support authenticated uploads of changes directly from `git push` command line clients. Gerrit includes an SSH client (JSch), to support authenticated replication of changes to remote systems, such as for automatic updates of mirror servers, or realtime backups. == Licenses """) for n in sorted(graph.keys()): if len(graph[n]) == 0: continue name = n[len(LICENSE_PREFIX):] safename = name.replace(".", "_") print() print("[[%s]]" % safename) print(name) print() for d in sorted(graph[n]): if d.startswith("//lib:") or d.startswith("//lib/"): p = d[len("//lib:"):] else: p = d[d.index(":")+1:].lower() if "__" in p: p = p[:p.index("__")] print("* " + p) print() print("[[%s_license]]" % safename) print("----") filename = n[2:].replace(":", "/") try: with open(filename, errors='ignore') as fd: copyfileobj(fd, stdout) except TypeError: with open(filename) as fd: copyfileobj(fd, stdout) print() print("----") print() if args.asciidoctor: print( """ GERRIT ------ Part of link:index.html[Gerrit Code Review] """)