version 0.8 - added command line options for username and password. Revised the exception handling
Also removed the saving of the cookies, as it never seemed to help
#!/usr/bin/python# Copyright (c) 2009 Symbian Foundation.# All rights reserved.# This component and the accompanying materials are made available# under the terms of the License "Eclipse Public License v1.0"# which accompanies this distribution, and is available# at the URL "http://www.eclipse.org/legal/epl-v10.html".## Initial Contributors:# Symbian Foundation - Initial contribution# # Description:# Map the SFL license to the EULA license, keeping a copy of the original file# in a parallel tree for creation of a "repair" kit to reinstate the SFLimport osimport os.pathimport reimport codecsoldtext0 = re.compile('terms of the License "Symbian Foundation License v1.0"(to Symbian Foundation)?')oldtext1 = re.compile('the URL "http:..www.symbianfoundation.org/legal/sfl-v10.html"')newtext = [ 'terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members', 'the URL "http://www.symbianfoundation.org/legal/licencesv10.html"']errorfiles = []multinoticefiles = []shadowroot = 'shadow_epoc32'def file_type(file) : f = open(file, 'r') data = f.read(256) f.close() if len(data) < 2: return None # too short to be worth bothering about anyway if data[0] == chr(255) and data[1] == chr(254) : return 'utf_16_le' if data.find(chr(0)) >= 0 : return None # zero byte implies binary file return 'text'def map_eula(dir, name, encoded) : global oldtext0 global newtext1 global newtext file = os.path.join(dir, name) if encoded == 'text': f = open(file, 'r') else: f = codecs.open(file, 'r', encoding=encoded) lines = f.readlines() # print ">> %s encoded as %s" % (file, f.encoding) f.close() updated = 0 newlines = [] while len(lines) > 0: line = lines.pop(0) pos1 = oldtext0.search(line) if pos1 != None: # be careful - oldtext is a prefix of newtext if pos1.group(1) != None: # line already converted - nothing to do newlines.append(line) continue midlines = [] midlinecount = 1 while len(lines) > 0: nextline = lines.pop(0) if not re.match('^\s$', nextline): # non-blank line if midlinecount == 0: break midlinecount -= 1 midlines.append(nextline) urlline = nextline pos2 = oldtext1.search(urlline) if pos2 != None: # found it - assume that there's only one instance newline = oldtext0.sub(newtext[0], line) newurl = oldtext1.sub(newtext[1], urlline) newlines.append(newline) newlines.extend(midlines) newlines.append(newurl) updated += 1 continue else: if updated != 0: lineno = 1 + len(newlines) print "Problem in " + file + " at " + lineno + ": incorrectly formatted >" print line print midlines print urlline global errorfiles errorfiles.append(file) break newlines.append(line) if updated == 0: print " = no change to " + file return if updated > 1: global multinoticefiles multinoticefiles.append(file) print '! found %d SFL notices in %s' % (updated, file) global shadowroot shadowdir = os.path.join(shadowroot, dir) if not os.path.exists(shadowdir) : os.makedirs(shadowdir) newfile = os.path.join(shadowroot,file) os.rename(file, newfile) if encoded == 'text': f = open(file, 'w') else: f = codecs.open(file, 'w', encoding=encoded) f.writelines(newlines) f.close() print "* updated %s (encoding %s)" % (file, f.encoding)# process treefor root, dirs, files in os.walk('epoc32', topdown=True): if re.compile('epoc32$').match(root) >= 0: if 'build' in dirs: dirs.remove('build') # don't recurse into the epoc32/build subtree for name in files: encoding = file_type(os.path.join(root, name)) if encoding: map_eula(root, name, encoding)print '%d problem files' % len(errorfiles)print errorfilesprint '%d files with multiple notices' % len(multinoticefiles)print multinoticefiles