1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#! /usr/bin/env python
#
# Copyright David Faure <faure@kde.org>, License LGPL v2
#
# This script renames files (sources and headers), and take care of
# - doing the svn command to rename the file
# - updating Makefile.am
# - updating #include lines (for headers and for .moc)
#
# The input is a file with a syntax like "kwframe KWFrame", one renaming on each line.
# "oldName newName" will rename oldName.h to newName.h and oldName.{cc,cpp} to newName.cpp
#
import sys, os
buildFile = "Makefile.am"
if not os.path.exists( buildFile ):
buildFile = "CMakeLists.txt"
if not os.path.exists( buildFile ):
buildFile = ""
MakefileAmContents = ""
if buildFile:
MakefileAmContents = file(buildFile, "r").read()
origMakefileAmContents = MakefileAmContents
def renameFile( oldFileName, newFileName ):
global MakefileAmContents
if oldFileName != newFileName and os.path.exists( oldFileName ):
print oldFileName + " -> " + newFileName
if os.path.exists( newFileName ):
print "Warning, erasing " + newFileName
os.unlink( newFileName ) # could be due to a former run
#os.rename( oldFileName, newFileName )
os.system( 'svn move --force ' + oldFileName + ' ' + newFileName )
MakefileAmContents = MakefileAmContents.replace( oldFileName, newFileName )
def renameHeader( oldFileName, newFileName ):
global MakefileAmContents
renameFile( oldFileName, newFileName )
MakefileAmContents = MakefileAmContents.replace( oldFileName.replace('.h','.skel'), newFileName.replace('.h','.skel') )
# And now rename includes
# ... in source files
files = os.popen('find . -name \'*[cph]\' | xargs grep -l '+oldFileName).readlines()
for f in files:
data = file(f.strip(),"r").read()
data = data.replace( '#include <' + oldFileName + '>', '#include <' + newFileName + '>' )
data = data.replace( '#include "' + oldFileName + '"', '#include "' + newFileName + '"' )
data = data.replace( '#include "' + oldFileName.replace('.h','.moc') + '"', '#include "' + newFileName.replace('.h','.moc') + '"' )
file(f.strip(),"w").write( data )
# ... in ui files
uifiles = os.popen('find . -name \'*.ui\' | xargs grep -l '+oldFileName).readlines()
for f in uifiles:
data = file(f.strip(),"r").read()
data = data.replace( '>' + oldFileName + '</header', '>' + newFileName + '</header>' )
file(f.strip(),"w").write( data )
# ... and in kcfg files
kcfgfiles = os.popen('find . -name \'*.kcfg\' | xargs grep -l '+oldFileName).readlines()
for f in kcfgfiles:
data = file(f.strip(),"r").read()
data = data.replace( '>' + oldFileName + '</include', '>' + newFileName + '</include>' )
file(f.strip(),"w").write( data )
def help():
print "Usage: %s filename"
print "where the file <filename> contains the definition of the files to rename."
sys.exit()
# Main
if len(sys.argv) < 2:
help()
replaceFileName = sys.argv[1];
for line in file(replaceFileName, "r").readlines():
words = line.split()
oldBaseName = words[0]
newBaseName = words[1]
renameHeader( oldBaseName + '.h', newBaseName + '.h' )
if os.path.exists( oldBaseName + '.cc' ):
renameFile( oldBaseName + '.cc', newBaseName + '.cpp' )
elif os.path.exists( oldBaseName + '.cpp' ):
renameFile( oldBaseName + '.cpp', newBaseName + '.cpp' )
# Write Makefile.am back
if buildFile and (origMakefileAmContents != MakefileAmContents):
file(buildFile,"w").write( MakefileAmContents )
|