aboutsummaryrefslogtreecommitdiff
path: root/tests/update.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/update.py')
-rwxr-xr-xtests/update.py75
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