--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dbrtools/dbr/dbrbaseline.py Wed Mar 03 17:22:06 2010 +0000
@@ -0,0 +1,122 @@
+# 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']