1*9c5db199SXin Li#!/usr/bin/python3 2*9c5db199SXin Li 3*9c5db199SXin Liimport os 4*9c5db199SXin Li 5*9c5db199SXin Li 6*9c5db199SXin Lidef has_match(line): 7*9c5db199SXin Li """check if file current line matches py3_strs. 8*9c5db199SXin Li 9*9c5db199SXin Li Args: 10*9c5db199SXin Li line: Current line to check. 11*9c5db199SXin Li 12*9c5db199SXin Li return: 13*9c5db199SXin Li Boolean True or False. 14*9c5db199SXin Li """ 15*9c5db199SXin Li py3_strs = [ 16*9c5db199SXin Li "#!/usr/bin/python3", "#!/usr/bin/env python3", 17*9c5db199SXin Li "# lint as: python2, python3", "# lint as: python3" 18*9c5db199SXin Li ] 19*9c5db199SXin Li for match in py3_strs: 20*9c5db199SXin Li if match in line: 21*9c5db199SXin Li return True 22*9c5db199SXin Li return False 23*9c5db199SXin Li 24*9c5db199SXin Li 25*9c5db199SXin Lidef need_to_skip(fullname): 26*9c5db199SXin Li """check if this file or folder that needs to be skipped from skip_strs. 27*9c5db199SXin Li 28*9c5db199SXin Li Args: 29*9c5db199SXin Li fullname: Current file or folder name. 30*9c5db199SXin Li 31*9c5db199SXin Li return: 32*9c5db199SXin Li Boolean True or False. 33*9c5db199SXin Li """ 34*9c5db199SXin Li skip_strs = ["__init__.py", "autotest_lib", "common.py", "site_tests"] 35*9c5db199SXin Li for match in skip_strs: 36*9c5db199SXin Li if match in fullname: 37*9c5db199SXin Li return True 38*9c5db199SXin Li return False 39*9c5db199SXin Li 40*9c5db199SXin Li 41*9c5db199SXin Lidef list_files_to_txt(upper_dir, file, suffix, nums_line_to_check): 42*9c5db199SXin Li """List results to .txt file by check all target files. 43*9c5db199SXin Li under the folder and subfolder. 44*9c5db199SXin Li 45*9c5db199SXin Li Args: 46*9c5db199SXin Li upper_dir: The folder path need to check. The default. 47*9c5db199SXin Li is the ipper path of this script. 48*9c5db199SXin Li file: output .txt file. The default is Python2MigrationTarget.txt. 49*9c5db199SXin Li suffix: File extensions that need to be checked. 50*9c5db199SXin Li nums_line_to_check: The number of rows to check. 51*9c5db199SXin Li 52*9c5db199SXin Li return: 53*9c5db199SXin Li All file names and paths that meet the standard. 54*9c5db199SXin Li """ 55*9c5db199SXin Li exts = suffix.split(" ") 56*9c5db199SXin Li files = os.listdir(upper_dir) 57*9c5db199SXin Li for filename in files: 58*9c5db199SXin Li fullname = os.path.join(upper_dir, filename) 59*9c5db199SXin Li if need_to_skip(fullname): 60*9c5db199SXin Li continue 61*9c5db199SXin Li if os.path.isdir(fullname): 62*9c5db199SXin Li list_files_to_txt(fullname, file, suffix, nums_line_to_check) 63*9c5db199SXin Li else: 64*9c5db199SXin Li for ext in exts: 65*9c5db199SXin Li if filename.endswith(ext): 66*9c5db199SXin Li filename = fullname 67*9c5db199SXin Li with open(filename, "r") as f: 68*9c5db199SXin Li for i in range(nums_line_to_check): 69*9c5db199SXin Li line = str(f.readline().strip()).lower() 70*9c5db199SXin Li if has_match(line): 71*9c5db199SXin Li tail = filename.split("third_party")[-1] 72*9c5db199SXin Li file.write("%s, 3\n" % tail) 73*9c5db199SXin Li else: 74*9c5db199SXin Li tail = filename.split("third_party")[-1] 75*9c5db199SXin Li file.write("%s, 2\n" % tail) 76*9c5db199SXin Li break 77*9c5db199SXin Li 78*9c5db199SXin Li 79*9c5db199SXin Lidef main(): 80*9c5db199SXin Li """This is main function""" 81*9c5db199SXin Li upper_dir = os.path.abspath( 82*9c5db199SXin Li os.path.join(os.path.dirname("__file__"), os.path.pardir)) 83*9c5db199SXin Li outfile = "Python2MigrationTarget.txt" 84*9c5db199SXin Li suffix = ".py" 85*9c5db199SXin Li nums_line_to_check = 20 86*9c5db199SXin Li file = open(outfile, "w") 87*9c5db199SXin Li if not file: 88*9c5db199SXin Li print("cannot open the file %s " % outfile) 89*9c5db199SXin Li list_files_to_txt(upper_dir, file, suffix, nums_line_to_check) 90*9c5db199SXin Li file.close() 91*9c5db199SXin Li 92*9c5db199SXin Li 93*9c5db199SXin Liif __name__ == "__main__": 94*9c5db199SXin Li 95*9c5db199SXin Li main() 96