164 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| import stringmanipulation
 | |
| import filemanagement
 | |
| import sys
 | |
| 
 | |
| extensions = ['.h','.cc','.c','.cpp']
 | |
| 
 | |
| ignore_these = ['my_ignore_header.h']
 | |
| 
 | |
| if((len(sys.argv) != 2) and (len(sys.argv) != 3)):
 | |
|     print 'parameters are: directory [--commit]'
 | |
|     quit()
 | |
| 
 | |
| directory = sys.argv[1];
 | |
| if(not filemanagement.pathexist(directory)):
 | |
|     print 'path ' + directory + ' does not exist'
 | |
|     quit()
 | |
| 
 | |
| if((len(sys.argv) == 3) and (sys.argv[2] != '--commit')):
 | |
|     print 'parameters are: parent directory extension new extension [--commit]'
 | |
|     quit()
 | |
| 
 | |
| commit = False
 | |
| if(len(sys.argv) == 3):
 | |
|     commit = True
 | |
| 
 | |
| files_to_fix = []
 | |
| for extension in extensions:
 | |
|     files_to_fix.extend(filemanagement.listallfilesinfolder(directory,\
 | |
|                                                        extension))
 | |
| 
 | |
| # Just steal the header from the template
 | |
| def fileheaderasstring():
 | |
|     template_file_name = 'license_template.txt'
 | |
|     if (not filemanagement.fileexist(template_file_name)):
 | |
|         print 'File ' + template_file_name + ' not found!'
 | |
|         quit()
 | |
|     template_file = open(template_file_name,'r')
 | |
|     return_string = ''
 | |
|     for line in template_file:
 | |
|         return_string += line
 | |
|     return return_string
 | |
| 
 | |
| # Just steal the header from the template
 | |
| def fileheaderasarray():
 | |
|     template_file_name = 'license_template.txt'
 | |
|     if (not filemanagement.fileexist(template_file_name)):
 | |
|         print 'File ' + template_file_name + ' not found!'
 | |
|         quit()
 | |
|     template_file = open(template_file_name,'r')
 | |
|     return_value = []
 | |
|     for line in template_file:
 | |
|         return_value.append(line)
 | |
|     return return_value
 | |
| 
 | |
| 
 | |
| def findheader(path, file_name):
 | |
|     full_file_name = path + file_name
 | |
|     if (not filemanagement.fileexist(full_file_name)):
 | |
|         print 'File ' + file_name + ' not found!'
 | |
|         print 'Unexpected error!'
 | |
|         quit()
 | |
|     file_handle = open(full_file_name)
 | |
|     template_file_content = fileheaderasarray()
 | |
|     compare_content = []
 | |
|     # load the same number of lines from file as the fileheader
 | |
|     for index in range(len(template_file_content)):
 | |
|         line = file_handle.readline()
 | |
|         if (line == ''):
 | |
|             return False
 | |
|         compare_content.append(line)
 | |
| 
 | |
|     while (True):
 | |
|         found = True
 | |
|         for index in range(len(template_file_content)):
 | |
|             line1 = template_file_content[index]
 | |
|             line2 = compare_content[index]
 | |
|             if(line1 != line2):
 | |
|                 found = False
 | |
|                 break
 | |
|         if (found):
 | |
|             return True
 | |
|         compare_content = compare_content[1:len(compare_content)]
 | |
|         line = file_handle.readline()
 | |
|         if (line == ''):
 | |
|             return False
 | |
|         compare_content.append(line)
 | |
|     return False
 | |
| 
 | |
| # Used to store temporary result before flushing to real file when finished
 | |
| def temporaryfilename(old_file_name):
 | |
|     return old_file_name + '.deleteme'
 | |
| 
 | |
| def updatefile(path, old_file_name):
 | |
|     full_old_file_name = path + old_file_name
 | |
|     if (not filemanagement.fileexist(full_old_file_name)):
 | |
|         print 'File ' + full_old_file_name + ' is not found.'
 | |
|         print 'Should not happen! Ever!'
 | |
|         quit()
 | |
| 
 | |
|     full_temporary_file_name = path + temporaryfilename(old_file_name)
 | |
| 
 | |
|     # Make sure that the files are closed by putting them out of scope
 | |
|     old_file = open(full_old_file_name,'r')
 | |
|     temporary_file = open(full_temporary_file_name,'w')
 | |
| 
 | |
|     temporary_file.writelines(fileheaderasstring())
 | |
|     remove_whitespaces = True
 | |
|     for line in old_file:
 | |
|         if (remove_whitespaces and (len(line.split()) == 0)):
 | |
|             continue
 | |
|         else:
 | |
|             remove_whitespaces = False
 | |
|         temporary_file.writelines(line)
 | |
|     old_file.close()
 | |
|     temporary_file.close()
 | |
| 
 | |
|     filemanagement.copyfile(full_old_file_name,full_temporary_file_name)
 | |
|     filemanagement.deletefile(full_temporary_file_name)
 | |
| 
 | |
| 
 | |
| failed_files = []
 | |
| skipped_files = []
 | |
| for index in range(len(files_to_fix)):
 | |
|     if(commit):
 | |
|         print (100*index)/len(files_to_fix)
 | |
|     path_dir = files_to_fix[index][0]
 | |
|     filename = files_to_fix[index][1]
 | |
|     is_ignore = False
 | |
|     for ignore_names in ignore_these:
 | |
|         if(filename == ignore_names):
 | |
|             is_ignore = True
 | |
|             break
 | |
|     if(is_ignore):
 | |
|         continue
 | |
| 
 | |
| # Let the word copyright be our sanity, i.e. make sure there is only one
 | |
| # copy right occurance or report that there will be no change
 | |
|     if(filemanagement.findstringinfile(path_dir,filename,'Copyright') or
 | |
|         filemanagement.findstringinfile(path_dir,filename,'copyright') or
 | |
|         filemanagement.findstringinfile(path_dir,filename,'COPYRIGHT')):
 | |
|         if(findheader(path_dir,filename)):
 | |
|             skipped_files.append(path_dir + filename)
 | |
|         else:
 | |
|             failed_files.append(path_dir + filename)
 | |
|         continue
 | |
| 
 | |
|     if (not commit):
 | |
|         print 'File ' + path_dir + filename + ' will be updated'
 | |
|         continue
 | |
|     updatefile(path_dir,filename)
 | |
| 
 | |
| tense = 'will be'
 | |
| if (commit):
 | |
|     tense = 'has been'
 | |
| if (len(skipped_files) > 0):
 | |
|     print str(len(skipped_files)) + ' file(s) ' + tense + ' skipped since they already have the correct header'
 | |
| 
 | |
| if (len(failed_files) > 0):
 | |
|     print 'Following files seem to have an invalid file header:'
 | |
| for line in failed_files:
 | |
|     print line
 | 
