def main_check(args, config): """CLI program command: check Check project files for license/header text. """ if args.files: filepaths = set(args.files) else: filepaths = (os.path.relpath(os.path.join(cwd, file)) for cwd, dirs, files in os.walk(".") for file in files if file != config_handling.CONFIG_FILENAME) if (not args.no_ignore) and config["IgnoredFiles"]: ignore_regex = "|".join( config_handling.param_ignoredfiles_to_regex(ignore_string) for ignore_string in config["IgnoredFiles"] ) filepaths = (file for file in filepaths if not re.match(ignore_regex, file)) if filepaths: text_dict = license_handling.fill_in_license( config["License"], config ) license_text = text_dict["license_text"] header_text = text_dict["header_text"] for path in filepaths: if not userfiles_handling.file_has_correct_header(path, args, config): if args.add_missing: if args.info_level == "verbose": print("Adding header to {}.".format(path)) commented_header_text, comment_format = \ license_handling.comment_out_header( header_text, path, args, config ) userfiles_handling.write_header( commented_header_text, path, ( comment_format.get("InsertAtLine", 0) if comment_format else 0 ), ) else: if args.info_level == "quiet": print(path) else: print( "{} has an incorrect or missing header.".format(path) )
def file_has_correct_header(user_filepath, args, config): """Return true if file designated by `path` has the correct header. """ try: linenum = _find_header_start_line(user_filepath) except UnicodeDecodeError: if args.info_level == "verbose": print( "File {} is not standard utf-8. It may be a binary.".format( user_filepath ) ) return False if linenum is not None: with open(user_filepath, "rt") as user_file: header_text = license_handling.fill_in_license( config["License"], config, )["header_text"] header_text, comment_format = license_handling.comment_out_header( header_text, user_filepath, args, config, ) header_lines = header_text.splitlines(keepends=True) user_file_lines = [ line for line in itertools.islice( user_file, linenum, linenum + len(header_lines), ) ] mismatched_lines = _compare_header_lines( header_lines, user_file_lines ) if args.info_level == "verbose" and mismatched_lines: print( ("In file {}: there are {} lines that do not match the" " expected license header.").format(user_filepath, mismatched_lines) ) return not bool(mismatched_lines) else: if args.info_level == "verbose": print( "File {} does not appear to have a license header.".format( user_filepath) ) return False