1*b1cdbd2cSJim Jagielski# *************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski# *************************************************************
21*b1cdbd2cSJim Jagielskieval 'exec perl -wS $0 ${1+\"$@\"}'
22*b1cdbd2cSJim Jagielski    if 0;
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski# This program has to start for the new convwatch,
25*b1cdbd2cSJim Jagielski# once on Windows environment and once on Linux environment
26*b1cdbd2cSJim Jagielski# Solaris is handled by the linux also.
27*b1cdbd2cSJim Jagielski#
28*b1cdbd2cSJim Jagielski# This program polls the database (documentcompare) every 60s for new jobs
29*b1cdbd2cSJim Jagielski# it runs over the given directory from documentpoolpath and pool, and create for every file
30*b1cdbd2cSJim Jagielski# a new database entry in documents.
31*b1cdbd2cSJim Jagielski#
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim JagielskiBEGIN
34*b1cdbd2cSJim Jagielski{
35*b1cdbd2cSJim Jagielski        #       Adding the path of this script file to the include path in the hope
36*b1cdbd2cSJim Jagielski        #       that all used modules can be found in it.
37*b1cdbd2cSJim Jagielski        $0 =~ /^(.*)[\/\\]/;
38*b1cdbd2cSJim Jagielski        push @INC, $1;
39*b1cdbd2cSJim Jagielski}
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielskiuse ConvwatchHelper;
42*b1cdbd2cSJim Jagielskiuse CallExternals;
43*b1cdbd2cSJim Jagielskiuse stringhelper;
44*b1cdbd2cSJim Jagielskiuse filehelper;
45*b1cdbd2cSJim Jagielskiuse oshelper;
46*b1cdbd2cSJim Jagielskiuse timehelper;
47*b1cdbd2cSJim Jagielskiuse cwstestresulthelper;
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielskiuse strict;
50*b1cdbd2cSJim Jagielskiuse Cwd;
51*b1cdbd2cSJim Jagielskiuse File::Basename;
52*b1cdbd2cSJim Jagielskiuse English;                  # $OSNAME, ...
53*b1cdbd2cSJim Jagielskiuse Getopt::Long;
54*b1cdbd2cSJim Jagielskiuse File::Path;
55*b1cdbd2cSJim Jagielskiuse Cwd 'chdir';
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielskimy $cwd = getcwd();
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielskiour $help;                    # Help option flag
60*b1cdbd2cSJim Jagielskiour $version;                 # Version option flag
61*b1cdbd2cSJim Jagielskiour $test;
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielskiour $version_info = 'convwatch.pl $Revision: 1.24 $ ';
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielskiour $SOLARENV;
66*b1cdbd2cSJim Jagielskiour $COMMON_ENV_TOOLS;
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielskiour $documentpoolname;
70*b1cdbd2cSJim Jagielskiour $documentpoolpath;
71*b1cdbd2cSJim Jagielskiour $dbdistinct;
72*b1cdbd2cSJim Jagielskiour $sParentDistinct;
73*b1cdbd2cSJim Jagielskiour $sCurrentDocumentPool;
74*b1cdbd2cSJim Jagielski
75*b1cdbd2cSJim Jagielskiour $fs;
76*b1cdbd2cSJim Jagielskiour @aEntries;
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski# Prototypes
79*b1cdbd2cSJim Jagielski# sub getJavaFileDirSeparator();
80*b1cdbd2cSJim Jagielskisub readdirectory($$$);
81*b1cdbd2cSJim Jagielskisub putDocumentInDB($$$);
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski# flush STDOUT
84*b1cdbd2cSJim Jagielskimy $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle
85*b1cdbd2cSJim Jagielski$| = 1; # perform flush after each write to STDOUT
86*b1cdbd2cSJim Jagielskiselect ($old_handle); # restore previously selected handle
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim JagielskisetPrefix("gfxcmp");
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielskiif (!GetOptions(
91*b1cdbd2cSJim Jagielski                "test"          => \$test,
92*b1cdbd2cSJim Jagielski                "help"          => \$help,
93*b1cdbd2cSJim Jagielski                "version"       => \$version
94*b1cdbd2cSJim Jagielski                ))
95*b1cdbd2cSJim Jagielski{
96*b1cdbd2cSJim Jagielski    print_usage(*STDERR);
97*b1cdbd2cSJim Jagielski    exit(1);
98*b1cdbd2cSJim Jagielski}
99*b1cdbd2cSJim Jagielskiif ($help)
100*b1cdbd2cSJim Jagielski{
101*b1cdbd2cSJim Jagielski    print_usage(*STDOUT);
102*b1cdbd2cSJim Jagielski    exit(0);
103*b1cdbd2cSJim Jagielski}
104*b1cdbd2cSJim Jagielski# Check for version option
105*b1cdbd2cSJim Jagielskiif ($version)
106*b1cdbd2cSJim Jagielski{
107*b1cdbd2cSJim Jagielski    print STDERR "$version_info\n";
108*b1cdbd2cSJim Jagielski    exit(0);
109*b1cdbd2cSJim Jagielski}
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
112*b1cdbd2cSJim Jagielski# within mysql it is better to use only '/'
113*b1cdbd2cSJim Jagielski$fs = "/"; # getJavaFileDirSeparator();
114*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
115*b1cdbd2cSJim Jagielskisub readdirectory($$$)
116*b1cdbd2cSJim Jagielski{
117*b1cdbd2cSJim Jagielski    my $startdir = shift;
118*b1cdbd2cSJim Jagielski    my $sValues  = shift;
119*b1cdbd2cSJim Jagielski    my $hook     = shift;
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski    my $myfile;
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski    local *DIR;
124*b1cdbd2cSJim Jagielski    chdir $startdir;
125*b1cdbd2cSJim Jagielski    cwd();
126*b1cdbd2cSJim Jagielski    if (! endswith($startdir, $fs))
127*b1cdbd2cSJim Jagielski    {
128*b1cdbd2cSJim Jagielski        $startdir .= $fs;
129*b1cdbd2cSJim Jagielski    }
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski    my $nCountFiles = 0;
132*b1cdbd2cSJim Jagielski    if (opendir (DIR, $startdir))           # Directory oeffnen
133*b1cdbd2cSJim Jagielski    {
134*b1cdbd2cSJim Jagielski        while ($myfile = readdir(DIR))
135*b1cdbd2cSJim Jagielski        {                                  # ein filename holen
136*b1cdbd2cSJim Jagielski            #if (! -l $myfile)              # not a link
137*b1cdbd2cSJim Jagielski            #{
138*b1cdbd2cSJim Jagielski            if (-d $myfile ) # is a directory
139*b1cdbd2cSJim Jagielski            {
140*b1cdbd2cSJim Jagielski                if ( -l $myfile)
141*b1cdbd2cSJim Jagielski                {
142*b1cdbd2cSJim Jagielski                    next;
143*b1cdbd2cSJim Jagielski                }
144*b1cdbd2cSJim Jagielski                if ($myfile ne "." && $myfile ne "..")
145*b1cdbd2cSJim Jagielski                {
146*b1cdbd2cSJim Jagielski                    my $sNewStartDir = $startdir . $myfile ."/";    # neuen Directorystring erstellen
147*b1cdbd2cSJim Jagielski                    if ($sNewStartDir =~ "^\/proc" ||
148*b1cdbd2cSJim Jagielski                        $sNewStartDir =~ "^\/dev" ||
149*b1cdbd2cSJim Jagielski                        $sNewStartDir =~ "^\/udev" ||
150*b1cdbd2cSJim Jagielski                        $sNewStartDir =~ "lost+found" )
151*b1cdbd2cSJim Jagielski                    {
152*b1cdbd2cSJim Jagielski                        next;
153*b1cdbd2cSJim Jagielski                    }
154*b1cdbd2cSJim Jagielski                    # my $sNewDestDir  = $destdir . $myfile ."/";
155*b1cdbd2cSJim Jagielski                    # do a recursive call
156*b1cdbd2cSJim Jagielski                    # $nCountFiles++;
157*b1cdbd2cSJim Jagielski                    my $nFileCount = readdirectory($sNewStartDir, $sValues, $hook);
158*b1cdbd2cSJim Jagielski                    # workOnDir($sNewDir, $nFileCount);
159*b1cdbd2cSJim Jagielski                    $nCountFiles += $nFileCount;
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski                    chdir ($startdir);                      # zurueckwechseln.
162*b1cdbd2cSJim Jagielski                    cwd();
163*b1cdbd2cSJim Jagielski                }
164*b1cdbd2cSJim Jagielski            }
165*b1cdbd2cSJim Jagielski            else
166*b1cdbd2cSJim Jagielski            {
167*b1cdbd2cSJim Jagielski                # File must exist, be a regular file and must not be the $onlyOnFile
168*b1cdbd2cSJim Jagielski                if (-f $myfile)
169*b1cdbd2cSJim Jagielski                {
170*b1cdbd2cSJim Jagielski                    # print " $startdir" . "$myfile\n";
171*b1cdbd2cSJim Jagielski                    $nCountFiles++;
172*b1cdbd2cSJim Jagielski                    # workOnFile($startdir, $myfile, $destdir);
173*b1cdbd2cSJim Jagielski                    $hook->($startdir, $myfile, $sValues);
174*b1cdbd2cSJim Jagielski                }
175*b1cdbd2cSJim Jagielski            }
176*b1cdbd2cSJim Jagielski            #}
177*b1cdbd2cSJim Jagielski            #else
178*b1cdbd2cSJim Jagielski            #{
179*b1cdbd2cSJim Jagielski            #    print "linked file: $dir/$myfile\n";
180*b1cdbd2cSJim Jagielski            #}
181*b1cdbd2cSJim Jagielski        }
182*b1cdbd2cSJim Jagielski        closedir(DIR);
183*b1cdbd2cSJim Jagielski    }
184*b1cdbd2cSJim Jagielski    else
185*b1cdbd2cSJim Jagielski    {
186*b1cdbd2cSJim Jagielski        print "could not open $startdir\n";
187*b1cdbd2cSJim Jagielski    }
188*b1cdbd2cSJim Jagielski    return $nCountFiles;
189*b1cdbd2cSJim Jagielski}
190*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
191*b1cdbd2cSJim Jagielskisub putDocumentInDB($$$)
192*b1cdbd2cSJim Jagielski{
193*b1cdbd2cSJim Jagielski    my $currentDir = shift;
194*b1cdbd2cSJim Jagielski    my $currentFile = shift;
195*b1cdbd2cSJim Jagielski    my $sValues = shift;
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski    my $sSourceFilename = $currentDir . $currentFile;
198*b1cdbd2cSJim Jagielski    # we cut down all the previous names like documentpoolpath and the documentpoolname
199*b1cdbd2cSJim Jagielski    $sSourceFilename = substr($sSourceFilename, length($sCurrentDocumentPool . $fs));
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski    my $sSQL = "INSERT INTO documents (dbdistinct2, name, pagecount, priority, parentdistinct) VALUES";
202*b1cdbd2cSJim Jagielski    $sSQL .= "('" . $dbdistinct . "', '" . $sSourceFilename . "', 0, 1, '". $sParentDistinct . "')";
203*b1cdbd2cSJim Jagielski    # print $sSQL . "\n";
204*b1cdbd2cSJim Jagielski
205*b1cdbd2cSJim Jagielski    push(@aEntries, $sSQL);
206*b1cdbd2cSJim Jagielski    # ExecSQL($sSQL);
207*b1cdbd2cSJim Jagielski}
208*b1cdbd2cSJim Jagielski
209*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
210*b1cdbd2cSJim Jagielskisub createDBEntriesForEveryDocument($)
211*b1cdbd2cSJim Jagielski{
212*b1cdbd2cSJim Jagielski    my $sStr = shift;
213*b1cdbd2cSJim Jagielski    if ($sStr =~ /^MySQL-Error/ )
214*b1cdbd2cSJim Jagielski    {
215*b1cdbd2cSJim Jagielski        # we don't do anything if an error occured
216*b1cdbd2cSJim Jagielski        return;
217*b1cdbd2cSJim Jagielski    }
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielski    # interpret the follows string
220*b1cdbd2cSJim Jagielski    # documentpoolpath='//so-gfxcmp-documents/doc-pool', documentpool='demo_lla', dbdistinct=62,
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski    # my $sDocumentPoolDir;
223*b1cdbd2cSJim Jagielski    if ( $sStr =~ /documentpoolpath='(.*?)',/ )
224*b1cdbd2cSJim Jagielski    {
225*b1cdbd2cSJim Jagielski        $documentpoolpath = $1;
226*b1cdbd2cSJim Jagielski    }
227*b1cdbd2cSJim Jagielski    if (! $documentpoolpath)
228*b1cdbd2cSJim Jagielski    {
229*b1cdbd2cSJim Jagielski        print "Error: no value for documentpoolpath found.\n";
230*b1cdbd2cSJim Jagielski        return;
231*b1cdbd2cSJim Jagielski    }
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski    # my $sDocumentPool;
234*b1cdbd2cSJim Jagielski    if ( $sStr =~ /documentpool='(.*?)',/ )
235*b1cdbd2cSJim Jagielski    {
236*b1cdbd2cSJim Jagielski        $documentpoolname = $1;
237*b1cdbd2cSJim Jagielski    }
238*b1cdbd2cSJim Jagielski    if (! $documentpoolname)
239*b1cdbd2cSJim Jagielski    {
240*b1cdbd2cSJim Jagielski        print "Error: no value for documentpool found.\n";
241*b1cdbd2cSJim Jagielski        return;
242*b1cdbd2cSJim Jagielski    }
243*b1cdbd2cSJim Jagielski    # my $dbdistinct;
244*b1cdbd2cSJim Jagielski    if ( $sStr =~ /dbdistinct2='(\S*?)',/ )
245*b1cdbd2cSJim Jagielski    {
246*b1cdbd2cSJim Jagielski        $dbdistinct = $1;
247*b1cdbd2cSJim Jagielski    }
248*b1cdbd2cSJim Jagielski    if (! $dbdistinct)
249*b1cdbd2cSJim Jagielski    {
250*b1cdbd2cSJim Jagielski        print "Error: no dbdistinct given.\n";
251*b1cdbd2cSJim Jagielski        return;
252*b1cdbd2cSJim Jagielski    }
253*b1cdbd2cSJim Jagielski
254*b1cdbd2cSJim Jagielski    if (! -d $documentpoolpath )
255*b1cdbd2cSJim Jagielski    {
256*b1cdbd2cSJim Jagielski        my $sEnv = getEnvironment();
257*b1cdbd2cSJim Jagielski        if ( isUnixEnvironment() )
258*b1cdbd2cSJim Jagielski        {
259*b1cdbd2cSJim Jagielski            $documentpoolpath = "/net/so-gfxcmp-documents" . $documentpoolpath;
260*b1cdbd2cSJim Jagielski        }
261*b1cdbd2cSJim Jagielski        if ( -d $documentpoolpath )
262*b1cdbd2cSJim Jagielski        {
263*b1cdbd2cSJim Jagielski            print "Warning: given documentpoolpath seems to be local, fix to '$documentpoolpath'\n";
264*b1cdbd2cSJim Jagielski            my $sSQL = "UPDATE documentcompare SET documentpoolpath='$documentpoolpath' WHERE dbdistinct2='$dbdistinct'";
265*b1cdbd2cSJim Jagielski            print "$sSQL\n";
266*b1cdbd2cSJim Jagielski            ExecSQL($sSQL);
267*b1cdbd2cSJim Jagielski        }
268*b1cdbd2cSJim Jagielski        else
269*b1cdbd2cSJim Jagielski        {
270*b1cdbd2cSJim Jagielski            print "Error: documentpoolpath '$documentpoolpath' not found. Don't insert anything.\n";
271*b1cdbd2cSJim Jagielski            my $sSQL = "UPDATE documentcompare SET state='failed',info='documentpoolpath not found.' WHERE dbdistinct2='$dbdistinct'";
272*b1cdbd2cSJim Jagielski            print "$sSQL\n";
273*b1cdbd2cSJim Jagielski            ExecSQL($sSQL);
274*b1cdbd2cSJim Jagielski            return;
275*b1cdbd2cSJim Jagielski        }
276*b1cdbd2cSJim Jagielski    }
277*b1cdbd2cSJim Jagielski    # create the documentpool directory, to run through
278*b1cdbd2cSJim Jagielski    $sCurrentDocumentPool = $documentpoolpath;
279*b1cdbd2cSJim Jagielski    if (! endswith($sCurrentDocumentPool, $fs))
280*b1cdbd2cSJim Jagielski    {
281*b1cdbd2cSJim Jagielski        $sCurrentDocumentPool .= $fs;
282*b1cdbd2cSJim Jagielski    }
283*b1cdbd2cSJim Jagielski    $sCurrentDocumentPool .= $documentpoolname;
284*b1cdbd2cSJim Jagielski
285*b1cdbd2cSJim Jagielski    if ( -d $sCurrentDocumentPool )
286*b1cdbd2cSJim Jagielski    {
287*b1cdbd2cSJim Jagielski        if ( $sStr =~ /parentdistinct='(.*?)',/ )
288*b1cdbd2cSJim Jagielski        {
289*b1cdbd2cSJim Jagielski            $sParentDistinct = $1;
290*b1cdbd2cSJim Jagielski        }
291*b1cdbd2cSJim Jagielski        else
292*b1cdbd2cSJim Jagielski        {
293*b1cdbd2cSJim Jagielski            $sParentDistinct = "";
294*b1cdbd2cSJim Jagielski        }
295*b1cdbd2cSJim Jagielski
296*b1cdbd2cSJim Jagielski        # remove any doubles, if any
297*b1cdbd2cSJim Jagielski        my $sSQL = "DELETE FROM documents WHERE dbdistinct2='$dbdistinct'";
298*b1cdbd2cSJim Jagielski        print "$sSQL\n";
299*b1cdbd2cSJim Jagielski        ExecSQL($sSQL);
300*b1cdbd2cSJim Jagielski
301*b1cdbd2cSJim Jagielski        # run over the whole given document pool and store every found document name in the database
302*b1cdbd2cSJim Jagielski        readdirectory($sCurrentDocumentPool, "", \&putDocumentInDB);
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski        chdir $cwd;
305*b1cdbd2cSJim Jagielski        cwd();
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski        foreach $sSQL (@aEntries)
308*b1cdbd2cSJim Jagielski        {
309*b1cdbd2cSJim Jagielski            # print "# $sSQL\n";
310*b1cdbd2cSJim Jagielski            print "$sSQL\n";
311*b1cdbd2cSJim Jagielski            ExecSQL($sSQL);
312*b1cdbd2cSJim Jagielski        }
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski        my $sSQL = "UPDATE documentcompare SET state='inprogress' WHERE dbdistinct2='$dbdistinct'";
315*b1cdbd2cSJim Jagielski        print "$sSQL\n";
316*b1cdbd2cSJim Jagielski        ExecSQL($sSQL);
317*b1cdbd2cSJim Jagielski        print "----------------------------------------------------------------------\n";
318*b1cdbd2cSJim Jagielski        $sParentDistinct = "";
319*b1cdbd2cSJim Jagielski        @aEntries = ();
320*b1cdbd2cSJim Jagielski    }
321*b1cdbd2cSJim Jagielski    else
322*b1cdbd2cSJim Jagielski    {
323*b1cdbd2cSJim Jagielski        print "Error: Given document pool '$sCurrentDocumentPool' doesn't exists.\n";
324*b1cdbd2cSJim Jagielski        my $sSQL = "UPDATE documentcompare SET state='cancelled' WHERE dbdistinct2='$dbdistinct'";
325*b1cdbd2cSJim Jagielski        ExecSQL($sSQL);
326*b1cdbd2cSJim Jagielski        return;
327*b1cdbd2cSJim Jagielski    }
328*b1cdbd2cSJim Jagielski    # Send Mail, due to startconvwatch now
329*b1cdbd2cSJim Jagielski    sendMail($sStr, $documentpoolname, $dbdistinct);
330*b1cdbd2cSJim Jagielski}
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
333*b1cdbd2cSJim Jagielskisub sendMail($$$)
334*b1cdbd2cSJim Jagielski{
335*b1cdbd2cSJim Jagielski    my $sStr = shift;
336*b1cdbd2cSJim Jagielski    my $documentpool = shift;
337*b1cdbd2cSJim Jagielski    my $dbdistinct = shift;
338*b1cdbd2cSJim Jagielski    my $sourceversion;
339*b1cdbd2cSJim Jagielski    if ( $sStr =~ /sourceversion='(.*?)',/ )
340*b1cdbd2cSJim Jagielski    {
341*b1cdbd2cSJim Jagielski        $sourceversion = $1;
342*b1cdbd2cSJim Jagielski    }
343*b1cdbd2cSJim Jagielski    if (! $sourceversion)
344*b1cdbd2cSJim Jagielski    {
345*b1cdbd2cSJim Jagielski        print "Warning: no value for sourceversion found.\n";
346*b1cdbd2cSJim Jagielski        return;
347*b1cdbd2cSJim Jagielski    }
348*b1cdbd2cSJim Jagielski    my $destinationversion;
349*b1cdbd2cSJim Jagielski    if ( $sStr =~ /destinationversion='(.*?)',/ )
350*b1cdbd2cSJim Jagielski    {
351*b1cdbd2cSJim Jagielski        $destinationversion = $1;
352*b1cdbd2cSJim Jagielski    }
353*b1cdbd2cSJim Jagielski    if (! $destinationversion)
354*b1cdbd2cSJim Jagielski    {
355*b1cdbd2cSJim Jagielski        print "Warning: no value for destinationversion found.\n";
356*b1cdbd2cSJim Jagielski        return;
357*b1cdbd2cSJim Jagielski    }
358*b1cdbd2cSJim Jagielski    my $mailaddress;
359*b1cdbd2cSJim Jagielski    if ( $sStr =~ /mailfeedback='(.*?)',/ )
360*b1cdbd2cSJim Jagielski    {
361*b1cdbd2cSJim Jagielski        $mailaddress = $1;
362*b1cdbd2cSJim Jagielski    }
363*b1cdbd2cSJim Jagielski    if (! $mailaddress)
364*b1cdbd2cSJim Jagielski    {
365*b1cdbd2cSJim Jagielski        print "Warning: no value for mailfeedback found.\n";
366*b1cdbd2cSJim Jagielski        return;
367*b1cdbd2cSJim Jagielski    }
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski    # state is 'inprogress', so send a mail
370*b1cdbd2cSJim Jagielski    # my $sMailAddress = getMailAddress($sDoneStr);
371*b1cdbd2cSJim Jagielski    my $sParams = "$sourceversion";
372*b1cdbd2cSJim Jagielski    $sParams .= " $destinationversion";
373*b1cdbd2cSJim Jagielski    $sParams .= " $documentpool";
374*b1cdbd2cSJim Jagielski    $sParams .= " $dbdistinct";
375*b1cdbd2cSJim Jagielski    $sParams .= " $mailaddress";
376*b1cdbd2cSJim Jagielski    $sParams .= " starts";                    # run through state of convwatch
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski    my $sMailProgram = appendPath(getQADEVToolsPath(), "mailsend.php");
379*b1cdbd2cSJim Jagielski
380*b1cdbd2cSJim Jagielski    my $err;
381*b1cdbd2cSJim Jagielski    my @lines;
382*b1cdbd2cSJim Jagielski    my $sLine;
383*b1cdbd2cSJim Jagielski    ($err, @lines) = callphp(getPHPExecutable(), $sMailProgram, $sParams);
384*b1cdbd2cSJim Jagielski    foreach $sLine (@lines)
385*b1cdbd2cSJim Jagielski    {
386*b1cdbd2cSJim Jagielski        log_print( "Mail: $sLine\n");
387*b1cdbd2cSJim Jagielski    }
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim Jagielski    if ($documentpool eq "EIS-tests")
390*b1cdbd2cSJim Jagielski    {
391*b1cdbd2cSJim Jagielski        cwstestresult("running", $dbdistinct, $sourceversion, $destinationversion, $SOLARENV, $COMMON_ENV_TOOLS);
392*b1cdbd2cSJim Jagielski    }
393*b1cdbd2cSJim Jagielski}
394*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
395*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------
396*b1cdbd2cSJim Jagielski
397*b1cdbd2cSJim Jagielskimy $sEnvironmentCondition;
398*b1cdbd2cSJim Jagielskiif (isWindowsEnvironment())
399*b1cdbd2cSJim Jagielski{
400*b1cdbd2cSJim Jagielski    $sEnvironmentCondition = "environment='" . getEnvironment() . "'";
401*b1cdbd2cSJim Jagielski}
402*b1cdbd2cSJim Jagielskielsif (isUnixEnvironment())
403*b1cdbd2cSJim Jagielski{
404*b1cdbd2cSJim Jagielski    # $sEnvironmentCondition = " ( environment='unxlngi' OR environment='unxsoli' ) ";
405*b1cdbd2cSJim Jagielski    $sEnvironmentCondition = " environment='" . getEnvironment() . "'";
406*b1cdbd2cSJim Jagielski}
407*b1cdbd2cSJim Jagielskielse
408*b1cdbd2cSJim Jagielski{
409*b1cdbd2cSJim Jagielski    print "Error: wrong environment.\n";
410*b1cdbd2cSJim Jagielski    exit(1);
411*b1cdbd2cSJim Jagielski}
412*b1cdbd2cSJim Jagielskimy $sWhereClause = "WHERE ";
413*b1cdbd2cSJim Jagielskiif ($sEnvironmentCondition)
414*b1cdbd2cSJim Jagielski{
415*b1cdbd2cSJim Jagielski    $sWhereClause .= $sEnvironmentCondition . " AND ";
416*b1cdbd2cSJim Jagielski}
417*b1cdbd2cSJim Jagielski$sWhereClause .= " state='new'";
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim JagielskisetToolsPath(getQADEVToolsPath());
420*b1cdbd2cSJim Jagielski
421*b1cdbd2cSJim Jagielski# ---------------------------------- main loop ----------------------------------
422*b1cdbd2cSJim Jagielskiwhile (1)
423*b1cdbd2cSJim Jagielski{
424*b1cdbd2cSJim Jagielski    my @aResult;
425*b1cdbd2cSJim Jagielski    my $sSQL = "SELECT documentpoolpath,documentpool,dbdistinct2,sourceversion,destinationversion,mailfeedback,parentdistinct FROM documentcompare $sWhereClause";
426*b1cdbd2cSJim Jagielski    @aResult = ExecSQL($sSQL);
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski    my $aValue;
429*b1cdbd2cSJim Jagielski    foreach $aValue (@aResult)
430*b1cdbd2cSJim Jagielski    {
431*b1cdbd2cSJim Jagielski        # print "# $nValue\n";
432*b1cdbd2cSJim Jagielski        createDBEntriesForEveryDocument($aValue);
433*b1cdbd2cSJim Jagielski    }
434*b1cdbd2cSJim Jagielski    if ($test)
435*b1cdbd2cSJim Jagielski    {
436*b1cdbd2cSJim Jagielski        last;
437*b1cdbd2cSJim Jagielski    }
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski    # wait 30sec.
440*b1cdbd2cSJim Jagielski    # wait30seconds();
441*b1cdbd2cSJim Jagielski    waitAMinute();
442*b1cdbd2cSJim Jagielski    checkForStop("stop_fill_documents_loop");
443*b1cdbd2cSJim Jagielski}
444