xref: /aosp_15_r20/external/bazelbuild-rules_go/tests/update.py (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
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()