git-svn-id: http://webrtc.googlecode.com/svn/trunk@8 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
145
tools/refactoring/fixincludeguards.py
Normal file
145
tools/refactoring/fixincludeguards.py
Normal file
@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import stringmanipulation
|
||||
import filemanagement
|
||||
import sys
|
||||
|
||||
extensions = ['.h']
|
||||
|
||||
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
|
||||
|
||||
for extension in extensions:
|
||||
files_to_fix = filemanagement.listallfilesinfolder(directory,\
|
||||
extension)
|
||||
|
||||
def buildincludeguardname(path,filename):
|
||||
full_file_name = 'WEBRTC_' + path + filename
|
||||
full_file_name = full_file_name.upper()
|
||||
full_file_name = stringmanipulation.replaceoccurances(full_file_name, '/', '_')
|
||||
full_file_name = stringmanipulation.replaceoccurances(full_file_name, '\\', '_')
|
||||
full_file_name = stringmanipulation.replaceoccurances(full_file_name, '.', '_')
|
||||
full_file_name += '_'
|
||||
return full_file_name
|
||||
|
||||
def buildnewincludeguardset(path,filename):
|
||||
include_guard_name = buildincludeguardname(path,filename)
|
||||
if(include_guard_name == ''):
|
||||
return []
|
||||
return_value = []
|
||||
return_value.append('#ifndef ' + include_guard_name)
|
||||
return_value.append('#define ' + include_guard_name)
|
||||
return_value.append(include_guard_name)
|
||||
return return_value
|
||||
|
||||
def printincludeguardset(include_guard_set):
|
||||
print 'First line: ' + include_guard_set[0]
|
||||
print 'Second line: ' + include_guard_set[1]
|
||||
print 'Last line: ' + include_guard_set[2]
|
||||
return
|
||||
|
||||
include_guard_begin_identifier = ['#ifndef', '#if !defined']
|
||||
include_guard_second_identifier = ['#define']
|
||||
def findincludeguardidentifier(line):
|
||||
for begin_identifier in include_guard_begin_identifier:
|
||||
line = stringmanipulation.removealloccurances(line,begin_identifier)
|
||||
for second_identifier in include_guard_begin_identifier:
|
||||
line = stringmanipulation.removealloccurances(line,second_identifier)
|
||||
removed_prefix = [True,'']
|
||||
line = stringmanipulation.whitespacestoonespace(line)
|
||||
while(removed_prefix[0]):
|
||||
removed_prefix = stringmanipulation.removeprefix(line,' ')
|
||||
line = removed_prefix[1]
|
||||
line = stringmanipulation.removealloccurances(line,'(')
|
||||
if(line == ''):
|
||||
return ''
|
||||
word_pos = stringmanipulation.getword(line,0)
|
||||
return_value = line[0:word_pos[1]]
|
||||
return_value = return_value.rstrip('\r\n')
|
||||
return return_value
|
||||
|
||||
def findoldincludeguardset(path,filename):
|
||||
return_value = []
|
||||
full_file_name = path + filename
|
||||
file_pointer = open(full_file_name,'r')
|
||||
include_guard_name = ''
|
||||
for line in file_pointer:
|
||||
if (include_guard_name == ''):
|
||||
for compare_string in include_guard_begin_identifier:
|
||||
if (stringmanipulation.issubstring(compare_string, line) != -1):
|
||||
include_guard_name = findincludeguardidentifier(line)
|
||||
if (include_guard_name == ''):
|
||||
break
|
||||
line = line.rstrip('\r\n')
|
||||
return_value.append(line)
|
||||
break
|
||||
else:
|
||||
for compare_string in include_guard_second_identifier:
|
||||
if (stringmanipulation.issubstring(compare_string, line) != -1):
|
||||
if (stringmanipulation.issubstring(include_guard_name, line) != -1):
|
||||
line = line.rstrip('\r\n')
|
||||
return_value.append(line)
|
||||
return_value.append(include_guard_name)
|
||||
return return_value
|
||||
include_guard_name = ''
|
||||
return_value = []
|
||||
return []
|
||||
|
||||
failed_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
|
||||
old_include_guard_set = findoldincludeguardset(path_dir,filename)
|
||||
if (len(old_include_guard_set) != 3) :
|
||||
failed_files.append('unable to figure out the include guards for ' + filename)
|
||||
continue
|
||||
|
||||
new_include_guard_set = buildnewincludeguardset(path_dir,filename)
|
||||
if (len(new_include_guard_set) != 3) :
|
||||
failed_files.append('unable to figure out new the include guards for ' + filename)
|
||||
continue
|
||||
|
||||
if(not commit):
|
||||
print 'old guard: ' + old_include_guard_set[2]
|
||||
print 'new guard: ' + new_include_guard_set[2]
|
||||
continue
|
||||
|
||||
for index in range(2):
|
||||
# enough to only replace for file. However, no function for that
|
||||
for extension in extensions:
|
||||
filemanagement.replacestringinfolder(path_dir,old_include_guard_set[index],new_include_guard_set[index],extension)
|
||||
# special case for last to avoid complications
|
||||
for extension in extensions:
|
||||
filemanagement.replacestringinfolder(path_dir,' ' + old_include_guard_set[2],' ' + new_include_guard_set[2],extension)
|
||||
filemanagement.replacestringinfolder(path_dir,'\\/\\/' + old_include_guard_set[2],'\\/\\/ ' + new_include_guard_set[2],extension)
|
||||
|
||||
|
||||
if(len(failed_files) > 0):
|
||||
print 'Following failures should be investigated manually:'
|
||||
for line in failed_files:
|
||||
print line
|
Reference in New Issue
Block a user