1*9bb1b549SSpandan Das#!/usr/bin/env python 2*9bb1b549SSpandan Das# Copyright 2018 The Bazel Authors. All rights reserved. 3*9bb1b549SSpandan Das# 4*9bb1b549SSpandan Das# Licensed under the Apache License, Version 2.0 (the "License"); 5*9bb1b549SSpandan Das# you may not use this file except in compliance with the License. 6*9bb1b549SSpandan Das# You may obtain a copy of the License at 7*9bb1b549SSpandan Das# 8*9bb1b549SSpandan Das# http://www.apache.org/licenses/LICENSE-2.0 9*9bb1b549SSpandan Das# 10*9bb1b549SSpandan Das# Unless required by applicable law or agreed to in writing, software 11*9bb1b549SSpandan Das# distributed under the License is distributed on an "AS IS" BASIS, 12*9bb1b549SSpandan Das# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*9bb1b549SSpandan Das# See the License for the specific language governing permissions and 14*9bb1b549SSpandan Das# limitations under the License. 15*9bb1b549SSpandan Das 16*9bb1b549SSpandan Das""" 17*9bb1b549SSpandan DasThis script should be run without any arguments to update the tests 18*9bb1b549SSpandan Dasdocumentation cross linking. 19*9bb1b549SSpandan Das 20*9bb1b549SSpandan DasIt updates sections bounded by 21*9bb1b549SSpandan Das.. Child list start 22*9bb1b549SSpandan Das.. Child list end 23*9bb1b549SSpandan Das 24*9bb1b549SSpandan DasWith links to all the child documentation, picking the text for each item 25*9bb1b549SSpandan Dasfrom the firts non blank line of the README.rst for that folder. 26*9bb1b549SSpandan Das""" 27*9bb1b549SSpandan Das 28*9bb1b549SSpandan Dasimport os 29*9bb1b549SSpandan Das 30*9bb1b549SSpandan DasREADME = "README.rst" 31*9bb1b549SSpandan DasSTART_MARKER = ".. Child list start\n" 32*9bb1b549SSpandan DasEND_MARKER = ".. Child list end\n" 33*9bb1b549SSpandan Das 34*9bb1b549SSpandan Dasdef main(): 35*9bb1b549SSpandan Das for dirname, subdirs, files in os.walk("."): 36*9bb1b549SSpandan Das if README not in files: 37*9bb1b549SSpandan Das continue 38*9bb1b549SSpandan Das readme = os.path.join(dirname, README) 39*9bb1b549SSpandan Das out = [] 40*9bb1b549SSpandan Das lines = [] 41*9bb1b549SSpandan Das with open(readme) as f: 42*9bb1b549SSpandan Das lines = f.readlines() 43*9bb1b549SSpandan Das try: 44*9bb1b549SSpandan Das start = lines.index(START_MARKER) 45*9bb1b549SSpandan Das end = lines.index(END_MARKER) 46*9bb1b549SSpandan Das except ValueError: 47*9bb1b549SSpandan Das print('{}: No child markers'.format(readme)) 48*9bb1b549SSpandan Das continue 49*9bb1b549SSpandan Das if end < start: 50*9bb1b549SSpandan Das print('{}: Invalid child markers'.format(readme)) 51*9bb1b549SSpandan Das continue 52*9bb1b549SSpandan Das print('{}: updating from {} to {}'.format(readme, start, end)) 53*9bb1b549SSpandan Das out = lines[:start+1] 54*9bb1b549SSpandan Das out.append("\n") 55*9bb1b549SSpandan Das for sub in subdirs: 56*9bb1b549SSpandan Das child = os.path.join(dirname, sub, README) 57*9bb1b549SSpandan Das try: 58*9bb1b549SSpandan Das with open(child) as f: 59*9bb1b549SSpandan Das for line in f.readlines(): 60*9bb1b549SSpandan Das childname = line.strip() 61*9bb1b549SSpandan Das if childname: 62*9bb1b549SSpandan Das break 63*9bb1b549SSpandan Das if childname: 64*9bb1b549SSpandan Das out.append("* `{} <{}/{}>`_\n".format(childname, sub, README)) 65*9bb1b549SSpandan Das except: 66*9bb1b549SSpandan Das continue 67*9bb1b549SSpandan Das out.append("\n") 68*9bb1b549SSpandan Das out.extend(lines[end:]) 69*9bb1b549SSpandan Das if out: 70*9bb1b549SSpandan Das with open(readme, "w") as f: 71*9bb1b549SSpandan Das f.writelines(out) 72*9bb1b549SSpandan Das 73*9bb1b549SSpandan Das 74*9bb1b549SSpandan Dasif __name__ == "__main__": 75*9bb1b549SSpandan Das main()