2f6014055d
* stable-2.15: Make inner classes static where possible MigrateToNoteDb: Specify charset when constructing PrintWriter IndexServletTest: Specify charset in construction of String license-map: Fix deprecation warning Bazel: Make 'DefaultCharset' an ERROR when compiling with ErrorProne toolchain Specify charset when constructing PrintWriter Bazel: Change deprecated single file attribute parameter Bazel: Remove deprecated FileType Bazel: Replace PACKAGE_NAME constant with package_name() function Change-Id: Ibe9c2a13f3b0b4bc0ea6239c0158782a6de5b18e
132 lines
4.0 KiB
Python
132 lines
4.0 KiB
Python
#!/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 list(child):
|
|
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:
|
|
# We don't want any blank line before "= Gerrit Code Review - Licenses"
|
|
print("""= 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("----")
|
|
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]
|
|
""")
|