| #!/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 <<Apache2_0,Apache |
| License 2.0>>. 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("----") |
| with open(n[2:].replace(":", "/")) as fd: |
| copyfileobj(fd, stdout) |
| print() |
| print("----") |
| print() |
| |
| if args.asciidoctor: |
| print( |
| """ |
| GERRIT |
| ------ |
| Part of link:index.html[Gerrit Code Review] |
| """) |