commsfwutils/commsbufs/mbufgobblerlayer/updatecontentandfilenames.py
author hgs
Thu, 23 Sep 2010 10:22:55 +0100
changeset 78 dd4909eb54cd
permissions -rw-r--r--
201037_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
78
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     1
import ConfigParser
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     2
##import io
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     3
import sys
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     4
import os
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     5
import re
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     6
import string
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     7
import shutil
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     8
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     9
active=1
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    10
iniFileName='updatecontentandfilenames.ini'
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    11
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    12
def AddSearchReplacePair(src,dst):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    13
	print "Will replace\t"+src+"  with\t"+dst
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    14
	search_replace[src] = dst
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    15
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    16
def DieAndWait(string):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    17
	print string
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    18
	sys.exit()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    19
	
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    20
def TranslateString(string):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    21
#	out = string
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    22
#	print "\ntranslating: "+string
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    23
	for src in search_replace.keys():
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    24
		dest = search_replace[src]
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    25
#		print "src: "+src+" dest: "+dest
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    26
		string = string.replace(src,dest)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    27
#		print "out: "+out
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    28
	return string
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    29
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    30
	
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    31
def RenameIfNecessary(root,file):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    32
	thisdest = TranslateString(file)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    33
	if(thisdest != file):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    34
		print "Renaming ["+file+"] to ["+thisdest+"]"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    35
		if active:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    36
			os.rename(os.path.join(root,file),os.path.join(root,thisdest))
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    37
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    38
def CorrectFile(file):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    39
	# ini file is special
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    40
	if(file.upper() == iniFileName.upper()):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    41
		CorrectIniFile(file)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    42
	else:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    43
		if(FileContainsSrc(file)):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    44
			print "Modifying ["+file+"]"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    45
			TranslateFile(file);
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    46
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    47
def FileContainsSrc(file):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    48
#	print "looking in ["+file+"]"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    49
	f = open(file)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    50
	found = 0
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    51
	for line in f:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    52
#		print "[[["+line
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    53
		for src in search_replace.keys():
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    54
			if(-1 != string.find(line,src)):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    55
				found = 1
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    56
#				print "\n'"+src+"' found in "+line+".. so.."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    57
				break
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    58
		if(found):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    59
			break
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    60
	f.close()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    61
	return found
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    62
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    63
def TranslateFile(file):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    64
	if (active == 0):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    65
		return
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    66
	shutil.copyfile(file,file+".bak")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    67
	i = open(file+".bak")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    68
	o = open(file,"w+")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    69
	for line in i:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    70
		out=TranslateString(line)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    71
		o.write(out)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    72
	i.close()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    73
	o.close()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    74
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    75
def CorrectIniFile(file):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    76
	if (active == 0):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    77
		return
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    78
	print "Correcting ini file "+file+" .."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    79
	shutil.copyfile(file,file+".bak")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    80
	i = open(file+".bak")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    81
	o = open(file,"w+")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    82
	searchfield=''
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    83
	for line in i:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    84
		ms=re.match('^\s*Search\s*=\s*(.+)',line,flags=re.IGNORECASE)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    85
		mr=re.match('^\s*Replace\s*=\s*(.+)',line,flags=re.IGNORECASE)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    86
		if(ms):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    87
			if(searchfield != ''):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    88
				print "Multiple search sections found before a replace. fix config file manually"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    89
				sys.exit()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    90
			searchfield = ms.group(1)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    91
		elif(mr):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    92
			if(searchfield == ''):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    93
				print "Replace section found before search section. fix config file manually"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    94
				sys.exit()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    95
			o.write("Search="+mr.group(1)+"\nReplace=CHANGEME\n")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    96
			searchfield=''
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    97
		else:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    98
			o.write(line)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    99
	i.close()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   100
	o.close()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   101
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   102
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   103
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   104
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   105
config = ConfigParser.ConfigParser()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   106
config.readfp(open(iniFileName))
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   107
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   108
print "1. Figuring out search/replace pairs.."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   109
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   110
search_replace = {} # empty map
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   111
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   112
for section in config.sections():
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   113
	src = config.get(section,'Search')
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   114
	if(src == ""):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   115
		DieAndWait("Error in ini file section '"+section+"': Must specify Search field")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   116
	if(src in search_replace):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   117
		DieAndWait("Error in ini file section '"+section+"': Search field '"+src+"' specified more than once")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   118
	dest = config.get(section,'Replace')
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   119
	if(dest == ""):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   120
		DieAndWait("Error in ini file section '"+section+"': Must specify Replace field")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   121
	if(dest == "CHANGEME"):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   122
		DieAndWait("Error in ini file section '"+section+"': Must specify value to replace '"+src+"' with")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   123
	
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   124
	AddSearchReplacePair(src,dest)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   125
	
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   126
	# deal with upper / lower case variants
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   127
	ucsrc = src.upper()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   128
	lcsrc = src.lower()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   129
	lcapsrc = ucsrc[:1]+lcsrc[1:]
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   130
	ucdest = dest.upper()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   131
	lcdest = dest.lower()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   132
	lcapdest = ucdest[:1]+lcdest[1:]
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   133
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   134
	if(ucsrc != src):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   135
		AddSearchReplacePair(ucsrc,ucdest)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   136
	if(lcsrc != src):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   137
		AddSearchReplacePair(lcsrc,lcdest)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   138
	if(lcapsrc != src and lcapsrc != lcsrc):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   139
		AddSearchReplacePair(lcapsrc,lcapdest)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   140
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   141
print "-----"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   142
print "2. Scanning for read-only files.."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   143
  
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   144
readOnlyFiles=0;
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   145
for root, dirs, files in os.walk("",topdown=False):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   146
	for file in files:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   147
#		print "Testing readable  : "+root+file
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   148
		try:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   149
			fh = open(os.path.join(root,file),"a+")
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   150
			fh.close()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   151
		except:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   152
			print "Read-only file detected: "+os.path.join(root,file)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   153
			readOnlyFiles=1
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   154
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   155
if(readOnlyFiles):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   156
	print "Can't operate with read-only files present."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   157
	sys.exit()
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   158
else:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   159
	print "No read-only files present. Proceeding to search/replace.."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   160
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   161
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   162
print "-----"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   163
print "3. Renaming files and folders.."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   164
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   165
for root, dirs, files in os.walk("",topdown=False):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   166
#	print "ROOT: "+root
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   167
	for dir in dirs:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   168
		RenameIfNecessary(root,dir)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   169
	for file in files:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   170
		RenameIfNecessary(root,file)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   171
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   172
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   173
print "-----"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   174
print "4. Search/replacing in files.."
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   175
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   176
for root, dirs, files in os.walk("",topdown=False):
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   177
	for file in files:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   178
		CorrectFile(os.path.join(root,file))
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   179
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   180
print "-----"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   181
print "Done."