diff --git a/tools/refactoring/removetrace.py b/tools/refactoring/removetrace.py new file mode 100644 index 000000000..43c622dc4 --- /dev/null +++ b/tools/refactoring/removetrace.py @@ -0,0 +1,161 @@ +# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +# NOTE: This is a hack which disobeys a number of conventions and best +# practices. It's here just to be easily shared. If it's to remain in the +# repository it should be refactored. + +#!/usr/bin/env python + +import stringmanipulation +import filemanagement +import sys + +trace_remove_key_word = 'kTraceModuleCall' + +if((len(sys.argv) != 2) and (len(sys.argv) != 3)): + print 'parameters are: parent directory [--commit]' + quit() + +if((len(sys.argv) == 3) and (sys.argv[2] != '--commit')): + print 'parameters are: parent directory [--commit]' + quit() + +commit = (len(sys.argv) == 3) + +directory = sys.argv[1]; +occurances = [] + +trace_identifier = 'WEBRTC_TRACE(' +extensions = ['.h','.cc','.c','.cpp'] +files_to_fix = [] +for extension in extensions: + files_to_fix.extend(filemanagement.listallfilesinfolder(directory,\ + extension)) + +# This function identifies the begining of a trace statement +def istracebegining(line): + return stringmanipulation.issubstring(line, trace_identifier) != -1 + +def endofstatement(line): + return stringmanipulation.issubstring(line, ';') != -1 + +def removekeywordfound(line): + return stringmanipulation.issubstring(line, trace_remove_key_word) != -1 + +# Used to store temporary result before flushing to real file when finished +def temporaryfilename(): + return 'deleteme.txt' + + +def find_occurances(path, file_name): + full_filename = path + file_name + file_handle = open(full_filename,'r') + line_is_trace = False + last_trace_line = -1 + for line_nr, line in enumerate(file_handle): + if(istracebegining(line)): + line_is_trace = True; + last_trace_line = line_nr + + if(line_is_trace): + if(removekeywordfound(line)): + occurances.append(last_trace_line) + + if(endofstatement(line)): + line_is_trace = False; + +def remove_occurances(path, file_name): + full_file_name = path + file_name + if (not filemanagement.fileexist(full_file_name)): + print 'File ' + full_file_name + ' is not found.' + print 'Should not happen! Ever!' + quit() + + full_temporary_file_name = path + temporaryfilename() + temporary_file = open(full_temporary_file_name,'w') + original_file = open(full_file_name,'r') + next_occurance_id = 0; + removing_statement = False + if(len(occurances) == next_occurance_id): + return + next_occurance = occurances[next_occurance_id] + next_occurance_id += 1 + for line_nr, line in enumerate(original_file): + if(line_nr == next_occurance): + removing_statement = True + if(len(occurances) == next_occurance_id): + next_occurance_id = -1 + else: + next_occurance = occurances[next_occurance_id] + next_occurance_id += 1 + + if (not removing_statement): + temporary_file.writelines(line) + + if(endofstatement(line)): + removing_statement = False; + + temporary_file.close() + original_file.close() + filemanagement.copyfile(full_file_name,full_temporary_file_name) + filemanagement.deletefile(full_temporary_file_name) + +def nextoccurance(): + if (len(occurances) == 0): + return -1 + return_value = occurances[0] + occurances = occurances[1:len(occurances)] + return return_value + +def would_be_removed_occurances(path, file_name): + full_file_name = path + file_name + if (not filemanagement.fileexist(full_file_name)): + print 'File ' + full_file_name + ' is not found.' + print 'Should not happen! Ever!' + quit() + + original_file = open(full_file_name,'r') + removing_statement = False + next_occurance_id = 0; + if(len(occurances) == next_occurance_id): + return + next_occurance = occurances[next_occurance_id] + next_occurance_id += 1 + for line_nr, line in enumerate(original_file): + if(line_nr == next_occurance): + removing_statement = True + if(len(occurances) == next_occurance_id): + return + next_occurance = occurances[next_occurance_id] + next_occurance_id += 1 + + if (removing_statement): + print line_nr + + if(endofstatement(line)): + removing_statement = False; + if(next_occurance == -1): + break + original_file.close() + +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] + + #print path_dir + filename + occurances = [] + find_occurances(path_dir, filename) + + if(not commit): + would_be_removed_occurances(path_dir, filename) + continue + remove_occurances(path_dir, filename)