| #!/usr/bin/env python |
| # Copyright 2020 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """This script finds all Python recipe files that are missing a copyright |
| notice and adds a copyright, modifying the files in-place.""" |
| |
| import datetime |
| import os |
| |
| COPYRIGHT = ( |
| """# Copyright %s The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """ |
| % datetime.datetime.now().year |
| ) |
| |
| |
| def main(): |
| cwd = os.getcwd() |
| recipe_dirs = [os.path.join(cwd, "recipes"), os.path.join(cwd, "recipe_modules")] |
| for directory in recipe_dirs: |
| for subdir, _, files in os.walk(directory): |
| for relpath in files: |
| _, ext = os.path.splitext(relpath) |
| if ext != ".py": |
| continue |
| path = os.path.join(subdir, relpath) |
| ensure_copyright(path) |
| |
| |
| def ensure_copyright(path): |
| with open(path, "r") as f: |
| orig_lines = f.readlines() |
| |
| add_copyright = False |
| copyright_line_index = 0 |
| if orig_lines: |
| # Shebangs and Python 2 encoding lines must come on the first line, so |
| # make sure to not insert copyright notices ahead of those types of |
| # lines. |
| if orig_lines[0].startswith(("#!", "# -*- coding")): |
| copyright_line_index = 1 |
| if len(orig_lines) <= 1 or not orig_lines[copyright_line_index].startswith( |
| "# Copyright" |
| ): |
| add_copyright = True |
| else: |
| add_copyright = True |
| |
| if not add_copyright: |
| return |
| |
| copyright_lines = [l + "\n" for l in COPYRIGHT.splitlines()] |
| |
| # Ensure there's a blank line between the copyright statement the next |
| # line, if the next line isn't a docstring. |
| if copyright_line_index < len(orig_lines): |
| next_line = orig_lines[copyright_line_index] |
| if next_line.strip() != "" and not next_line.startswith(('"""', "'''")): |
| copyright_lines.append("\n") |
| |
| with open(path, "w") as f: |
| new_lines = orig_lines[:] |
| new_lines[copyright_line_index:copyright_line_index] = copyright_lines |
| f.write("".join(new_lines)) |
| |
| |
| if __name__ == "__main__": |
| main() |