#!/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. # # # update_baseline # # this script updates the testdata database with a new baseline sum # for all versions of file . use this when the comparing gs is # producing better output than the normal baseline (ie, when a regression # is really a progression) import gstestgs import gsconf import gssum import gsparamsets import rasterdb import anydbm import time import os, sys, copy import string import gsutil import optparse, myoptparse def update_databases(outputfile,device,dpi,band,revision,options): log = open(gsconf.baseline_log, "a") outputdevice=" ".join((device,str(dpi),str(band))) message=time.ctime() + " " + testfile +" "+outputdevice+ " updated "+revision if options and options.dryrun: print "dryrun",message else: log.write(message+"\n") log.close() baselinedb=gsconf.baselinedb if options and options.dryrun: pass else: gssum.add_file(outputfile,baselinedb) if options and options.dryrun: pass else: rasterdb.put_file(outputfile) if not options.nocleanup: os.unlink(outputfile) def make_entry(testfile, device, dpi, band,revision,options): testfilepath=gsconf.comparefileall + testfile if not os.path.exists(testfilepath): print options.myself,"cannot find","\""+testfilepath+"\"" outputfile = "%s.%s.%d.%d" % (testfile, device, dpi, band) print "update_baseline.py: " + outputfile sys.stdout.flush() gs = gstestgs.Ghostscript() gs.gsroot = gsconf.installtree gs.command = gsconf.installtree+"bin/gs" if not os.path.exists(gs.command): print options.myself,"gs executable does not exist",gs.command return if gsconf.gs_stdout and gsconf.gs_stderr: gs.log_stdout = gsconf.logdir+gsconf.gs_stdout gs.log_stderr = gsconf.logdir+gsconf.gs_stderr gs.infile = testfilepath gs.outfile = outputfile gs.device = device gs.dpi = dpi gs.band = band if gs.process(): update_databases(outputfile,device,dpi,band,revision=revision,options=options) else: print options.myself,"error from gs.process",testfilepath,device,dpi,band def make_pdf_entry(testfile, device, dpi, band,revision,options): testfilepath=gsconf.comparefileall + testfile if not os.path.exists(testfilepath): print options.myself,"cannot find","\""+testfilepath+"\"" outputfile = "%s.pdf.%s.%d.%d" % (testfile, device, dpi, band) print "update_baseline.py (pdf): " + outputfile sys.stdout.flush() gs = gstestgs.Ghostscript() gs.gsroot = gsconf.installtree gs.command = gsconf.installtree+"bin/gs" if not os.path.exists(gs.command): print options.myself,"gs executable does not exist",gs.command return gs.log_stdout = gsconf.logdir+gsconf.gs_stdout gs.log_stderr = gsconf.logdir+gsconf.gs_stderr gs.infile = gsconf.comparefileall + testfile gs.dpi = dpi gs.band = band intermediate_pdf_file = outputfile + ".pdf" gs.outfile = intermediate_pdf_file gs.device = 'pdfwrite' gs.dpi = None if not gs.process(): print options.myself,"error (->pdf)",testfilepath,device,dpi,band return gs.infile = intermediate_pdf_file gs.outfile = outputfile gs.device = device gs.dpi = dpi if gs.process(): update_databases(outputfile,device,dpi,band,revision=revision,options=options) else: print options.myself,"error.",testfilepath,device,dpi,band def make_entries_paramsets(testfile,options): buildroot=gsconf.gsroot revision_filename=buildroot+"revision" if os.path.exists(revision_filename): revision_file=open(revision_filename) revision = revision_file.readline() revision=revision.strip("\n") revision_file.close() else: revision="unknown" if gsutil.check_extension(testfile): for params in gsparamsets.testparamsets_maximum: make_entry(testfile, params.device, params.resolution, params.banding,revision=revision,options=options) def make_pdf_entries_paramsets(testfile,options): buildroot=gsconf.gsroot revision_filename=buildroot+"revision" if os.path.exists(revision_filename): revision_file=open(revision_filename) revision = revision_file.readline() revision=revision.strip("\n") revision_file.close() else: revision="unknown" if gsutil.check_extension(testfile): for params in gsparamsets.pdftestparamsets_maximum: make_pdf_entry(testfile, params.device, params.resolution, params.banding,revision=revision,options=options) if __name__ == '__main__': optionsParser=optparse.OptionParser() optionsParser.add_option('--dryrun',action='store_true',help="simple date format") optionsParser.add_option('--nocleanup',action='store_true',help="do not delete output files") optionsParser.add_option('--pdf',action='store_true',help="update pdfwrite raster") optionsParser.add_option('--both',action='store_true',help="update normal and pdfwrite raster") (options,arguments)=myoptparse.parseCommandLineBasic(optionsParser) myself=options.myself if options.pdf: options.normal=False else: options.normal=True if options.both: options.pdf=True options.normal=True if options.normal: files=copy.copy(arguments) while len(files) > 0: testfile = os.path.basename(files.pop(0)) testfilepath=gsconf.comparefileall + testfile if not os.path.exists(testfilepath): print myself,"cannot find","\""+testfilepath+"\"" continue make_entries_paramsets(testfile,options) if options.pdf: files=copy.copy(arguments) while len(files) > 0: testfile = os.path.basename(files.pop(0)) testfilepath=gsconf.comparefileall + testfile if not os.path.exists(testfilepath): print myself,"cannot find","\""+testfilepath+"\"" continue make_pdf_entries_paramsets(testfile,options)