diff options
Diffstat (limited to 'tests/update.py')
-rwxr-xr-x | tests/update.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/update.py b/tests/update.py new file mode 100755 index 00000000..57634723 --- /dev/null +++ b/tests/update.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# Copyright 2018 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +This script should be run without any arguments to update the tests +documentation cross linking. + +It updates sections bounded by +.. Child list start +.. Child list end + +With links to all the child documentation, picking the text for each item +from the firts non blank line of the README.rst for that folder. +""" + +import os + +README = "README.rst" +START_MARKER = ".. Child list start\n" +END_MARKER = ".. Child list end\n" + +def main(): + for dirname, subdirs, files in os.walk("."): + if README not in files: + continue + readme = os.path.join(dirname, README) + out = [] + lines = [] + with open(readme) as f: + lines = f.readlines() + try: + start = lines.index(START_MARKER) + end = lines.index(END_MARKER) + except ValueError: + print('{}: No child markers'.format(readme)) + continue + if end < start: + print('{}: Invalid child markers'.format(readme)) + continue + print('{}: updating from {} to {}'.format(readme, start, end)) + out = lines[:start+1] + out.append("\n") + for sub in subdirs: + child = os.path.join(dirname, sub, README) + try: + with open(child) as f: + for line in f.readlines(): + childname = line.strip() + if childname: + break + if childname: + out.append("* `{} <{}/{}>`_\n".format(childname, sub, README)) + except: + continue + out.append("\n") + out.extend(lines[end:]) + if out: + with open(readme, "w") as f: + f.writelines(out) + + +if __name__ == "__main__": + main()
\ No newline at end of file |