| #!/usr/bin/python |
| ##################################################################### |
| # Copyright (c) 2023 Boeing |
| # |
| # This program and the accompanying materials are made |
| # available under the terms of the Eclipse Public License 2.0 |
| # which is available at https://www.eclipse.org/legal/epl-2.0/ |
| # |
| # SPDX-License-Identifier: EPL-2.0 |
| # |
| # Contributors: |
| # Boeing - initial API and implementation |
| ##################################################################### |
| |
| import sys |
| from os.path import exists |
| from validationUtils import * |
| |
| # argv[1] should be the keywords string, argv[2:] should be the list of changed file paths |
| def main(argv): |
| keywords = argv[1] |
| files = argv[2:] |
| findings = [] |
| |
| regexPattern = createKeywordRegex(keywords) |
| exclusionsRegex = getDistStatementExclusionsRegex() |
| |
| for file in files: |
| if not exists(file): |
| print("File not found or was deleted: " + file) |
| continue |
| fileNameResults = searchTextIgnoreCase(regexPattern, file) |
| if fileNameResults != None: |
| findings.append("Found keyword \"" + fileNameResults[0] + "\" in file name of " + file) |
| # Do not check contents of binary files such as images |
| try: |
| with open(file, 'r') as f: |
| lines = f.readlines() |
| requireDistStatement = isDistStatementRequired(file, exclusionsRegex) |
| distStatementFound = False |
| for line in lines: |
| if requireDistStatement and containsCopyright(line): |
| distStatementFound = True |
| searchResults = searchTextIgnoreCase(regexPattern, line) |
| if searchResults != None: |
| findings.append("Found keyword \"" + searchResults[0] + "\" on line " + str(lines.index(line)) + " of " + file + "\n --> " + line) |
| if requireDistStatement and not distStatementFound: |
| findings.append("No distribution statement in " + file) |
| except UnicodeDecodeError: |
| findings.append("Non-text data found in " + file) |
| continue |
| |
| if len(findings) > 0: |
| print("\n\n\n") |
| print("--- FINDINGS ---") |
| for finding in findings: |
| print(finding) |
| sys.exit(-1) |
| |
| sys.exit(0) |
| |
| if __name__ == "__main__": |
| main(sys.argv) |