author | William Roberts <williamr@symbian.org> |
Fri, 27 Aug 2010 12:59:17 +0100 | |
changeset 280 | 150026b6d3e6 |
parent 178 | eab8a264a833 |
permissions | -rw-r--r-- |
# Copyright (c) 2009 Symbian Foundation Ltd # 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 Ltd - initial contribution. # # Contributors: # mattd <mattd@symbian.org> # # Description: # DBRbaseline - module for handling vanilla baselines # import re import os import string from os.path import join, isfile, stat from stat import * import dbrutils def readdb(dbfile): db = dict() if(isfile(dbfile)): file = open(dbfile,'r') # regex = re.compile('(\S+)\s+(\S+)\s+(\S+)\s+(.+)\n') for line in file: #file structure 'timestamp size hash filename' avoids the problems of spaces in names, etc... results = re.split(':|\n',line) if(len(results) > 3): entry = dict() entry['time'] = results[0] entry['size'] = results[1] entry['md5'] = results[2] if(results[4]): entry['archive'] = results[4] print entry['archive'] db[results[3]] = entry # db[results[3]] = [results[0],results[1],results[2]] # bits = regex.match(line) # if(bits): # db[bits.group(3)] = [bits.group(0), bits.group(1), bits.group(2)] file.close() return db def writedb(db, dbfile): # print 'Writing db to', dbfile file = open(dbfile,'w') for filename in sorted(db): if (len(db[filename]) < 3): db[filename].append('') str = "%s:%s:%s:%s" %( db[filename]['time'],db[filename]['size'],db[filename]['md5'], filename) if('archive' in db[filename]): str = "%s:%s" %(str,db[filename]['archive']) # if(db[filename]['md5'] == 'xxx'): # print 'Warning: no MD5 for %s' % filename # str = "%s:%s:%s:%s\n" %( db[filename][0],db[filename][1],db[filename][2], filename) file.write('%s\n' % str) file.close() def md5test(db, md5testset): changed = set() md5s = dbrutils.generateMD5s(md5testset) for file in md5testset: if(db[file]['md5'] != md5s[file]['md5']): changed.add(file) return changed def updatedb(db1, db2): compareupdatedb(db1, db2, 1) def comparedb(db1, db2): compareupdatedb(db1, db2, 0) def compareupdatedb(db1, db2, update): print "compareupdatedb() is deprecated" db1files = set(db1.keys()) db2files = set(db2.keys()) removed = db1files - db2files added = db2files - db1files common = db1files & db2files touched = set() for file in common: if(db1[file]['time'] != db2[file]['time']): touched.add(file) sizechanged = set() for file in common: if(db1[file]['size'] != db2[file]['size']): sizechanged.add(file) #pobably won't bother with size changed... we know they're different... # md5testset = touched - sizechanged md5testset = touched changed = md5test(db1,md5testset) #remove the ones we know are changed touched = touched - changed print 'Comparing dbs/n' for file in sorted(added): print 'added:', file for file in sorted(removed): print 'removed:', file for file in sorted(touched): print 'touched:', file for file in sorted(changed): print 'changed:', file #update the touched... if(update): for file in sorted(touched): print 'Updating timestamp for: ',file db1[file]['time'] = db2[file]['time']