mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 22:36:09 +03:00
150 lines
4.2 KiB
Python
150 lines
4.2 KiB
Python
|
#!/usr/bin/python
|
||
|
# Copyright (c) 2017 The Chromium Authors. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
"""Helper to update the "net_unittests_bundle_data" section of
|
||
|
//net/BUILD.gn so that it lists all of the current files (based on
|
||
|
simpler globbing rules).
|
||
|
"""
|
||
|
|
||
|
import glob
|
||
|
import os
|
||
|
import re
|
||
|
import sys
|
||
|
|
||
|
|
||
|
# ------------------------------------------
|
||
|
# test_support_bundle_data
|
||
|
# ------------------------------------------
|
||
|
|
||
|
# This is a bit more expansive than it needs to be (includes README). Meh.
|
||
|
test_support_bundle_data_globs = [
|
||
|
"data/quic_http_response_cache_data_with_push/test.example.com/*",
|
||
|
"data/ssl/certificates/*",
|
||
|
]
|
||
|
|
||
|
# This regular expression identifies the "sources" section of
|
||
|
# test_support_bundle_data.
|
||
|
test_support_bundle_data_regex = re.compile(r"""
|
||
|
bundle_data\("test_support_bundle_data"\) \{
|
||
|
visibility = \[ ":test_support" \]
|
||
|
testonly = true
|
||
|
sources = \[
|
||
|
(.+?)
|
||
|
\]
|
||
|
outputs = \[""", re.MULTILINE | re.DOTALL)
|
||
|
|
||
|
# ------------------------------------------
|
||
|
# net_unittest_bundle_data
|
||
|
# ------------------------------------------
|
||
|
|
||
|
net_unittest_bundle_data_globs = [
|
||
|
"data/cert_issuer_source_aia_unittest/*.pem",
|
||
|
"data/cert_issuer_source_static_unittest/*.pem",
|
||
|
"data/certificate_policies_unittest/*.pem",
|
||
|
"data/embedded_test_server/*",
|
||
|
"data/filter_unittests/*",
|
||
|
"data/name_constraints_unittest/*.pem",
|
||
|
"data/ocsp_unittest/*.pem",
|
||
|
"data/parse_certificate_unittest/*.pem",
|
||
|
"data/parse_certificate_unittest/*.pk8",
|
||
|
"data/test.html",
|
||
|
"data/url_request_unittest/*",
|
||
|
"data/verify_certificate_chain_unittest/**/*.pem",
|
||
|
"data/verify_certificate_chain_unittest/**/*.test",
|
||
|
"data/verify_certificate_chain_unittest/pkits_errors/*.txt",
|
||
|
"data/verify_name_match_unittest/names/*.pem",
|
||
|
"data/verify_signed_data_unittest/*.pem",
|
||
|
"third_party/nist-pkits/certs/*.crt",
|
||
|
"third_party/nist-pkits/crls/*.crl",
|
||
|
]
|
||
|
|
||
|
# This regular expression identifies the "sources" section of
|
||
|
# net_unittests_bundle_data
|
||
|
net_unittest_bundle_data_regex = re.compile(r"""
|
||
|
bundle_data\("net_unittests_bundle_data"\) \{
|
||
|
testonly = true
|
||
|
sources = \[
|
||
|
(.+?)
|
||
|
\]
|
||
|
outputs = \[""", re.MULTILINE | re.DOTALL)
|
||
|
|
||
|
# ------------------------------------------
|
||
|
|
||
|
def get_net_path():
|
||
|
"""Returns the path to //net"""
|
||
|
return os.path.realpath(os.path.join(os.path.dirname(__file__), os.pardir))
|
||
|
|
||
|
|
||
|
def do_file_glob(rule):
|
||
|
# Do the globbing relative to //net
|
||
|
prefix = get_net_path()
|
||
|
matches = glob.glob(prefix + os.sep + rule)
|
||
|
|
||
|
# Strip off the prefix.
|
||
|
return [f[len(prefix) + 1:] for f in matches]
|
||
|
|
||
|
|
||
|
def resolve_file_globs(rules):
|
||
|
paths = []
|
||
|
for rule in rules:
|
||
|
paths.extend(do_file_glob(rule))
|
||
|
return paths
|
||
|
|
||
|
|
||
|
def read_file_to_string(path):
|
||
|
with open(path, 'r') as f:
|
||
|
return f.read()
|
||
|
|
||
|
|
||
|
def write_string_to_file(data, path):
|
||
|
with open(path, 'w') as f:
|
||
|
f.write(data)
|
||
|
|
||
|
|
||
|
def fatal(message):
|
||
|
print "FATAL: " + message
|
||
|
sys.exit(1)
|
||
|
|
||
|
|
||
|
def format_file_list(files):
|
||
|
# Keep the file list in sorted order.
|
||
|
files = sorted(files)
|
||
|
|
||
|
# Format to a string for GN (assume the filepaths don't contain
|
||
|
# characters that need escaping).
|
||
|
return ",\n".join(' "%s"' % f for f in files) + ","
|
||
|
|
||
|
|
||
|
def replace_sources(data, sources_regex, globs):
|
||
|
m = sources_regex.search(data)
|
||
|
if not m:
|
||
|
fatal("Couldn't find the sources section: %s" % sources_regex.pattern)
|
||
|
|
||
|
formatted_files = format_file_list(resolve_file_globs(globs))
|
||
|
return data[0:m.start(1)] + formatted_files + data[m.end(1):]
|
||
|
|
||
|
|
||
|
def main():
|
||
|
# Read in //net/BUILD.gn
|
||
|
path = os.path.join(get_net_path(), "BUILD.gn")
|
||
|
data = read_file_to_string(path)
|
||
|
|
||
|
# Replace the sources part of "net_unittests_bundle_data" with
|
||
|
# the current results of file globbing.
|
||
|
data = replace_sources(data, test_support_bundle_data_regex,
|
||
|
test_support_bundle_data_globs)
|
||
|
|
||
|
# Replace the sources part of "net_unittests_bundle_data" with
|
||
|
# the current results of file globbing.
|
||
|
data = replace_sources(data, net_unittest_bundle_data_regex,
|
||
|
net_unittest_bundle_data_globs)
|
||
|
|
||
|
write_string_to_file(data, path)
|
||
|
print "Wrote %s" % path
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.exit(main())
|