#!/usr/bin/env python # -*- Mode: python -*- # Copyright (C) 2001-2021 Artifex Software, Inc. # All Rights Reserved. # # This software is provided AS-IS with no warranty, either express or # implied. # # This software is distributed under license and may not be copied, # modified or distributed except as expressly authorized under the terms # of the license contained in the file LICENSE in this distribution. # # Refer to licensing information at http://www.artifex.com or contact # Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, # CA 94945, U.S.A., +1(415)492-9861, for further information. # # # compare_checksumdb.py firstname secondname # # this script provides the difference between two sets of checksums # the files must be anydbm files, ususally with the testfile name as the key version="1.0" import sys, os import optparse, myoptparse import anydbm if __name__ == "__main__": optionsParser=optparse.OptionParser() optionsParser.add_option('--option',action='store_true',help="sample additional option") optionsParser.add_option('--nosvn',action='store_true',help="no not update from svn") optionsParser.add_option('--nomake',action='store_true',help="no not make") (options,arguments)=myoptparse.parseCommandLine(optionsParser) print options.revision old_dbname=arguments.pop(0) new_dbname=arguments.pop(0) print myself,old_dbname,new_dbname try: old_db = anydbm.open(old_dbname, 'r') except: old_db=None print myself,"ERROR: Test results for %s %s were not found." % (old_name,old_dbname) try: new_db = anydbm.open(new_dbname, 'r') except: new_db=None print myself,"ERROR: Test results for %s %s were not found." % (new_name,new_dbname) if not old_db: print myself,"empty checksum database",old_dbname if not new_db: print myself,"empty checksum database",new_dbname if not new_db or not old_db: normal_re = re.compile("^(.*?)\.(p[bgpk]mraw)\.(\d+)\.(\d+)$") pdfwrite_re = re.compile("^(.*?)\.(ps|pdf)\.pdf\.(p[bgpk]mraw)\.(\d+)\.(\d+)$") diffs = [] keys = new_db.keys() for k in keys: if k in baseline_db.keys(): if new_db[k] != baseline_db[k]: all_diffs.append(k) if k in old_db.keys(): if old_db[k] == baseline_db[k]: new_diffs.append(k) # new mismatch continue list = [] for d in new_diffs: type = '' filename = '' device = '' dpi = 0 banded = 0 m = pdfwrite_re.search(d) if m: type = 'pdfwrite' filename = m.group(1) + "." + m.group(2) device = m.group(3) dpi = int(m.group(4)) banded = int(m.group(5)) else: m = normal_re.search(d) if m: type = 'normal ' filename = m.group(1) device = m.group(2) dpi = int(m.group(3)) banded = int(m.group(4)) if not type: print myself,"WARNING: unknown device",d continue if banded: bandstr = "banded" else: bandstr = "noband" list.append((type, filename, device, dpi, bandstr)) length = len(list) if length>0: print print myself,new_name,"new differences from",old_name,"(",str(length)," differences)" list.sort() for l in list: print "%s %s (%s/%d/%s)" % (l[0], l[1], l[2], l[3], l[4]) else: print myself,new_name,"0 differences from",old_name list = [] for d in all_diffs: type = '' filename = '' device = '' dpi = 0 banded = 0 m = pdfwrite_re.search(d) if m: type = 'pdfwrite' filename = m.group(1) + "." + m.group(2) device = m.group(3) dpi = int(m.group(4)) banded = int(m.group(5)) else: m = normal_re.search(d) if m: type = 'normal ' filename = m.group(1) device = m.group(2) dpi = int(m.group(3)) banded = int(m.group(4)) if not type: print myself,"WARNING: unknown device",d continue if banded: bandstr = "banded" else: bandstr = "noband" list.append((type, filename, device, dpi, bandstr)) length = len(list) if length > 0: print print myself,new_name,"differences from baseline ("+str(length)+" differences)" list.sort() for l in list: print "%s %s (%s/%d/%s)" % (l[0], l[1], l[2], l[3], l[4]) else: print myself,new_name,"0 differences from baseline",baseline_db_path