409 lines
11 KiB
Perl
409 lines
11 KiB
Perl
|
eval 'exec perl -wS $0 ${1+\"$@\"}'
|
||
|
if 0;
|
||
|
|
||
|
#*************************************************************************
|
||
|
#
|
||
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||
|
#
|
||
|
# Copyright 2000, 2010 Oracle and/or its affiliates.
|
||
|
#
|
||
|
# OpenOffice.org - a multi-platform office productivity suite
|
||
|
#
|
||
|
# This file is part of OpenOffice.org.
|
||
|
#
|
||
|
# OpenOffice.org is free software: you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU Lesser General Public License version 3
|
||
|
# only, as published by the Free Software Foundation.
|
||
|
#
|
||
|
# OpenOffice.org is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU Lesser General Public License version 3 for more details
|
||
|
# (a copy is included in the LICENSE file that accompanied this code).
|
||
|
#
|
||
|
# You should have received a copy of the GNU Lesser General Public License
|
||
|
# version 3 along with OpenOffice.org. If not, see
|
||
|
# <http://www.openoffice.org/license.html>
|
||
|
# for a copy of the LGPLv3 License.
|
||
|
#
|
||
|
#*************************************************************************
|
||
|
|
||
|
BEGIN
|
||
|
{
|
||
|
# Adding the path of this script file to the include path in the hope
|
||
|
# that all used modules can be found in it.
|
||
|
$0 =~ /^(.*)[\/\\]/;
|
||
|
push @INC, $1;
|
||
|
# print "PATH: " . $1 . "\n";
|
||
|
}
|
||
|
|
||
|
# my $e;
|
||
|
# foreach $e (keys %ENV)
|
||
|
# {
|
||
|
# print "$e := $ENV{$e}" . "\n";
|
||
|
# }
|
||
|
|
||
|
use strict;
|
||
|
use graphical_compare;
|
||
|
use ConvwatchHelper;
|
||
|
use filehelper;
|
||
|
use timehelper;
|
||
|
use loghelper;
|
||
|
|
||
|
use Cwd;
|
||
|
use File::Basename;
|
||
|
use Getopt::Long;
|
||
|
use English; # $OSNAME, ...
|
||
|
use File::Path;
|
||
|
use Cwd 'chdir';
|
||
|
|
||
|
our $help; # Help option flag
|
||
|
our $version; # Version option flag
|
||
|
# our $test;
|
||
|
|
||
|
# our $MAJOR;
|
||
|
# our $MINOR;
|
||
|
# our $cwsname;
|
||
|
our $pool;
|
||
|
our $document;
|
||
|
our $creatortype;
|
||
|
our $prepareonly = 0;
|
||
|
our $force;
|
||
|
our $verbose = 0;
|
||
|
our $show = 0;
|
||
|
our $connectionstring;
|
||
|
|
||
|
# Prototypes
|
||
|
sub print_usage(*);
|
||
|
sub prepare();
|
||
|
sub CompareFiles($$);
|
||
|
|
||
|
# flush STDOUT
|
||
|
# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle
|
||
|
# $| = 1; # perform flush after each write to STDOUT
|
||
|
# select ($old_handle); # restore previously selected handle
|
||
|
|
||
|
$OUTPUT_AUTOFLUSH=1; # works only if use English is used.
|
||
|
|
||
|
our $version_info = 'compare.pl';
|
||
|
|
||
|
GetOptions(
|
||
|
# "MAJOR=s" => \$MAJOR,
|
||
|
# "MINOR=s" => \$MINOR,
|
||
|
# "cwsname=s" => \$cwsname,
|
||
|
"pool=s" => \$pool,
|
||
|
"document=s" => \$document,
|
||
|
"creatortype=s" => \$creatortype,
|
||
|
"prepareonly=s" => \$prepareonly,
|
||
|
"connectionstring=s" => \$connectionstring,
|
||
|
|
||
|
"force" => \$force,
|
||
|
"verbose" => \$verbose,
|
||
|
"show" => \$show,
|
||
|
|
||
|
# "test" => \$test,
|
||
|
"help" => \$help,
|
||
|
"version" => \$version
|
||
|
);
|
||
|
|
||
|
if ($help)
|
||
|
{
|
||
|
print_usage(*STDOUT);
|
||
|
exit(0);
|
||
|
}
|
||
|
# Check for version option
|
||
|
if ($version)
|
||
|
{
|
||
|
print STDERR "$version_info\n";
|
||
|
exit(0);
|
||
|
}
|
||
|
|
||
|
if ($prepareonly)
|
||
|
{
|
||
|
$force=1;
|
||
|
}
|
||
|
|
||
|
prepare();
|
||
|
if ($connectionstring)
|
||
|
{
|
||
|
setConnectionString($connectionstring);
|
||
|
}
|
||
|
|
||
|
my $sDocumentPool = appendPath(getProjectRoot(), "document-pool");
|
||
|
# print "ProjectRoot: " . getProjectRoot() . "\n";
|
||
|
if ($ENV{DOCUMENTPOOL})
|
||
|
{
|
||
|
if ( -d $ENV{DOCUMENTPOOL})
|
||
|
{
|
||
|
print "overwrite default Documentpool: '$sDocumentPool'\n";
|
||
|
print " with \$ENV{DOCUMENTPOOL}: $ENV{DOCUMENTPOOL}\n";
|
||
|
$sDocumentPool = $ENV{DOCUMENTPOOL};
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print "Given \$DOCUMENTPOOL doesn't exist.\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
my $err = 0;
|
||
|
my $nCompareTime = getTime();
|
||
|
|
||
|
# if we want to check one file, give -pool and -document
|
||
|
# if we want to check the whole pool, give -pool
|
||
|
# if we want to check all, call without parameters
|
||
|
if ($pool)
|
||
|
{
|
||
|
if ($document)
|
||
|
{
|
||
|
$err = SingleDocumentCompare( $sDocumentPool,
|
||
|
$pool,
|
||
|
$document,
|
||
|
$creatortype,
|
||
|
$prepareonly,
|
||
|
$show
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$err = CompareFiles($sDocumentPool, $pool);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
local *DIR;
|
||
|
if (opendir (DIR, $sDocumentPool)) # Directory oeffnen
|
||
|
{
|
||
|
my $myfile;
|
||
|
while ($myfile = readdir(DIR))
|
||
|
{ # ein filename holen
|
||
|
if ($myfile eq "." ||
|
||
|
$myfile eq "..")
|
||
|
{
|
||
|
next;
|
||
|
}
|
||
|
my $sDocumentPath = appendPath($sDocumentPool, $myfile);
|
||
|
if ( -d $sDocumentPath )
|
||
|
{
|
||
|
$err += CompareFiles($sDocumentPool, $myfile);
|
||
|
}
|
||
|
elsif ( -f $sDocumentPath )
|
||
|
{
|
||
|
print "Warning: the file '$myfile' will not compared.\n";
|
||
|
}
|
||
|
}
|
||
|
closedir(DIR);
|
||
|
}
|
||
|
# my $sPool = "eis-chart";
|
||
|
# $err += CompareFiles($sDocumentPool, "eis-chart");
|
||
|
# $err += CompareFiles($sDocumentPool, "eis-impress");
|
||
|
# $err += CompareFiles($sDocumentPool, "eis-writer");
|
||
|
# $err += CompareFiles($sDocumentPool, "eis-calc");
|
||
|
|
||
|
}
|
||
|
|
||
|
printTime(endTime($nCompareTime));
|
||
|
exit ($err);
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
sub CompareFiles($$)
|
||
|
{
|
||
|
my $sDocumentPath = shift;
|
||
|
my $sPool = shift;
|
||
|
my %aFailedHash;
|
||
|
my $startdir = appendPath($sDocumentPath, $sPool);
|
||
|
|
||
|
local *DIR;
|
||
|
if (opendir (DIR, $startdir)) # Directory oeffnen
|
||
|
{
|
||
|
my $myfile;
|
||
|
while ($myfile = readdir(DIR))
|
||
|
{ # ein filename holen
|
||
|
if ($myfile eq "knownissues.xcl")
|
||
|
{
|
||
|
next;
|
||
|
}
|
||
|
my $sAbsoluteFile = appendPath($startdir, $myfile);
|
||
|
if (-f $sAbsoluteFile)
|
||
|
{
|
||
|
my $nIssue;
|
||
|
my $sIssueText;
|
||
|
($nIssue, $sIssueText) = checkForKnownIssue($startdir, $myfile);
|
||
|
if ($nIssue == 0)
|
||
|
{
|
||
|
$err = SingleDocumentCompare(
|
||
|
# "/net/so-gfxcmp-documents.germany.sun.com/export/gfxcmp/document-pool", # $documentpoolpath,
|
||
|
$sDocumentPool,
|
||
|
$sPool, # $documentpool,
|
||
|
$myfile, # $documentname);
|
||
|
$creatortype, # $destinationcreatortype,
|
||
|
$prepareonly,
|
||
|
$show
|
||
|
);
|
||
|
$aFailedHash{$myfile} = $err;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print "$myfile [KNOWN ISSUE: #$sIssueText#]\n";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
closedir(DIR);
|
||
|
}
|
||
|
|
||
|
print "***** State for graphical compare of pool: '$sPool' ******\n";
|
||
|
my $nErrorCount = 0;
|
||
|
my $file;
|
||
|
foreach $file (keys %aFailedHash)
|
||
|
{
|
||
|
if ($aFailedHash{$file} != 0)
|
||
|
{
|
||
|
print "Failed: $file\n";
|
||
|
$nErrorCount++;
|
||
|
}
|
||
|
}
|
||
|
print "Whole unit: ";
|
||
|
if ($nErrorCount > 0)
|
||
|
{
|
||
|
print "PASSED.FAILED\n";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print "PASSED.OK\n";
|
||
|
}
|
||
|
print "************************************************************\n";
|
||
|
return $nErrorCount;
|
||
|
}
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# return issue number if file exists in knownissues.xcl file
|
||
|
sub checkForKnownIssue($$)
|
||
|
{
|
||
|
my $startdir = shift;
|
||
|
my $myfile = shift;
|
||
|
|
||
|
if ($force)
|
||
|
{
|
||
|
return 0,"";
|
||
|
}
|
||
|
|
||
|
my $sKnownIssueFile = appendPath($startdir, "knownissues.xcl");
|
||
|
my $sIssueText = "unknown";
|
||
|
local *ISSUES;
|
||
|
my $nIssue = 0;
|
||
|
my $sCurrentSection;
|
||
|
|
||
|
if (open(ISSUES, $sKnownIssueFile))
|
||
|
{
|
||
|
my $line;
|
||
|
while ($line = <ISSUES>)
|
||
|
{
|
||
|
chomp($line);
|
||
|
if ($line =~ /\[(.*)\]/ )
|
||
|
{
|
||
|
$sCurrentSection = $1;
|
||
|
next;
|
||
|
}
|
||
|
if ($sCurrentSection eq $creatortype)
|
||
|
{
|
||
|
if ($line =~ /\#\#\# (.*) \#\#\#/ )
|
||
|
{
|
||
|
$sIssueText = $1;
|
||
|
}
|
||
|
if ($line =~ /^${myfile}$/ )
|
||
|
{
|
||
|
$nIssue = 1;
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
close(ISSUES);
|
||
|
}
|
||
|
return $nIssue, $sIssueText;
|
||
|
}
|
||
|
# ------------------------------------------------------------------------------
|
||
|
sub prepare()
|
||
|
{
|
||
|
# directory structure:
|
||
|
# documents will be found in
|
||
|
# ../document-pool/eis-tests
|
||
|
|
||
|
# references will be found in
|
||
|
# ../references/unxlngi/eis-tests
|
||
|
# ../references/wntmsci/eis-tests
|
||
|
|
||
|
# output goes to
|
||
|
# ../unxlngi6.pro/misc
|
||
|
|
||
|
if ($verbose)
|
||
|
{
|
||
|
setVerbose();
|
||
|
}
|
||
|
|
||
|
# TEST
|
||
|
if (!$ENV{INPATH})
|
||
|
{
|
||
|
if ($OSNAME eq "linux")
|
||
|
{
|
||
|
# just for debug
|
||
|
setINPATH("unxlngi6.pro");
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
setINPATH($ENV{INPATH});
|
||
|
}
|
||
|
|
||
|
if (! $creatortype)
|
||
|
{
|
||
|
$creatortype= "ps";
|
||
|
}
|
||
|
|
||
|
my $cwd = getcwd();
|
||
|
print "Current Directory: $cwd\n" if ($verbose);
|
||
|
my $sProjectBase;
|
||
|
if ($ENV{PRJ})
|
||
|
{
|
||
|
# print "cwd:=$cwd\n";
|
||
|
# print "PRJ:=$ENV{PRJ}\n";
|
||
|
$sProjectBase = appendPath($cwd, $ENV{PRJ});
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$sProjectBase = dirname($cwd);
|
||
|
}
|
||
|
if ($OSNAME eq "cygwin")
|
||
|
{
|
||
|
$sProjectBase = `cygpath -w $sProjectBase`;
|
||
|
chomp($sProjectBase);
|
||
|
$sProjectBase = unixpath($sProjectBase);
|
||
|
# print "cygwin patch \$sProjectBase := $sProjectBase\n";
|
||
|
}
|
||
|
# print "Project base path: $sProjectBase\n";
|
||
|
setProjectRoot($sProjectBase);
|
||
|
|
||
|
|
||
|
# TEST TEST TEST
|
||
|
# exit (0);
|
||
|
}
|
||
|
# ------------------------------------------------------------------------------
|
||
|
sub print_usage(*)
|
||
|
{
|
||
|
local *HANDLE = $_[0];
|
||
|
my $tool_name = basename($0);
|
||
|
|
||
|
print(HANDLE <<END_OF_USAGE);
|
||
|
|
||
|
Usage: $tool_name [OPTIONS]
|
||
|
|
||
|
-pool Give pool name out of document-pool directory.
|
||
|
But all documents list in knownissues.xcl will not check.
|
||
|
-document Give a single document to test, the known issue list will ignored.
|
||
|
-creatortype=s s:ps create postscript files via print to file.
|
||
|
s:pdf create PDF file via export to pdf.
|
||
|
-h, --help Print this help, then exit
|
||
|
-v, --version Print version number, then exit
|
||
|
|
||
|
END_OF_USAGE
|
||
|
;
|
||
|
}
|