blob: c58a436fdd38a5f9e6395122fd313389408ec3b1 [file] [log] [blame]
#!/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()